天天看點

MySQL 的實時性能監控利器

作業系統及mysql資料庫的實時性能狀态資料尤為重要,特别是在有性能抖動的時候,這些實時的性能資料可以快速幫助你定位系統或mysql資料庫的性能瓶頸,就像你在linux系統上使用「top,sar,iostat」等指令工具一樣,可以立刻定位os的性能瓶頸是在io還是cpu上,是以收集/展示這些性能資料就更為重要,那都有哪些重要的實時性能狀态名額可以反應出系統和mysql資料庫的性能負載呢?

MySQL 的實時性能監控利器

目前在linux跑mysql是大多數網際網路公司的标配,以上圖檔的性能資料名額項是我認為在linux,mysql,innodb中較為重要的實時狀态資料,然而在以上圖檔doing一欄其實更為重要,之是以把它叫做doing,是因為「processlist,engine innodb status,locks」等名額項才真正反映了mysql此時正在做什麼。

MySQL 的實時性能監控利器

我們來對标oracle資料庫看一下,在oracle資料庫中提供了「awr,ash,sql monitor」等衆多診斷工具,可以一眼望穿資料庫正在做什麼,甚至都可以知道在過去30天内任何一個時間區間的性能負載和當時資料庫正在做什麼。

在mysql中雖然有像「zabbix,pmm」等優秀的監控工具,但它們隻能反映資料庫曆史的一些性能資料曲線,例如,tps高了,臨時表使用多了,有innodb deadlocks,但對于mysql當時的doing,我隻能說不夠直接。如果你在現場,你可以抓到mysql正在做什麼,但是,你總有不在現場的時候,如果問你昨天晚上資料庫的性能抖動是什麼原因?怎樣快速重制現場找到引起抖動的原因呢?

基于golang語言開發

可收集linux、mysql相關性能資料

可本地或遠端收集,可多台

mytop --like linux top

基于并發生成doing日志,複現現場

可記錄到日志檔案

dodba tools 工作原理

遠端收集系統資訊是通過ssh(使用者名密碼或建立信任)的方式連接配接到遠端伺服器上收集,收集的方法都是通過讀取linux的proc下的等meminfo,diskstats,uptime,net,vmstat ,cpuinfo ,loadavg等檔案,這和pmm,zabbix收集方式一緻。

遠端收集mysql資訊是通過 mysql tcp連接配接到mysql資料庫上收集,隻需要授予連接配接使用者process、select權限即可。

系統資訊和mysql資訊的收集可以分離,如果隻想收集系統資訊,隻需要提供系統使用者名密碼即可,如果隻收集mysql可以隻提供mysql連接配接資訊,如果是rds使用者,可以使用-rds參數,在使用mytop時會自動忽略系統資訊的收集。

MySQL 的實時性能監控利器

2. 收集mysql性能資料

MySQL 的實時性能監控利器
MySQL 的實時性能監控利器
MySQL 的實時性能監控利器
MySQL 的實時性能監控利器

cat ip.txt

shell

MySQL 的實時性能監控利器

使用【-t】參數可以基于threads_running的數量設定門檻值,設定後可記錄「processlist,engine innodb status」資訊到dodba.log日志中,--複現現場。

MySQL 的實時性能監控利器
MySQL 的實時性能監控利器
MySQL 的實時性能監控利器

如果你對golang感興趣,如果你對dodba tools有問題或者建議,掃描二維碼,可聯系作者。 

MySQL 的實時性能監控利器