어떤 thread_cache_size 값을 사용해야합니까?


25

MySQL과 함께 Asp.Net을 사용하고 있습니다. .Net 연결 문자열에서 Max Pool Size를 150으로 설정했습니다.

다음을 실행하면 이러한 값이 나타납니다.

SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474

Threads_created / Connections = 0,1392를 제공합니다.

그래서 그것을 늘려야 할 것 같습니다 thread_cache_size.

그러나 내가 실행하면 SHOW PROCESSLIST항상 .Net에 의해 생성 된 풀로 인해 많은 연결이 열려 있음을 알 수 있습니다 (대부분 잠자기). thread_cache_size연결 풀의 연결을 계속 재사용 할 때 여전히을 설정해야 합니까? 풀 크기가 150 인 경우 좋은 값은 thread_cache_size150+ 로 설정한다고 생각 하십니까? 이것이 CPU와 메모리에 많은 영향을 미칩니 까?

답변:


43

MySQL 문서의 정보를 기반으로 다음을 수행해야합니다. mysqld가 Connections , Threads_createdMax_used_connections를 사용하여 최대 동시 연결 수를 확인하십시오 .

  • SHOW GLOBAL STATUS LIKE 'Connections';
  • SHOW GLOBAL STATUS LIKE 'Threads_created';
  • SHOW GLOBAL STATUS LIKE 'Max_used_connections';

다음을 계산해보십시오

Threads_created / Connections:이 값이 0.01을 초과하면을 늘리십시오 thread_cache_size. 최소한 thread_cache_size보다 커야 Max_used_connections합니다.


좋은 의견 감사합니다! 내 질문을 조금 업데이트했습니다.
Martin

나는 당신이 mysql> SHOW GLOBAL STATUS LIKE 'connections; (max_used_connections를 두 번 작성했습니다)
Alekc

1
난 그냥이를 참조하여 것을 추가 할 dev.mysql.com/doc/refman/5.7/en/... (100 초과하지 않으면 서) 당신이 thread_cache_size 값 Max_used_connections 8을 추가해야합니다
CME64

1
실제로, 매뉴얼은 기본값 (mac_used_connections의 1 %) + 8 .... 또는 100 ... 중 더 적은 것을 제안합니다.
Christopher McGowan

나를 위해 #의이 방법은 0.01보다 인 0.0026에 밖으로 작동하는 103,134분의 264하지만 마지막 문장이 몹시 갈등되도록 내 MaxUsedConnections는 72
boatcoder

11

MySQL 문서에 따르면 thread_cache_size대부분의 새로운 연결이 새로 작성된 스레드가 아닌 캐시의 스레드를 사용하도록 설정해야 합니다. 일반적으로 성능이 크게 향상되지는 않지만 스레드 생성 오버 헤드가 줄어 듭니다.

가능한 경우 캐시에서 가져온 스레드를 재사용하여 스레드 요청이 충족되며 캐시가 비어있는 경우에만 새 스레드가 작성됩니다. 새로운 연결이 많은 경우 성능을 향상시키기 위해이 변수를 늘릴 수 있습니다. 일반적으로 스레드 구현이 양호하면 성능이 크게 향상되지 않습니다 . 그러나 서버에 초당 수백 개의 연결이 표시되는 경우 일반적으로 대부분의 새 연결이 캐시 된 스레드를 사용 하도록 thread_cache_size를 충분히 높게 설정해야 합니다 . (출처)

즉 , 새 스레드를 생성하는 연결 비율이 다소 낮아 thread_cache_size지도록 설정해야합니다 Threads_created / Connections. MySQL 문서를 문자 그대로 ( "most") 가져 오는 경우 값은 <50 % 여야합니다. RolandoMySQLDBA의 답변은 <1 %입니다. 누가 진실에 더 가까운 지 모르겠습니다.

보다 높게 설정 해서는 안됩니다 . RolandoMySQLDBA의 답변 ( "최소한, thread_cache_size가 Max_used_connections보다 커야 함")의 마지막 문장은 서버 사용하는 것보다 더 많은 스레드를 캐시에 보관해야하므로 합리적으로 보이지 않습니다 . MySQL은 캐시에 많은 스레드를 넣지 않습니다. 캐시에 스레드를 미리 넣지 않습니다 . 클라이언트가 스레드를 만들고 연결을 끊은 후에 만 스레드를 배치합니다. X 클라이언트가 동시에 연결되지 않은 경우 캐시에 X 스레드가 없습니다.thread_cache_sizeMax_used_connections

클라이언트가 연결을 끊을 때 thread_cache_size 스레드 수가 적은 경우 클라이언트 스레드가 캐시에 저장됩니다. (출처)

Michael의 답변 도 참조하십시오 .

thread_cache_size를 max_connections보다 큰 값으로 설정하면 엄청나게 도움이되지 않는 조언처럼 보입니다. 캐시는 max_connections보다 커질 수 없으며 해당 크기 근처의 캐시조차도 스레드에 엄청난 양의 이탈이있는 경우에만 의미가 있습니다. ... 잘 작동하는 응용 프로그램에서는 그렇지 않습니다.

/dba//a/28701


나도 그렇게 생각해! 이 구성을 테스트 한 후 "thread_cache_size는 Max_used_connections보다 커야합니다"는 도움이되지 않습니다.
CK.Nguyen

-2

일반적인 근무일에 '신입 사원'과 연결이 필요할 수 있습니까? 대부분의 마술사들은 다음 며칠 동안 얼마나 많은 사람들을 고용 할 수 있는지 모를 것입니다. MySQL의 V 8에서는 max_used_connections에 관계없이 과부하를 방지하기 위해 CAP thread_cache_size를 100으로 제안합니다. 나에게 100은 좋은 CAP입니다.

이 링크를 참조하십시오.

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_thread_cache_size
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.