저는 MySQL을 사용하는 전자 상거래 응용 프로그램을 가지고 있습니다. 이전에 액세스 한 웹 사이트에서 부품 #을 액세스하면 필요한 모든 데이터가 이미 INNODB 버퍼 풀에 있으므로 부품이 빠르게로드됩니다. 그러나 파트 #이 한번도로드되지 않은 경우 해당 데이터는 아직 버퍼 풀에 없으므로 디스크에서 읽어야하므로 속도가 느립니다. INNODB 버퍼 풀을 2GB로 설정 했으므로이 전체 데이터베이스는 약 350MB 밖에되지 않으므로 버퍼 풀에 전체 데이터베이스를로드 할 여지는 충분합니다. INNODB 통계에서 버퍼 풀의 약 절반 만 사용된다는 것을 알 수 있습니다.MySQL을 사용하여 INNODB 버퍼 풀에 테이블을 미리로드하는 방법은 무엇입니까?
Quickly preloading Innodb tables in the buffer pool 또는 mysqldump.azundris.com/archives/70-Innodb-cache-preloading-using-blackhole과 같이 버퍼 풀을 예열하는 것으로 알려진 데이터를 미리로드하는 것에 대한 참조를 발견했습니다. .html. 이 전략은 기본적으로 MySQL에 데이터를 미리로드 할 수있는 기본 방법이 없으므로 각 테이블에서 테이블 검색을 강제 실행하는 작업을 포함합니다.
데이터베이스의 모든 단일 테이블을 나열하고이를 수행해야하는 스크립트를 수동으로 만들고 싶지 않습니다. 어떻게 자동으로 각 테이블에 대해 select를 수행하고 자동으로 스크립트를 작성하고 인덱스 스캔되지 않은 열을 자동으로 선택하여 테이블 스캔이 수행됩니까?
SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'database name'
를 그런 다음 각 테이블 이름 힘 테이블 스캔 : 사용자가 수동으로 입력 그들에게 필요가 없습니다
이 알고리즘은 간단하고 명쾌합니다. 그러면 innodb 데이터가 캐시됩니다. 이 캐시가 모든 innodb 인덱스 페이지를 캐시 할 지 확신 할 수 없지만 알고리즘을 빠르게 적용 할 수 있습니다. MyISAM은 MYI 색인 페이지 만 캐시합니다. 다시 말하지만 알고리즘은 테이블과 인덱스를 통과하는 기초를 형성합니다. 브라보 (그리고 +1) !!!! – RolandoMySQLDBA
Mine은 쿼리 목록을 가져 오기위한 구현 방법입니다. 아이디어는 MySQL의 성능 블로그에서 질문에 링크에서 비롯됩니다. – Mchl