[MySQL FAQ]系列 -- 数据不算大,备份却非常慢
生活随笔
收集整理的這篇文章主要介紹了
[MySQL FAQ]系列 -- 数据不算大,备份却非常慢
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作/譯者:葉金榮(Email: ),來源:http://imysql.cn,轉載請注明作/譯者和出處,并且不能用于商業用途,違者必究。 問題 環境
硬件:DELL 1950, 146G SAS 15K RPMS * 2, 8G Ram
軟件:2.6.9-55.ELsmp x86_64, mysql 5.1.x 現象
2個庫,其中1個業務庫下有20多個表,表文件大小總量不到2G。
另一個為日志庫,下400多個表,大致是每天會產生5個表,其中有一個表較大,約400MB,總量約40多GB。
每次備份耗時較長,最嚴重的一次花了5個多小時才完成。
業務庫為當前活動庫,日志庫則主要用作備份,每天日志歸檔,過期數據表很少有讀寫請求。
InnoDB Buffer Pool總共分配了2G,從系統命令 top 結果來看,mysqld 只分配了 1.7G 內存,buffer pool 并沒有全部耗盡。
SHOW ENGINE INNODB STATUS 結果中也看到了,buffer pool 確實沒用完,還有不少空閑的。
備份時,觀察 vmstat 結果,發現 bi 和 bo 的量較大,而且兩個的值基本相當,備份其中一個表約 500MB,耗時 46 秒。
按照這個耗時計算,全部備份出來也不需要5個多小時,這是為什么呢? 分析
大家先分析下,看是什么原因,稍后給出答案 :) 原因 其實問題原因很簡單,但一般人不容易想到。那就是,那些歷史的日志表,由于長時間不讀取,大部分數據沒有在innodb buffer中。所以,每次備份時,大部分數據都要產生大量的物理讀,然后再產生物理寫,然而該服務器只有2塊硬盤,I/O性能有限,所以備份非常慢。 這時候,我們可以有幾種解決辦法:
1. 刪除過期日志表,或者放到線下的歸檔數據庫上
2. 如果innodb buffer還有大量空閑的話,可以不定期執行select * from table,將這部分數據load到buffer中,減少備份時的物理I/O,提高速度 本文出自 “MySQL中文網”博客 http://www.imysql.cn/
硬件:DELL 1950, 146G SAS 15K RPMS * 2, 8G Ram
軟件:2.6.9-55.ELsmp x86_64, mysql 5.1.x 現象
2個庫,其中1個業務庫下有20多個表,表文件大小總量不到2G。
另一個為日志庫,下400多個表,大致是每天會產生5個表,其中有一個表較大,約400MB,總量約40多GB。
每次備份耗時較長,最嚴重的一次花了5個多小時才完成。
業務庫為當前活動庫,日志庫則主要用作備份,每天日志歸檔,過期數據表很少有讀寫請求。
InnoDB Buffer Pool總共分配了2G,從系統命令 top 結果來看,mysqld 只分配了 1.7G 內存,buffer pool 并沒有全部耗盡。
SHOW ENGINE INNODB STATUS 結果中也看到了,buffer pool 確實沒用完,還有不少空閑的。
備份時,觀察 vmstat 結果,發現 bi 和 bo 的量較大,而且兩個的值基本相當,備份其中一個表約 500MB,耗時 46 秒。
按照這個耗時計算,全部備份出來也不需要5個多小時,這是為什么呢? 分析
大家先分析下,看是什么原因,稍后給出答案 :) 原因 其實問題原因很簡單,但一般人不容易想到。那就是,那些歷史的日志表,由于長時間不讀取,大部分數據沒有在innodb buffer中。所以,每次備份時,大部分數據都要產生大量的物理讀,然后再產生物理寫,然而該服務器只有2塊硬盤,I/O性能有限,所以備份非常慢。 這時候,我們可以有幾種解決辦法:
1. 刪除過期日志表,或者放到線下的歸檔數據庫上
2. 如果innodb buffer還有大量空閑的話,可以不定期執行select * from table,將這部分數據load到buffer中,減少備份時的物理I/O,提高速度 本文出自 “MySQL中文網”博客 http://www.imysql.cn/
轉載于:https://blog.51cto.com/imysql/308978
總結
以上是生活随笔為你收集整理的[MySQL FAQ]系列 -- 数据不算大,备份却非常慢的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到送别人项链是什么意思
- 下一篇: PL/SQL块中不能直接执行DDL语句(