在 mysql 5.7 中分析和調整 innodb_thread_concurrency 的正確方法是什麼?
我計劃在我的生產 MySQL 伺服器 5.7 中增加執行緒並發性,但不確定在需要測量和配置哪些參數/配置以將執行緒並發性增加到正確的最佳值之前。在查看 MySQL 官方文件時,似乎有一個註釋說明
The correct values of these variables depend on your environment and workload.Try a range of different values to determine what value works for your applications. Before limiting the number of concurrently executing threads, review configuration options that may improve the performance of InnoDB on multi-core and multi-processor computers
當參考其他部落格時,提出了一些公式
concurrency = 2 x no.of cpu
在其他一些類似的部落格中,他們與磁碟一起聲明為
concurrency = 2 * (NumCPUs + NumDisks)
如何對我的 MySQL 工作負載進行基準測試以調整執行緒並發性?
目前,我有
thread concurrency = 8 RAM = 64 GB CPU = 20 core
有時,緩慢的查詢似乎突然增加了整體執行緒使用率,並且所有 8 個執行緒都在執行,導致正常執行的查詢變慢:(
因此,調整執行緒並發性的正確方法是什麼?
將其設置為
0
並讓 InnoDB 選擇並發。貨幣=8 的 20 個核心意味著至少 12 個核心將始終處於空閒狀態。
的價值是
Max_used_connections
多少?如果這不是很高,那麼“並發”不是您的主要問題。同時,讓我們看看其中一個“慢”查詢,以及
SHOW CREATE TABLE
; 可能有辦法加快速度,可能會減少 I/O。有關您的 VARIABLES 和 GLOBAL STATUS 的更多分析,讓我們看看它們。 http://mysql.rjweb.org/doc.php/mysql_analysis#tuning
為了使本主題保持最新,不再建議 MySQL 5.7 及更高版本使用無限並發。為什麼 ???
在我早年在 DBA StackExchange 工作時,我曾經建議根據我在 Percona Live 2011 上的第一手知識將innodb_thread_concurrency設置為(請參閱我的文章MySQL 事務大小 - 多大才算太大?)。
0``Jun 20, 2012
五年後,我了解到 Percona 對innodb_thread_concurrency的不同值進行了基準測試,並發現
64
Oracle 的 MySQL 的 CPU 性能最高:
Aug 14, 2017
: MariaDB 10.1.22 使用更多 RAM 而不是 CPU (My DBA SE Post)Mar 17, 2016
:Percona Server 5.7 性能提升(Percona Blog 我讀過)因此,不得不說
0
是 MySQL 5.7 之前的最佳值64
是 MySQL 5.7 及更高版本的最佳價值