故障分析 | Federated 儲存引擎表導致監控執行緒處於 Opening table 狀態

愛可生雲資料庫發表於2022-04-28

作者:李鵬博

愛可生 DBA 團隊成員,主要負責 MySQL 故障處理和 SQL 稽核優化。對技術執著,為客戶負責。

本文來源:原創投稿

*愛可生開源社群出品,原創內容未經授權不得隨意使用,轉載請聯絡小編並註明來源。

--

最近發現客戶的一臺 MySQL 5.7.32 例項的監控執行緒狀態一直處於 Opening table 狀態,且都是在對 information_schema.tables 表做相關查詢,如圖:

通過 show open tables ;語句發現 opened tables 並不算太多:

相關引數也沒有太大的不合理性:

雖然 ulimit 設定不是很大,但是也不會對此產生什麼影響

檢視 MySQL Error 日誌也沒有發現與此相關的異常。

因此只能使用 pstack 工具對 MySQL 打堆疊來進行分析,堆疊日誌如下:

通過分析堆疊日誌發現,問題出現在進行查詢時會使用 Federated 儲存引擎表對遠端例項進行查詢。

檢視資料庫使用 Federated 儲存引擎的表,發現有兩張表使用了 Federated 儲存引擎:




通過在例項伺服器上 Telnet Feferated 服務端的例項IP和埠發現是不通的:

所以推測問題原因為:監控執行緒在查詢 information_schema.tables 表時,當需要獲取 Federated 儲存引擎表的資訊時需要連線遠端 Server ,而由於網路或其他原因無法連線時,就會導致本地監控執行緒處於 Opening table 狀態。

接下來設計實驗驗證我們的想法:

  1. 啟用 Federated 儲存引擎

  1. 建立一張 Federated 儲存引擎的表,連線的 server 不存在




  1. 查詢 information_schema.tables 表,執行緒卡住

  1. 執行緒狀態處於 Opening table 狀態

這剛好驗證了我們的想法是正確的。

相關文章