2017-09-15 2 views
0

나는 max_connections = 1000의 mariadb를 가지고있다. 애플리케이션 스택은 데이터베이스에 450 개의 연결을 열었으며 매우 동시 적으로 설계되었다. 작업량은 대부분 INSERT/UPDATE입니다. show processlist를 통해 모니터링 할 때 동시에 데이터베이스에서 실행 된 11 개 이상의 활성 쿼리가 없다는 것을 알게됩니다. 필자는 일부 mysql 설정이 필자의 경우 더 많은 동시성을 방지한다고 생각하지만, 그 내용을 파악할 수는 없다. 동시성을 제어하는 ​​매개 변수의 mysql 집합은 완전히 혼란스럽고 명확성을보기가 어렵습니다. 나는이 있습니다 :MySQL에서 세션 동시성을 제어하는 ​​방법은 무엇입니까?

MariaDB [(none)]> show variables like '%concurr%'; 
+----------------------------+--------+ 
| Variable_name    | Value | 
+----------------------------+--------+ 
| concurrent_insert   | ALWAYS | 
| innodb_commit_concurrency | 0  | 
| innodb_concurrency_tickets | 5000 | 
| innodb_thread_concurrency | 32  | 
| thread_concurrency   | 10  | 
+----------------------------+--------+ 

24 버퍼 풀 인스턴스, 인스턴스 당 2GB 그리고 느린 GCP SSD 영구 디스크.

마지막 매개 변수는 내 연구에 따라 감가 상각됩니다. mysql에서 더 많은 동시성을 증가시키기 위해 무엇을 변경해야 하는가?

답변

1

다시의 thread_concurrency는 :

이 변수는 사용되지 않습니다와 MySQL 5.7에서 제거됩니다. Solaris 8 이전 버전이 아니라면 MySQL 구성 파일에서 제거해야합니다.

따라서 변경하지 마십시오.

한편, 나는 당신의 관찰이 '정상'이라고 말할 것입니다. 즉, 450 개의 연결이 매우 빠른 쿼리를 수행하므로 볼 때 중간에 11 개만 볼 수 있습니다.

앱에 예기치 않은 대기 시간이 표시되고 있습니까? 나는 의심하지 않는다.

특정 검색어가 다른 검색어보다 자주 표시됩니까? Time이 "2"이상인 지 확인하십시오. 둘 중 하나 인 경우 검색어를 보자. SHOW CREATE TABLE.

Locked을 나타내는 PROCESSLIST 항목이 있습니까? 그렇다면 Time이 아닌 쿼리를 찾아Locked이 아닌 이유를 조사하고 왜 그렇게 오래 실행되는지 조사하십시오.

+0

예기치 않은 대기 시간이 있습니다 (여기에 별도의 질문이 있습니다. https://stackoverflow.com/questions/45764963/table-update-on-pk-and-another-field-in-mysql-is-sporadically-slow) . 하지만 시간이 거의 0이되는 경우는 드뭅니다. 대부분 빠릅니다. 어떤 상태도 잠겨 있음, Init 또는 NULL 만 나타남 –

+0

수면 상태가 아닌 상태에서 11보다 더 자주 나타 납니까? –

관련 문제