MySQL服務器 IO 100%的分析與優(yōu)化方案
前言
壓力測試過程中,如果因為資源使用瓶頸等問題引發(fā)最直接性能問題是業(yè)務交易響應時間偏大,TPS逐漸降低等。而問題定位分析通常情況下,最優(yōu)先排查的是監(jiān)控服務器資源利用率,例如先用TOP 或者nmon等查看CPU、內存使用情況,然后在排查IO問題,例如網絡IO、磁盤IO的問題。 如果是磁盤IO問題,一般問題是SQL語法問題、MYSQL參數配置問題、服務器自身硬件瓶頸導致IOPS吞吐率問題。
本文主要給大家介紹的是關于MySQL服務器 IO 100%的分析與優(yōu)化方案,下面話不多說了,來一起看看詳細的介紹吧
【問題】
有臺MySQL 5.6.21的數據庫實例以寫入為主,IO %util接近100%

寫入IOPS很高

【分析過程】
1、通過iotop工具可以看到當前IO消耗最高的mysql線程

2、查看線程49342的堆棧,可以看到正在進行redo log的刷新,對應的是9號文件

3、9號文件對應的是redo log的第一個文件

為什么mysql進程會頻繁的刷新redo log文件,要結合redolog的刷盤策略來分析,關鍵是innodb_flush_log_at_trx_commit參數,
默認是1,最安全,但在寫壓力大的情況下,也會帶來較大的性能影響,每次事務提交時MySQL都會把log buffer的數據寫入log file,并且flush(刷到磁盤)中去。

結合這個集群的寫入場景來看,大部分都是小事務的寫入,每次事務提交都會觸發(fā)刷盤動作,這種場景下通過增大innodb_log_buffer_size和innodb_log_file_size的優(yōu)化效果不明顯

【優(yōu)化方案】
1、應用層面,對于寫壓力大的系統(tǒng),可以將單條的insert語句優(yōu)化為小批量的insert語句,這樣事務commit的次數減少,redo log刷盤減少,性能理論上會有提升
2、MySQL層面,對于日志類型的系統(tǒng),如果允許宕機的情況下少量數據丟失,可以將innodb_flush_log_at_trx_commit參數調整為2,
當設置為2時,則在事務提交時只做write操作,只保證寫到系統(tǒng)的page cache,因此實例crash不會丟失事務,但宕機則可能丟失事務
在這臺服務器上測試,將參數調整為2時,IO的請求從200M/S降到約10M/S壓力會減少10倍以上

3、系統(tǒng)層面,更換性能更佳的磁盤
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- 分析Mysql表讀寫、索引等操作的sql語句效率優(yōu)化問題
- 小米正式開源 SQL 智能優(yōu)化與改寫工具 SOAR
- Mysql優(yōu)化order by語句的方法詳解
- MYSQL配置參數優(yōu)化詳解
- MySQL中聚合函數count的使用和性能優(yōu)化技巧
- Mysql查詢最近一條記錄的sql語句(優(yōu)化篇)
- 30個mysql千萬級大數據SQL查詢優(yōu)化技巧詳解
- PHP+MySQL實現對一段時間內每天數據統(tǒng)計優(yōu)化操作實例
- SQL語句優(yōu)化之JOIN和LEFT JOIN 和 RIGHT JOIN語句的優(yōu)化
- 數據庫sql語句優(yōu)化
相關文章
MySQL 5.6.51 解壓版(zip版)安裝配置圖文方法
這兩天剛試用了一下MySQL5.6.51,感覺還不錯,有兄弟戲稱是一個高富帥版本?,F將MySQL5.6.51 zip解壓版本的安裝配置過程記錄如下,希望能給需要安裝該版本的朋友一點參考作用2015-08-08
解決Mysql同步到ES時date和time字段類型轉換問題
這篇文章主要介紹了Mysql同步到ES時date和time字段類型轉換問題解決辦法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
Linux下安裝mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz
這篇文章主要介紹了Linux下安裝mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09

