Mysql-Workbench

MySQL Workbench 在每次查詢後秘密執行 SHOW INDEX

  • March 4, 2015

幾天前,我修改了一些 innodb_stats_* 參數,並在一些 Percona 5.5.38 伺服器上執行了 mysqlcheck –analyze –all-databases。現在,每當我在 MySQL Workbench 中執行任何簡單查詢時,它似乎都會執行 SHOW INDEX ON t1 的後台查詢;不用說,當它阻止更新生產伺服器上的表時,這會導致一些問題。

我已經確定了這些事情:

  1. 任何具有足夠特權的帳戶都會發生這種情況
  2. 它不會從命令行發生
  3. 它發生在其他使用者身上
  4. 即使在我升級到 6.2.4 並刪除所有設置後也會發生
  5. 它不會發生在我的 Percona 5.6 數據庫中
  6. SHOW INDEX 在我的查詢後大約 5 秒開始

我無法在網上找到這種行為的任何解釋,所以想看看是否有任何有經驗的 DBA 遇到過這種情況。

目前統計相關設置:

  • innodb_stats_auto_update 0
  • innodb_stats_method nulls_equal
  • innodb_stats_on_metadata 開啟
  • innodb_stats_sample_pages 8
  • innodb_stats_update_need_lock 1
  • innodb_use_sys_stats_table 關閉

感謝任何人都可以提供的任何指示。

更新 查看原始碼後,事實證明 SHOW INDEX 發生在單個表上的每個查詢中。它檢查所選列是否包含主鍵或其他唯一索引,因此它可以決定您是否可以編輯數據。

原始碼包含以下註釋:

// XXX this can be slow because of the I_S queries, depending on the server

我去看看為什麼我的 INFORMATION_SCHEMA 很慢,並從 Percona 找到了一個有用的文章

事實證明,innodb_stats_on_metadata在此過程中已打開,這導致 MySQL 每次訪問 INFORMATION_SCHEMA 時都重新計算統計資訊。所以我只是把它關掉了。

什麼樣的惡夢。

掃一掃 MySQL Workbench 的源碼可以看到一些 SHOW INDEX 發出的地方。應用程序需要為其任務執行相當多的查詢,例如索引視圖或表編輯器。其中一些僅在您從管理部分打開視圖時才處於活動狀態。其他的,比如 SQL 編輯器需要一個 SHOW INDEX 來查找關於 PK 列的資訊,這些資訊是決定是否可以編輯為查詢返回的結果集。

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