MySQL性能突發(fā)事件問題的排查技巧有哪些呢

MySQL性能突發(fā)事件問題的排查技巧有哪些呢,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)成立10多年來,這條路我們正越走越好,積累了技術(shù)與客戶資源,形成了良好的口碑。為客戶提供網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、域名注冊(cè)、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。網(wǎng)站是否美觀、功能強(qiáng)大、用戶體驗(yàn)好、性價(jià)比高、打開快等等,這些對(duì)于網(wǎng)站建設(shè)都非常重要,創(chuàng)新互聯(lián)通過對(duì)建站技術(shù)性的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

經(jīng)過多年的實(shí)際經(jīng)驗(yàn),整理了一些材料,已Linux環(huán)境下MySQL性能突發(fā)事件問題排查技巧分享給大家。

作為DBA在面對(duì)性能上突發(fā)問題的時(shí)候,是否出現(xiàn)過束手無策,無從下手的經(jīng)歷。 其實(shí)性能無非問題點(diǎn)在于存儲(chǔ)、操作系統(tǒng), 應(yīng)用程序,數(shù)據(jù)庫 等方面。

性能分析問題 并沒有想象的那么難,當(dāng)了解到一些常用的Linux 系統(tǒng)命令和MySQL的基礎(chǔ)排查命令的時(shí)候,所有問題點(diǎn)都可以定位到。

先上一個(gè)Linux性能工具圖譜圖,Brendan D. Gregg動(dòng)態(tài)追蹤工具 DTrace 的作者。

有點(diǎn)復(fù)雜,不用太care,只要你理解了下面的常用命令和分析點(diǎn),那就可以確定絕大數(shù)性能上問題。

Linux 平臺(tái)基礎(chǔ)常用的性能收集工具:

1. top — Linux 系統(tǒng)進(jìn)程監(jiān)控

top命令是Linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況,類似于Windows的任務(wù)管理器。并且它也是 Linux  系統(tǒng)管理員經(jīng)常使用的監(jiān)控系統(tǒng)性能的工具。Top命令可以定期顯示所有正在運(yùn)行和實(shí)際運(yùn)行并且更新到列表中,它顯示出 CPU  的使用、內(nèi)存的使用、交換內(nèi)存、緩存大小、緩沖區(qū)大小、過程控制、用戶和更多命令。它也會(huì)顯示內(nèi)存和 CPU 使用率過高的正在運(yùn)行的進(jìn)程。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

2. vmstat — 虛擬內(nèi)存統(tǒng)計(jì)

vmstat 命令是用于顯示虛擬內(nèi)存、內(nèi)核線程、磁盤、系統(tǒng)進(jìn)程、I/O 模塊、中斷、CPU 活躍狀態(tài)等更多信息。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

3. lsof — 打開文件列表

lsof 命令對(duì)于很多 Linux/Unix  系統(tǒng)都可以使用,主要以列表的形式顯示打開的文件和進(jìn)程。打開的文件主要包括磁盤文件、網(wǎng)絡(luò)套接字、管道、設(shè)備和進(jìn)程。這個(gè)命令很容易看出哪些文件正在使用。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

4. tcpdump — 網(wǎng)絡(luò)數(shù)據(jù)包分析器

tcpdump 是一種使用最廣泛的命令行網(wǎng)絡(luò)數(shù)據(jù)包分析,將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包完全截獲下來提供分析。它支持針對(duì)網(wǎng)絡(luò)層、協(xié)議、主機(jī)、網(wǎng)絡(luò)或端口的過濾  并提供and、or、not等邏輯語句來幫助你去掉無用的信息。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

包可通過tcpdump命令解析,也可以保存成后綴為pcap的文件,使用wireshark等軟件進(jìn)行查看。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

3. netstat — 網(wǎng)絡(luò)統(tǒng)計(jì)

netstat  命令是一個(gè)監(jiān)控網(wǎng)絡(luò)數(shù)據(jù)包傳入和傳出的統(tǒng)計(jì)界面的命令行工具。它對(duì)于許多系統(tǒng)管理員去監(jiān)控網(wǎng)絡(luò)性能和解決網(wǎng)絡(luò)相關(guān)問題是一個(gè)非常有用的工具。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

4. iostat — 輸入/輸出統(tǒng)計(jì)

iostat 是收集和展示系統(tǒng)輸入和輸出存儲(chǔ)設(shè)備統(tǒng)計(jì)的簡單工具。這個(gè)工具通常用于查找存儲(chǔ)設(shè)備性能問題,包括設(shè)備、本地磁盤、例如 NFS 遠(yuǎn)程磁盤。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

除了上述 還有 其他一些Linux 常用的工具sar,htop, IPTraf , iotop ,iftop ,iptraf 等。

MySQL常用性能突發(fā)事件分析命令:

1. SHOW PROCESSLIST; —當(dāng)前MySQL數(shù)據(jù)庫的運(yùn)行的所有線程

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

2. INNODB_TRX; — 當(dāng)前運(yùn)行的所有事務(wù)

## 當(dāng)前運(yùn)行的所有事務(wù) ,還有具體的語句

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

3. INNODB_LOCKS; — 當(dāng)前出現(xiàn)的鎖

## 當(dāng)前事務(wù)出現(xiàn)的鎖的語句信息

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

4. INNODB_LOCK_WAITS; — 鎖等待的對(duì)應(yīng)關(guān)系計(jì)

## 鎖等待的對(duì)應(yīng)關(guān)系

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

5. SHOW OPEN TABLES where In_use >0; — 當(dāng)前打開表

查看哪些表在使用中,In_use列表示有多少線程正在使用某張表,Name_locked表示表名是否被鎖,這一般發(fā)生在Drop或Rename命令操作這張表時(shí)。所以這條命令不能幫助解答我們常見的問題:當(dāng)前某張表是否有死鎖,誰擁有表上的這個(gè)鎖等。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

下面比較重點(diǎn)部分,請(qǐng)注意!

6. SHOW ENGINE INNODB STATUS \G; —Innodb狀態(tài)

顯示除了大量的內(nèi)部信息,輸出內(nèi)容比較復(fù)雜難懂,輸出內(nèi)容中包含了一些平均值的統(tǒng)計(jì)信息,這些平均值是自上次輸出結(jié)果生成以來的統(tǒng)計(jì)數(shù)。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

具體分析如下:

①.Header

這部分簡單的打印,輸出的時(shí)間,以及自從上次輸出的間隔時(shí)間。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

②.BACKGROUND THREAD

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

③. SEMAPHORES 信號(hào)量

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

OS WAIT ARRAY INFO 操作系統(tǒng)等待數(shù)組的信息,它是一個(gè)插槽數(shù)組,innodb使用了多少次操作系統(tǒng)的等待

保留統(tǒng)計(jì)(reservation count)顯示了innodb分配插槽的頻度

信號(hào)計(jì)數(shù)(signal count) 衡量的是線程通過數(shù)組得到信號(hào)的頻度

RW-shared spins:#這行顯示讀寫的共享鎖的計(jì)數(shù)器

RW-excl spins:#這行顯示讀寫的排他鎖的計(jì)數(shù)器

RW-sx spins:#這行顯示共享排它鎖計(jì)數(shù)器

*備注:5.7.2增加了一種新的讀寫鎖類型稱為SX共享排他鎖

鎖的擁有則可以讀表中的任何數(shù)據(jù),如果在相應(yīng)的行上能夠獲得X鎖,則可以修改該行。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

④. TRANSACTIONS

包含Innodb 事務(wù)(transactions)的統(tǒng)計(jì)信息,還有當(dāng)前活動(dòng)的事務(wù)列表。

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

transaction id: 這個(gè)ID是一個(gè)系統(tǒng)變量隨時(shí)每次新的transaction產(chǎn)生而增加。

Purge done:正在進(jìn)行清空(purge)操作的transaction ID。你可以通過查看第transaction id和第Purge done  ID的區(qū)別,明白沒有被purge的事務(wù)落后的情況。

History listlength:記錄了undo spaces內(nèi)unpurged的事務(wù)的個(gè)數(shù)。

⑤. FILE I/O

顯示了I/O Helper thread的狀態(tài),包括一些統(tǒng)計(jì)信息

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

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)計(jì)信息

備注:“aio”表示“ 異步I/O(asynchronous I/O).”

⑥. INSERT BUFFER AND ADAPTIVE HASH INDEX

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

Ibuf:insertbuffer的一些信息,包括free list, segment size

Hash table:顯示了hash table的一些信息***一行顯示了每秒進(jìn)行了多少次hash搜索,以及非hash搜索

⑦. LOG

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

Log sequence number表示的是redo log buffer中的lsn

Log flushed up to表示的是redo log file中的lsn

Pages flushed up to表示的緩沖池最舊臟頁的lsn

Last checkpoint at 指的就是最近一個(gè)物理頁刷新到磁盤時(shí),它的fil_page_lsn的變量值。

⑧. BUFFER POOL AND MEMORY

當(dāng)前內(nèi)存使用狀態(tài)

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

Pages read ahead:顯示了每秒線性預(yù)讀跟隨機(jī)預(yù)讀的次數(shù)

備注:InnoDB 提供了兩種預(yù)讀的方式,一種是 Linear read  ahead,由參數(shù)innodb_read_ahead_threshold控制,當(dāng)你連續(xù)讀取一個(gè) extent 的 threshold 個(gè) page  的時(shí)候,會(huì)觸發(fā)下一個(gè) extent 64個(gè)page的預(yù)讀。另外一種是Random  read-ahead,由參數(shù)innodb_random_read_ahead控制,當(dāng)你連續(xù)讀取設(shè)定的數(shù)量的page后,會(huì)觸發(fā)讀取這個(gè)extent的剩余page。InnoDB  的預(yù)讀功能是使用后臺(tái)線程異步完成。

⑨. ROW OPERATIONS

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

0 queries inside InnoDB, 0 queries in queue:顯示了有多少線程在Innodb內(nèi)核

read views open inside InnoDB:顯示了有多少read view被打開了,一個(gè)read view是一致性保證的MVCC  “snapshot”

備注:innodb多版本并發(fā)(MVCC)通過read view來確定一致性讀時(shí)的數(shù)據(jù)庫snapshot, innodb的read  view確定一條記錄能否看到,

在RC隔離級(jí)別下,是每個(gè)SELECT都會(huì)獲取***的read view;

在RR隔離級(jí)別下,則是當(dāng)事務(wù)中的***個(gè)SELECT請(qǐng)求才創(chuàng)建read view

7. SHOW STATUS LIKE 'innodb_row_lock_%'; — 鎖性能狀態(tài)

查看當(dāng)前鎖性能狀態(tài)

MySQL性能突發(fā)事件問題的排查技巧有哪些呢

解釋如下:

Innodb_row_lock_current_waits:當(dāng)前等待鎖的數(shù)量

Innodb_row_lock_time:系統(tǒng)啟動(dòng)到現(xiàn)在、鎖定的總時(shí)間長度

Innodb_row_lock_time_avg:每次平均鎖定的時(shí)間

Innodb_row_lock_time_max:最長一次鎖定時(shí)間

Innodb_row_lock_waits:系統(tǒng)啟動(dòng)到現(xiàn)在、總共鎖定次數(shù)

8. SQL語句EXPLAIN; — 查詢優(yōu)化器

EXPLAIN執(zhí)行計(jì)劃部分,略過

作為一個(gè)DBA,問題排查技巧是每個(gè)工程師都需要掌握的核心技能。

看完上述內(nèi)容,你們掌握MySQL性能突發(fā)事件問題的排查技巧有哪些呢的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站欄目:MySQL性能突發(fā)事件問題的排查技巧有哪些呢
網(wǎng)站路徑:http://muchs.cn/article14/iepcde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、用戶體驗(yàn)、搜索引擎優(yōu)化App開發(fā)、全網(wǎng)營銷推廣小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站