您好,登錄后才能下訂單哦!
MySQL性能突發(fā)事件問題的排查技巧有哪些呢,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
經(jīng)過多年的實際經(jīng)驗,整理了一些材料,已Linux環(huán)境下MySQL性能突發(fā)事件問題排查技巧分享給大家。
作為DBA在面對性能上突發(fā)問題的時候,是否出現(xiàn)過束手無策,無從下手的經(jīng)歷。 其實性能無非問題點在于存儲、操作系統(tǒng), 應用程序,數(shù)據(jù)庫 等方面。
性能分析問題 并沒有想象的那么難,當了解到一些常用的Linux 系統(tǒng)命令和MySQL的基礎排查命令的時候,所有問題點都可以定位到。
先上一個Linux性能工具圖譜圖,Brendan D. Gregg動態(tài)追蹤工具 DTrace 的作者。
有點復雜,不用太care,只要你理解了下面的常用命令和分析點,那就可以確定絕大數(shù)性能上問題。
Linux 平臺基礎常用的性能收集工具:
1. top — Linux 系統(tǒng)進程監(jiān)控
top命令是Linux下常用的性能分析工具,能夠?qū)崟r顯示系統(tǒng)中各個進程的資源占用狀況,類似于Windows的任務管理器。并且它也是 Linux 系統(tǒng)管理員經(jīng)常使用的監(jiān)控系統(tǒng)性能的工具。Top命令可以定期顯示所有正在運行和實際運行并且更新到列表中,它顯示出 CPU 的使用、內(nèi)存的使用、交換內(nèi)存、緩存大小、緩沖區(qū)大小、過程控制、用戶和更多命令。它也會顯示內(nèi)存和 CPU 使用率過高的正在運行的進程。
2. vmstat — 虛擬內(nèi)存統(tǒng)計
vmstat 命令是用于顯示虛擬內(nèi)存、內(nèi)核線程、磁盤、系統(tǒng)進程、I/O 模塊、中斷、CPU 活躍狀態(tài)等更多信息。
3. lsof — 打開文件列表
lsof 命令對于很多 Linux/Unix 系統(tǒng)都可以使用,主要以列表的形式顯示打開的文件和進程。打開的文件主要包括磁盤文件、網(wǎng)絡套接字、管道、設備和進程。這個命令很容易看出哪些文件正在使用。
4. tcpdump — 網(wǎng)絡數(shù)據(jù)包分析器
tcpdump 是一種使用最廣泛的命令行網(wǎng)絡數(shù)據(jù)包分析,將網(wǎng)絡中傳送的數(shù)據(jù)包完全截獲下來提供分析。它支持針對網(wǎng)絡層、協(xié)議、主機、網(wǎng)絡或端口的過濾 并提供and、or、not等邏輯語句來幫助你去掉無用的信息。
包可通過tcpdump命令解析,也可以保存成后綴為pcap的文件,使用wireshark等軟件進行查看。
3. netstat — 網(wǎng)絡統(tǒng)計
netstat 命令是一個監(jiān)控網(wǎng)絡數(shù)據(jù)包傳入和傳出的統(tǒng)計界面的命令行工具。它對于許多系統(tǒng)管理員去監(jiān)控網(wǎng)絡性能和解決網(wǎng)絡相關(guān)問題是一個非常有用的工具。
4. iostat — 輸入/輸出統(tǒng)計
iostat 是收集和展示系統(tǒng)輸入和輸出存儲設備統(tǒng)計的簡單工具。這個工具通常用于查找存儲設備性能問題,包括設備、本地磁盤、例如 NFS 遠程磁盤。
除了上述 還有 其他一些Linux 常用的工具sar,htop, IPTraf , iotop ,iftop ,iptraf 等。
MySQL常用性能突發(fā)事件分析命令:
1. SHOW PROCESSLIST; —當前MySQL數(shù)據(jù)庫的運行的所有線程
2. INNODB_TRX; — 當前運行的所有事務
## 當前運行的所有事務 ,還有具體的語句
3. INNODB_LOCKS; — 當前出現(xiàn)的鎖
## 當前事務出現(xiàn)的鎖的語句信息
4. INNODB_LOCK_WAITS; — 鎖等待的對應關(guān)系計
## 鎖等待的對應關(guān)系
5. SHOW OPEN TABLES where In_use >0; — 當前打開表
查看哪些表在使用中,In_use列表示有多少線程正在使用某張表,Name_locked表示表名是否被鎖,這一般發(fā)生在Drop或Rename命令操作這張表時。所以這條命令不能幫助解答我們常見的問題:當前某張表是否有死鎖,誰擁有表上的這個鎖等。
下面比較重點部分,請注意!
6. SHOW ENGINE INNODB STATUS \G; —Innodb狀態(tài)
顯示除了大量的內(nèi)部信息,輸出內(nèi)容比較復雜難懂,輸出內(nèi)容中包含了一些平均值的統(tǒng)計信息,這些平均值是自上次輸出結(jié)果生成以來的統(tǒng)計數(shù)。
具體分析如下:
①.Header
這部分簡單的打印,輸出的時間,以及自從上次輸出的間隔時間。
②.BACKGROUND THREAD
③. SEMAPHORES 信號量
OS WAIT ARRAY INFO 操作系統(tǒng)等待數(shù)組的信息,它是一個插槽數(shù)組,innodb使用了多少次操作系統(tǒng)的等待
保留統(tǒng)計(reservation count)顯示了innodb分配插槽的頻度
信號計數(shù)(signal count) 衡量的是線程通過數(shù)組得到信號的頻度
RW-shared spins:#這行顯示讀寫的共享鎖的計數(shù)器
RW-excl spins:#這行顯示讀寫的排他鎖的計數(shù)器
RW-sx spins:#這行顯示共享排它鎖計數(shù)器
*備注:5.7.2增加了一種新的讀寫鎖類型稱為SX共享排他鎖
鎖的擁有則可以讀表中的任何數(shù)據(jù),如果在相應的行上能夠獲得X鎖,則可以修改該行。
④. TRANSACTIONS
包含Innodb 事務(transactions)的統(tǒng)計信息,還有當前活動的事務列表。
transaction id: 這個ID是一個系統(tǒng)變量隨時每次新的transaction產(chǎn)生而增加。
Purge done:正在進行清空(purge)操作的transaction ID。你可以通過查看第transaction id和第Purge done ID的區(qū)別,明白沒有被purge的事務落后的情況。
History listlength:記錄了undo spaces內(nèi)unpurged的事務的個數(shù)。
⑤. FILE I/O
顯示了I/O Helper thread的狀態(tài),包括一些統(tǒng)計信息
pending operations, pending的log和buffer pool thread的fsync()調(diào)用
399 OS file:行顯示了reads, writes, and fsync()調(diào)用次數(shù)。
0.00 reads/s…… : 顯示了每秒的統(tǒng)計信息
備注:“aio”表示“ 異步I/O(asynchronous I/O).”
⑥. INSERT BUFFER AND ADAPTIVE HASH INDEX
Ibuf:insertbuffer的一些信息,包括free list, segment size
Hash table:顯示了hash table的一些信息***一行顯示了每秒進行了多少次hash搜索,以及非hash搜索
⑦. LOG
Log sequence number表示的是redo log buffer中的lsn
Log flushed up to表示的是redo log file中的lsn
Pages flushed up to表示的緩沖池最舊臟頁的lsn
Last checkpoint at 指的就是最近一個物理頁刷新到磁盤時,它的fil_page_lsn的變量值。
⑧. BUFFER POOL AND MEMORY
當前內(nèi)存使用狀態(tài)
Pages read ahead:顯示了每秒線性預讀跟隨機預讀的次數(shù)
備注:InnoDB 提供了兩種預讀的方式,一種是 Linear read ahead,由參數(shù)innodb_read_ahead_threshold控制,當你連續(xù)讀取一個 extent 的 threshold 個 page 的時候,會觸發(fā)下一個 extent 64個page的預讀。另外一種是Random read-ahead,由參數(shù)innodb_random_read_ahead控制,當你連續(xù)讀取設定的數(shù)量的page后,會觸發(fā)讀取這個extent的剩余page。InnoDB 的預讀功能是使用后臺線程異步完成。
⑨. ROW OPERATIONS
0 queries inside InnoDB, 0 queries in queue:顯示了有多少線程在Innodb內(nèi)核
read views open inside InnoDB:顯示了有多少read view被打開了,一個read view是一致性保證的MVCC “snapshot”
備注:innodb多版本并發(fā)(MVCC)通過read view來確定一致性讀時的數(shù)據(jù)庫snapshot, innodb的read view確定一條記錄能否看到,
在RC隔離級別下,是每個SELECT都會獲取***的read view;
在RR隔離級別下,則是當事務中的***個SELECT請求才創(chuàng)建read view
7. SHOW STATUS LIKE 'innodb_row_lock_%'; — 鎖性能狀態(tài)
查看當前鎖性能狀態(tài)
解釋如下:
Innodb_row_lock_current_waits:當前等待鎖的數(shù)量
Innodb_row_lock_time:系統(tǒng)啟動到現(xiàn)在、鎖定的總時間長度
Innodb_row_lock_time_avg:每次平均鎖定的時間
Innodb_row_lock_time_max:最長一次鎖定時間
Innodb_row_lock_waits:系統(tǒng)啟動到現(xiàn)在、總共鎖定次數(shù)
8. SQL語句EXPLAIN; — 查詢優(yōu)化器
EXPLAIN執(zhí)行計劃部分,略過
作為一個DBA,問題排查技巧是每個工程師都需要掌握的核心技能。
看完上述內(nèi)容,你們掌握MySQL性能突發(fā)事件問題的排查技巧有哪些呢的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。