mySQL에서 table_cache 조정 및 이해


18

우수한 MySQL 성능 조정 스크립트 를 실행하고 제안을 진행하기 시작했습니다. 내가 만난 것은

TABLE CACHE
현재 table_cache 값 = 4096 테이블 총 1073 개의 테이블이 있습니다. 열린 테이블이 3900 개 있습니다. 현재 table_cache 적중률은 2 %이며 테이블 캐시의 95 %가 사용 중입니다. 아마도 table_cache를 증가시켜야합니다

table_cache를 읽기 시작했지만 MySQL 설명서 가 부족하다는 것을 알았습니다 . 그들은 table_cache"메모리가 있다면" 을 높이라고 말합니다 . 불행히도 table_cache변수는 "모든 스레드에 대한 열린 테이블 수"로 정의됩니다.

이 변수를 늘리면 MySQL에서 사용하는 메모리는 어떻게 변경됩니까? 좋은 가치는 무엇입니까?

답변:


16

로부터 MySQL의 문서

예를 들어, 200 개의 동시 실행 연결의 경우 최소 200 × N의 테이블 캐시 크기가 있어야합니다. 여기서 N은 실행하는 쿼리에서 조 인당 최대 테이블 수입니다. 임시 테이블 및 파일에 대한 추가 파일 디스크립터도 예약해야합니다.

따라서 애플리케이션에 4 개의 테이블을 조인하는 쿼리가 있고 해당 명령문을 기반으로 200 개의 동시 연결을 처리하려면 table_cache가 800 이상이어야합니다.

메모리 사용량에 관해서는 그 숫자가 없지만 캐싱하는 테이블의 크기에 따라 다릅니다.


포인터 주셔서 감사합니다. RAM 사용량이 어떻게 변하는 지 알지 못하고 table_cache 수를 늘리는 것이 약간 두렵습니다. 머신의 RAM이 이미 가득 찼습니다.
jotango

메모리가 실제로 사용되었거나 버퍼 / 캐시가 메모리를 사용 했습니까? "free -m"을 실행하고 두 번째 줄 (-/ + buffers / cache)을 살펴보십시오. 이는 mb 단위의 메모리 사용량을보다 정확하게 나타냅니다. 에 응답을 참조하십시오 serverfault.com/questions/73189/...serverfault.com/questions/9442/...
ManiacZX

예, 실제로 메모리를 사용하고 있습니다. 어제 교체되었으므로 프로덕션 DB에는 정말 좋지 않습니다. 오늘 HP에서 RAM 업그레이드를 주문했습니다.
jotango

지금이 사람들에게,이 대답은 mysql 5.1 이상에서는 정확하지 않습니다. 이제 table_open_cache문서를 볼 때 참조됩니다 . 보고있을 때 @MarkRs 답변보기table_cache
Jason

3

Opened_Tables 변수를 모니터하고 얼마나 빨리 증가하는지 확인해야합니다. 새 테이블 (임시 테이블 포함)을 생성하는 것보다 훨씬 빠르면 테이블 캐시가 너무 작을 수 있습니다.

Table_Cache는 항상 대부분의 경우 서버의 총 테이블 수보다 훨씬 커야합니다. 그렇지 않으면 계속 테이블을 열고 닫을 것입니다.

서버를 다시 시작한 직후 또는 FLUSH TABLES를 많이 사용하여 (쿼리 수와 관련하여) 시간을 측정하지 않는 한 2 % 캐시 적중률을 얻는 방법을 알 수 없습니다. 일반적으로 테이블 캐시 적중률은 99.9 % 여야하며 그렇지 않으면 성능이 저하됩니다.

FLUSH TABLES를 피할 수 있으면 캐시를 지우십시오.

FRM 파일을 읽어야하기 때문에 테이블을 열면 비용이 많이 듭니다. MyISAM에서는 테이블을 닫을 때 인덱스에서 나온 키 캐시의 모든 블록을 버리는 것처럼 다른 엔진보다 훨씬 나쁩니다. 따라서 테이블을 닫으면 키 캐시에서 인덱스가 덤프됩니다 == 좋지 않습니다! 다른 엔진은 캐시 된 블록을 유지하지만 메타 데이터를 다시 읽고 일부 구조를 할당해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.