Mysql

在 mysql 5.7 中分析和調整 innodb_thread_concurrency 的正確方法是什麼?

  • January 21, 2022

我計劃在我的生產 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的不同值進行了基準測試,並發現64Oracle 的 MySQL 的 CPU 性能最高:

因此,不得不說

  • 0是 MySQL 5.7 之前的最佳值
  • 64是 MySQL 5.7 及更高版本的最佳價值

引用自:https://dba.stackexchange.com/questions/253150