InnoDB監視器提供有關InnoDB內部狀態的信息。 這些信息對於性能調優很是有用。其實所謂的監視器,就是 show engine innodb status 命令。數據庫
有兩種類型的InnoDB監視器:數據結構
1. 標準InnoDB監視器(The standard InnoDB Monitor)顯示如下類型的信息:併發
2. InnoDB鎖定監視器(The InnoDB Lock Monitor)將額外的鎖信息做爲標準InnoDB監視器輸出的一部分進行打印。性能
開啓 standard InnoDB Monitor (須要PROCESS權限)spa
> set GLOBAL innodb_status_output=ON;
上面的語句可按期寫入到標準錯誤輸出(stderr,即error log,大概每15s寫一次),你也可使用 SHOW ENGINE INNODB STATUS 語句直接在客戶端獲取innodb信息。操作系統
而開啓 InnoDB Lock Monitor 須要同時打開如下2個參數,它的信息也是隨 InnoDB Standard Monitor 的信息一塊兒打印出來:線程
> set GLOBAL innodb_status_output=ON; > set GLOBAL innodb_status_output_locks=ON;
鎖監視器與標準監視器基本相同,只是它包含了附加的鎖信息(lock information)。code
CREATE TABLE 句法只不過是爲了經過 MySQL SQL 語法分析而提供給 InnoDB 引擎命令的一種方式:那個被建立的表根本與 InnoDB Monitor 無任何關係。若是你在監視器運行着的狀態下關閉數據庫,而且你須要再次啓動監視器, 那麼你不得不在發出一個新的 CREATE TABLE 來啓動監視器以前先移除(drop)這個表。
與之相相似的,你能夠啓動 innodb_lock_monitor ,它在某些方面與 innodb_monitor 一致,可是它會顯示更多的鎖定信息。一個單獨的 innodb_tablespace_monitor 將顯示在現有表空間內所創建的文件段列表以及能夠分配數據結構的有效表空間。從 3.23.44 開始,提供了 innodb_table_monitor ,經過它能夠得到 InnoDB 內部數據字典的信息。orm
輸出信息的某些注意點:
若是 TRANSACTIONS 部分報告鎖定等待(lock waits),那麼你的應用程序可能有鎖爭用(lock contention)。輸出信息能夠幫助跟蹤事務死鎖的緣由。
SEMAPHORES 部分報告線程等待信號量以及統計出線程須要旋轉(spin)或等待(wait)一個互斥(mutex)或 rw-lock 信號量的次數。一個較大的線程等待信號量的次數多是因爲磁盤 I/O 引發,或 InnoDB 內部的爭用問題(contention problems)。爭用(Contention)多是因爲比較繁重的併發性查詢,或操做系統的線程調度的問題。 在這種情形下,可將 innodb_thread_concurrency 設置地小於默認的 8 。
FILE I/O 部分列出了文件 I/O 的等待請求。過大的值就意味着磁盤 I/O 瓶頸。
BUFFER POOL AND MEMORY 部分給出了頁面讀寫的統計。經過這些值能夠計算出你的查詢一般所需的數據文件 I/O 量。 blog