程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 解決mysql占用IO過高,mysqlio過高

解決mysql占用IO過高,mysqlio過高

編輯:MySQL綜合教程

解決mysql占用IO過高,mysqlio過高


1、日志產生的性能影響:
由於日志的記錄帶來的直接性能損耗就是數據庫系統中最為昂貴的IO資源。MySQL的日志包括錯誤日志(ErrorLog),更新日志(UpdateLog),二進制日志(Binlog),查詢日志(QueryLog),慢查詢日志(SlowQueryLog)等。當然,更新日志是老版本的MySQL才有的,目前已經被二進制日志替代。

在默認情況下,系統僅僅打開錯誤日志,關閉了其他所有日志,以達到盡可能減少IO損耗提高系統性能的目的。但是在一般稍微重要一點的實際應用場景中,都至少需要打開二進制日志,因為這是MySQL很多存儲引擎進行增量備份的基礎,也是MySQL實現復制的基本條件。有時候為了進一步的性能優化,定位執行較慢的SQL語句,很多系統也會打開慢查詢日志來記錄執行時間超過特定數值(由我們自行設置)的SQL語句。

一般情況下,在生產系統中很少有系統會打開查詢日志。因為查詢日志打開之後會將MySQL中執行的每一條Query都記錄到日志中,會該系統帶來比較大的IO負擔,而帶來的實際效益卻並不是非常大。一般只有在開發測試環境中,為了定位某些功能具體使用了哪些SQL語句的時候,才會在短時間段內打開該日志來做相應的分析。所以,在MySQL系統中,會對性能產生影響的MySQL日志(不包括各存儲引擎自己的日志)主要就是Binlog了。

2、mysql內執行如下指令: set global sync_binlog=500;   當每進行500次事務提交之後,MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤。 set global innodb_flush_log_at_trx_commit=2;   默認值1代表每一次事務提交或事務外的指令都需要把日志寫入(flush)硬盤,這是很費時的。特別是使用電池供電緩存(Battery backed up cache)時。設置為2代表不寫入硬盤而是寫入系統緩存。日志仍然會每秒flush到硬盤,所以你一般不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的數據。而值設置為2只會在整個操作系統宕機時才可能丟數據。   注:重新開機後,該指令失效。可在服務啟動時,設置如上兩項。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved