MySQL訪問行更新慢、使用者執行緒大量堆積竟是因為它
1 問題現象
最近,騰訊雲某內部系統不定期出現資料庫訪問行更新慢,資料庫使用者執行緒大量堆積的現象。從slow log中觀察,大量update執行時間超過10秒,甚至個別update執行時間超過百秒,這已經嚴重影響該系統的正常執行。 運維同學不得不採取殺死執行session的方式解決該問題,由於訪問資料庫的任務是離線後臺批處理任務,因此會選擇業務壓力小的時候執行該任務,比如半夜12點,因此,運維同學必須半夜採取緊急措施,這給線上執行造成極大的負擔。
2 問題分析
2.1 山重水複
2.2 峰會路轉
2.3 柳暗花明
-
233個執行緒等待lock_wait_suspend_thread中的lock_wait_table_release_slot的入口mutex上 -
181個執行緒等待lock_wait_suspend_thread本身的mutex上。
-
使用者執行緒呼叫的lock_wait_suspend_thread -
後臺執行緒:lock_wait_timeout_thread
-
每秒定時觸發 -
lock_wait_suspend_thread通知觸發,這個就是熱點行更新慢的關鍵!
3 問題解決
阻斷lock_wait_suspend_thread 對lock_wait_timeout_thread觸發,如下圖所示:
4 結果
業務模擬工具按照線上業務模型,模擬線上執行2000個業務請求同時進行,每秒每個請求更新一次,分析每個訪問的執行時間(對binlog掃面得到執行時間(exec_time)得出執行時間)
|
|
|
|
|
|
|
|
|
|
|
|
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556440/viewspace-2675496/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 多執行緒C++更新MYSQL執行緒C++MySql
- 如何利用執行緒堆疊定位問題執行緒
- c#基礎,單執行緒,跨執行緒訪問和執行緒帶引數C#執行緒
- 為什麼python執行效率低?原來因為它!Python
- Java多執行緒-程式執行堆疊分析Java執行緒
- java執行緒之守護執行緒和使用者執行緒Java執行緒
- C# WinForm 執行緒間操作無效: 從不是建立控制元件的執行緒訪問它的解決辦法C#ORM執行緒控制元件
- 為何要在主執行緒上更新UI執行緒UI
- 為什麼使用者執行緒必須對映到核心執行緒?執行緒
- MySQL_殺mysql執行緒MySql執行緒
- 資料訪問連線池和執行緒池執行緒
- JVM中的執行緒行為JVM執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 執行緒池管理(1)-為什麼需要執行緒池執行緒
- redis為什麼用單執行緒不用多執行緒Redis執行緒
- 執行緒和執行緒池執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 執行緒 執行緒池 Task執行緒
- 多執行緒【執行緒池】執行緒
- 保證執行緒在主執行緒執行執行緒
- 單執行緒的Redis有哪些慢動作?執行緒Redis
- 如何在子執行緒中更新UI執行緒UI
- 03 執行緒安全問題執行緒
- SimpleDateFormat 執行緒安全問題ORM執行緒
- Java執行緒池核心執行緒用盡後為何優先排隊而不是繼續建立執行緒直至最大執行緒數?Java執行緒
- WPF 之 呼叫執行緒必須為 STA,因為許多 UI 元件都需要執行緒UI元件
- MySQL中介軟體之ProxySQL(5):執行緒、執行緒池、連線池MySql執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- mysql 5.7 執行緒阻塞處理MySql執行緒
- mysql後臺執行緒詳解MySql執行緒
- MySQL執行緒狀態詳解MySql執行緒
- MySQL:Innodb purge執行緒略解MySql執行緒
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- 執行緒控制之休眠執行緒執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒