亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

[MySQL FAQ]系列 -- 數據不算大,備份卻非常慢

標簽:
MySQL


作/译者:叶金荣(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/

©著作权归作者所有:来自51CTO博客作者叶金荣的原创作品,如需转载,请与作者联系,否则将追究法律责任

MySQL数据数据库MySQL FAQ


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消