2012-10-05 2 views
4

최적의 성능을 위해 Magento DB를 조정하려고합니다.Magento Mysql 튜닝 - 테이블 캐시

4GB RAM, 4GB RAM이 장착 된 8CPU 코어 가상 머신에서 nginx, php-fpm 및 mysql을 실행 중입니다.

내가 MySQL을 조정 뇌관을 실행 한 모든 것이 내 테이블 캐시에서 떨어져 좋아 보인다 :

TABLE CACHE 
Current table_open_cache = 1000 tables 
Current table_definition_cache = 400 tables 
You have a total of 2510 tables 
You have 1000 open tables. 
Current table_cache hit rate is 3% 
, while 100% of your table cache is in use 
You should probably increase your table_cache 
You should probably increase your table_definition_cache value. 

및 mysqltuner에서

[!!] Table cache hit rate: 9% (1K open/10K opened) 
[!!] Query cache efficiency: 0.0% (0 cached/209 selects) 

my.cnf 파일에서 관련 설정 :

table_cache   = 1000 
query_cache_limit = 1M 
query_cache_size  = 64M 

문제는 내가 table_cache를 늘리더라도 문제가되는 것입니다. 거의 즉시 합계했다. Magento는 정상입니까? 비정상적으로 높은 것 같습니까?

누구나 개선 할 수있는 방법에 대한 조언이 있습니까?

감사합니다,

에드

답변

1

당신의 MySQL의 설정의 쿼리 캐시 유형 설정을 확인하십시오 : 당신이 중 어떤 쿼리를 캐시하지 않습니다 다음 0 또는 2로 설정하면

http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_query_cache_type

또는 특별히 캐시하도록 요청한 캐시 만 캐시합니다. Magento가 캐시 된 쿼리 결과를 명시 적으로 요구해야한다는 것을 의미합니다. 이 값을 1로 설정하면 명시 적으로 쿼리 캐시를 요청하지 않는 쿼리는 모두 캐시됩니다.

테이블 캐시는 잠재적 열린 파일 포인터를 나타냅니다. 오히려 빨리 소모 될 수 있으며 필요에 따라 사용되지 않은 항목을 롤오버합니다. MySQL's documentation에서 :

table_cache와 max_connections의 시스템 변수는 서버가 열려 유지 파일의 최대 수에 영향을 미친다. 이 두 값 중 하나 또는 을 늘리면 프로세스 별 열린 파일 디스크립터 수에 따라 운영 체제에서 부과 한 제한에 부합 할 수 있습니다. 많은 운영 체제에서 방법이 시스템마다 크게 다르지만 열린 파일 제한 인 을 늘릴 수 있습니다. 운영 체제 설명서를 참조하여 한계를 늘릴 수 있는지 여부와 그 방법을 결정하십시오.

table_cache는 max_connections와 관련됩니다. 예를 들어, 200 동시 실행 연결의 경우 이상 (200 * N)의 테이블 캐시 크기가 있어야합니다. 여기서 N은 실행 한 쿼리 중 의 조인 당 최대 테이블 수입니다. 또한 임시 테이블과 파일에 대해 여분의 파일 설명자를 예약해야합니다 ( ).

운영 체제가 열려있는파일 디스크립터의 수를 처리 할 수 ​​있는지 확인하십시오 (예 : table_cache 설정). table_cache가 으로 너무 높게 설정되면 MySQL은 파일 설명자가 부족하여 연결을 거부하고 쿼리를 수행하지 못하고 매우 신뢰할 수 없습니다. 또한 MyISAM 스토리지 엔진은 각각의 고유 한 열린 테이블에 대해 두 개의 파일 설명자가 필요하다는 점을 고려해야합니다. mysqld에 --open-files-limit 시작 옵션을 사용하여 MySQL에서 사용할 수있는 파일 설명 자의 수를 늘릴 수 있습니다. C.5.2.18 절. "파일을 찾을 수 없거나 유사한 오류"를 참조하십시오.

열린 테이블의 캐시는 table_cache 항목 수준으로 유지됩니다. 기본값은 64입니다. 이는 mysqld에 --table_cache 옵션을 사용하여 변경할 수있다. MySQL은 쿼리를 실행하기 위해 이보다 더 많은 테이블 을 일시적으로 열 수 있습니다.

MySQL은 다음과 같은 경우를 사용하지 않는 테이블을 닫고 아래 테이블 캐시에서 제거 :

캐시가 가득 스레드가 캐시에 없는 테이블을 열려고합니다.

캐시에 table_cache 항목 이상이 포함되고 테이블이 인 경우 캐시는 더 이상 모든 스레드에서 사용되지 않습니다.

테이블 플러시 작업이 발생하는 경우. 이것은 누군가 FLUSH TABLES 문을 실행하거나 mysqladmin flush-tables 또는 mysqladmin refresh 명령을 실행할 때 발생합니다. 가장 최근에 사용 된 테이블로 시작 현재 사용중인 출시되지 않은

테이블 : 테이블 캐시가 꽉 차면

, 서버는 사용하는 캐시 항목을 찾으려면 다음 절차 을 사용합니다.

새 테이블을 열어야하지만 캐시가 꽉 차고 테이블 이 해제 될 수없는 경우 필요에 따라 캐시가 일시적으로 확장됩니다. 캐시가 일시적으로 확장 된 상태이고 테이블이 에서 사용되지 않은 상태로 사용되면 테이블이 닫히고 캐시에서 해제됩니다.

+0

답변을 주셔서 감사합니다. Joshua하지만 테이블 캐시가 그렇게 빨리 소비되는 이유가 어떻게 설명되어 있는지 모르겠습니까? –

+0

테이블 캐시 설정은 예상대로 메모리를 직접 참조하지 않는 것 같습니다. 오히려, 올바르게 이해한다면 연결 수에 테이블 수를 곱한 값을 의미합니다. 이 링크를 참조하십시오 : http://serverfault.com/questions/78786/tuning-and-understanding-table-cache-in-mysql –

+0

추신 : 좀 더 철저한 설명으로 답변을 업데이트했습니다. –