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

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

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

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

file_io_latency:顯示MySQL在文件I/O上花費(fèi)的時(shí)間。

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

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

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

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

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

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

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