MySQL 配置自旋鎖輪詢

eric0435發表於2022-04-09

配置自旋鎖輪詢
很多InnoDB的互斥鎖和rw-lock會被預留一段時間。在多核系統上,執行緒在睡覺前持續檢查它是否可以獲得互斥鎖或rw-lock,這樣會更有效率。如果互斥鎖或rw-lock在此輪詢期間可用,執行緒可以立即在同一時間片中繼續執行。然而,由共享物件的多個執行緒進行過於頻繁的輪詢會導致快取乒乓現象,不同的處理器會使彼此快取的部分失效。InnoDB透過在兩次輪詢之間隨機等待時間來最小化這個問題。延遲被實現為一個忙碌的迴圈。

您可以使用引數innodb_spin_wait_delay來控制測試互斥鎖或rw-lock之間的最大延遲。延遲迴圈的持續時間取決於C編譯器和目標處理器。(在100MHz奔騰時代,延遲單位是一微秒。)在所有處理器核心共享快取記憶體記憶體的系統中,可以透過設定innodb_spin_wait_delay=0來減少最大延遲或禁用繁忙迴圈。在具有多個處理器晶片的系統上,快取失效的影響可能更加顯著,您可能會增加最大延遲。

innodb_spin_wait_delay預設值為6。自旋等待延遲是一個動態的、全域性的引數,你可以在MySQL選項檔案(my.cnf或my.ini)中指定,或者在執行時使用SET global innodb_spin_wait_delay=delay命令來更改,其中delay是所需的最大延遲。更改設定需要超級許可權。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2886313/,如需轉載,請註明出處,否則將追究法律責任。

相關文章