ps-top 用于MySQL的數(shù)據(jù)庫top工具
熟悉Linux的同學都很喜歡top命令,可以讓我們很方便快捷的一鍵獲取系統(tǒng)運行狀態(tài)。除了系統(tǒng)狀態(tài),很多人可能也希望能一鍵獲得數(shù)據(jù)庫的運行狀態(tài),很多人會用show profile或者performance_schema數(shù)據(jù)庫獲取各種信息。但是很方便和直接。
本文蟲蟲給大家介紹一個命令行工具ps-top,可從MySQL 5.6+的performance_schema數(shù)據(jù)庫中收集信息,并使用該信息實時顯示服務器負載。數(shù)據(jù)以表或文件名顯示,實時顯示在選擇,插入,更新或刪除活動時候信息情況;視圖顯示用戶活動,顯示使用相同用戶名連接的不同主機的數(shù)量以及這些用戶的活動視圖;關于互斥、鎖表和sql階段計時的統(tǒng)計信息視圖。

安裝
和一般的golang工具一樣,ps-top安裝很簡單,直接用go get就可以下載、編譯,安裝好:
- go get -u github.com/sjmudd/ps-top/cmd/ps-top或
- go get -u github.com/sjmudd/ps-top/cmd/ps-stats

這樣就會直接安裝下載工具及其依賴項,安裝后的二進制文件在$GOPATH/bin/目錄。如果該路徑在系統(tǒng)PATH設置中,則無需指定任何特定路徑即可直接運行程序。
訪問MySQL
可以通過以下方法之一訪問MySQL:
- 默認使用文件~/.my.cnf。
- 制定cnf文件,通過--defaults-file=/path/to/.my.cnf。
- 使用--host=somehost --port=999 --user=someuser --password=somepass連接到主機
- 通過本機socket連接 --socket=/path/to/mysql.sock --user=someuser --password=somepass
- 如果未指定,則用戶默認為的內容$USER。如果未指定端口,則默認為3306。
可以通過命令行選項--use-environment ps-top或者ps-stats,則在環(huán)境變量中查找MYSQL_DSN的賬號信息去連接Mysql。MYSQL_DSN格式為式:
- user:pass@tcp(host:port)/performance_schema
這樣就避免在命令行中直接顯示賬號和密碼,防止信息泄露。
MySQL/MariaDB配置
performance_schema數(shù)據(jù)庫必須配置為支持ps-top。默認情況下,在MySQL上會啟用此功能。MariaDB> = 10.0.12上則禁用此功能。因此,需額外配置啟用,在/etc/my.cnf中,設置:
- performance_schema = 1
然后重新啟動MariaDB才能生效。
ps-top和ps-stats需要問performance_schema表的SELECT權限。如果無法訪問所需表,它們將不會運行。
setup_instruments:查看mutex_latency或stages_latency 根據(jù)需要修改改配置,保證用戶有權限執(zhí)行此操作。如果服務器,--read-only或者沒有足夠的權限來更改這些表,則這些視圖可能為空。如果在啟動時成功更新了表,則停止ps-top之前,該setup_instruments配置會將其恢復為原始設置。
視圖
ps-top和ps-stats可以顯示7個不同的數(shù)據(jù)視圖,這些視圖默認情況下每秒更新一次。這7個視圖為:
table_latency:表等待執(zhí)行操作的時間顯示活動。

table_ops:按MySQL執(zhí)行的活動數(shù)顯示活動。

file_io_latency:顯示MySQL在文件I/O上花費的時間。

table_lock_latency:根據(jù)表鎖顯示順序

user_latency:根據(jù)用戶運行查詢的時間或用戶與MySQL的連接數(shù)顯示排序。它提供了一些信息,還顯示了總的空閑時間,因為這表明可能有過長的空閑查詢,如果有堆積,這里的值之和可能很有趣。

mutex_latency:按互斥鎖延遲顯示排序。

SQL Stages_latency:在不同的SQL查詢階段中按時間顯示排序。

可以更改輪詢間隔并在模式之間進行切換。
快捷鍵
在ps-top模式下,以下按鍵可以讓ps-top在不同模式瀏覽或更改其行為。
h ?:顯示幫助。

- · 將輪詢間隔減少1秒(最少1秒)
- + 將輪詢間隔增加1秒
- q-退出
- t:在顯示自重置ps-top開始以來顯示統(tǒng)計信息或您顯式重置它們(使用'z')[REL]或顯示從MySQL收集的統(tǒng)計信息之間切換[ABS]。
- z:重置統(tǒng)計信息。那就是您看到的與"重置"統(tǒng)計信息有關的計數(shù)器。
:更改顯示模式:延遲,操作,文件I/O,鎖定,用戶,互斥,階段和存儲模式。 - 左箭頭:切換到上一個屏幕
- 向右箭頭:切換至下一個屏幕
標準輸出模式
ps-stats和,ps-top都具有與相同的視圖輸出,會定時發(fā)送到stdout。默認視圖為table_io_latency??梢允褂门cvmstat相同的方法來調整收集間隔和收集數(shù)據(jù)的次數(shù)。第一個參數(shù)是delay(默認為1秒),第二個參數(shù)是要進行的迭代次數(shù),如果未提供,則為一直運行。該模式旨在用于使用stdout作為輸出媒體來監(jiān)視ps-top并從中收集數(shù)據(jù)。

相關的命令行選項包括:
- --count=
限制迭代次數(shù)(默認值:永久運行) - --interval=
設置默認輪詢間隔(以秒為單位) - --limit=
限制輸出的行數(shù)(不包括標題) - --stdout 將輸出發(fā)送到stdout(不是屏幕)
- --view=
確定要在ps-時查看的視圖頂部開始(默認:table_io_latency)可能的值:table_io_latency,table_io_ops,file_io_latency,table_lock_latency, user_latency,mutex_latency和stages_latency。 - --totals 僅顯示總計行,而不顯示明細。
總結
本文我們介紹了一個golang撰寫的命令行工具,用來以top形式方式很方便的獲取Myql的一些運行狀態(tài),適合廣大運維和DBA作為一個稱手的工具,大家也可以作為golang語言學習范例項目。