高 MySQL“InnoDB 每秒寫入數” - 看不到查詢?
在我們的實時MySQL 5.5數據庫伺服器上,我們使用MySQL Workbench來執行手動查詢、檢查正在執行的查詢以查看正在發生的事情等。
我今天注意到,在“伺服器狀態”選項卡上有非常多的“每秒查詢數”和“**每秒 InnoDB 寫入數”,但在顯示“**客戶端連接”列表的選項卡上,顯示了所有正在執行的查詢,它幾乎沒有顯示任何查詢.. 可能每隔幾秒鐘就有 2 或 3 個。
我在這裡有什麼誤解?這兩個選項卡根本沒有加起來。
**編輯 -**這是輸出
SHOW ENGINE INNODB STATUS;
-------------- ROW OPERATIONS -------------- 0 queries inside InnoDB, 0 queries in queue 2 read views open inside InnoDB Main thread process no. 24494, id 139631733794560, state: sleeping Number of rows inserted 36474186, updated 163927609, deleted 11892445, read 1747097889216 1.06 inserts/s, 13.91 updates/s, 0.00 deletes/s, 33615.95 reads/s ---------------------------- END OF INNODB MONITOR OUTPUT ============================
您需要的是更好的 InnoDB 儲存引擎的視覺化表示
考慮觸發可以監控的寫入的類型
寫操作數
Innodb_dblwr_writes到雙寫緩衝區
重做日誌
Innodb_data_writes貫穿整個 InnoDB 架構
使用 InnoDB 寫入的字節數
- Innodb_pages_written:寫入 InnoDB 表的頁數(數據和索引)。將此乘以16384 (16KB)以獲得寫入 InnoDB 表的字節數。
- Innodb_dblwr_pages_written寫入的雙寫頁數。將此乘以16384 (16KB)以獲得寫入雙寫緩衝區的字節數。
- Innodb_os_log_written寫入重做日誌的字節數
- Innodb_data_written整個 InnoDB 架構中寫入的字節數
這些是在 InnoDB 內部和外部攪動的事情之一。然而,這還不是全部。檢查有關狀態變數的 MySQL 文件。
我的猜測是 MySQL Workbench 只是在監視Innodb_data_writes。
如果數據寫入高,鑑於此
1.06 inserts/s, 13.91 updates/s, 0.00 deletes/s
這大約是每秒 15 個查詢,您可能需要花一些時間調整 InnoDB。由於InnoDB 進行模糊檢查點,如果您看到永不減弱的持續寫入,InnoDB 將揭示寫入的瓶頸。這可能是由於 OS 或 VM 造成的。這也可能是由於 InnoDB 緩衝池過小(我看到它是 100% 滿的)。大量讀取會將數據和索引頁面帶入緩衝池。來自 INSERT 和 UPDATE 的新的或更新的數據和索引頁也需要擠入緩衝池。也許更大的緩衝池是為了。
換個角度看訪問的行數
36474186 Rows from INSERTs 163927609 Rows from UPDATEs 11892445 Rows from DELETEs 212294240 Rows Written 1747097889216 from SELECTs
當您將 1747097889216 除以 212294240 時,這意味著對於您更新的每一行,將讀取 8229.6 行。這與每個 INSERT、UPDATE 或 DELETE 的 2245.46 (33165.95/14.97) SELECT 一起使用。我可以看到寫入擠入緩衝池。這讓我覺得Buffer Pool、Log Buffer、Redo Logs都應該增加。