고려해야 할 사항 중 하나는 MySQL이 주요 스토리지 엔진에 버퍼를 사용하는 방식 ( InnoDB 및 MyISAM) 입니다.
메모리에 캐시 된 것은이 스토리지 엔진마다 크게 다릅니다.
InnoDB는 데이터와 인덱스 페이지를 모두 캐시합니다. 이들은 innodb_buffer_pool_size 크기로 InnoDB 버퍼 풀에로드됩니다 .
MyISAM은 인덱스 페이지 만 캐시하며 키 캐시 (키 버퍼)에로드되며 키 크기는 key_buffer_size 로 조정됩니다 .
InnoDB 버퍼 풀 및 MyISAM 키 캐시의 크기를 올바르게 조정 하려면 디스크에서 데이터 및 인덱스 크기를 확보 하려면 information_schema.tables 를 사용해야 합니다 .
보유한 데이터 양과 허용 시간에 따라 다음과 같이 캐시를 예열 할 수 있습니다.
모든 테이블에 대해
- 각 인덱스 NDX로 이동
- 각 인덱스 NDX
- NDX의 모든 열에 대해 SELECT를 실행하십시오 . TableT 에서 TableT에 색인화되지 않은 하나 이상의 열
이렇게하면 모든 데이터 및 색인 페이지를 한 번 이상 읽을 수 있습니다. 그들은 캐시에 앉아있을 것입니다. 이 개념은 부분적으로 그리고 원칙적으로 Percona 에 의해 실행됩니다 . Percona는이 개념을 mk-slave-prefetch에 구축했습니다 . 이 프로그램이하는 일은
- 슬레이브에서 SQL을 처리하는 슬레이브보다 릴레이 로그 읽기
- 릴레이 로그에서 SQL 문을 가져 와서 인덱스 선택에 대한 지침으로 WHERE, GROUP BY 및 ORDER BY 절을 사용하여 SELECT로 변환하십시오.
- 변환 된 SQL에서 온 SELECT 문을 실행하십시오.
이로 인해 슬레이브가 SQL을 신속하게 처리하는 데 필요한 데이터의 99.99 %가 슬레이브에있게됩니다. 또한 수동으로 슬레이브로 페일 오버하고 마스터로 승격시키는 경우 슬레이브가 준비된 상태로 만듭니다.
결론
캐시를 준비하고, 기꺼이 준비하고, 무거운 INSERTS, UPDATE 및 DELETE 환경에서 사용할 수있는 것이 가장 좋습니다.
시도 해봐 !!!
경고
memcached와 같은 제품이 탄생함에 따라 일부는 MySQL의 적절한 튜닝을 수행 할 필요가 없어졌습니다. 물론 많은 사이트에서 개발자가 memcached로 빠르게 본 것처럼 데이터의 캐싱 동작을 제어하여 제공되는 데이터 검색이 향상되었습니다. 스토리지 엔진을 전환하거나 MySQL을 올바르게 구성하기 만하면 다른 많은 사이트에서도 동일한 성능 이점을 얻을 수 있습니다. 데이터베이스를 포기하고 리포지토리로 엄격하게 사용하기 전에 데이터베이스를 최대한 활용하십시오. 실사를 따르고 MySQL이 당신을 위해 무엇을하는지 유쾌하게 놀라게 될 것입니다.