当前位置:龙图IT服务 > 数据库 >

MySQL FAQ]系列 — 使用mysqldump备份时为什么要加上 -q 参数

作者:IT服务外包 发布时间:2015-06-18 阅读: 转至微博:

  简言之,就是说加上 -q 后,不会把SELECT出来的结果放在buffer中,而是直接dump到标准输出中,顶多只是buffer当前行结果,正常情况下是不会超过 max_allowed_packet 的,它默认情况下是的。

  如果关闭该参数,则会把SELECT出来的结果放在本地buffer中,然后再输出给客户端,会消耗更多内存。

  在mysqldump.c中也能看到二者的对比(现在流行深入源码,虽然我不是专注开发的,找几行源码能力还尚存,用来装B的,大家知道就好,哈哈):

  if (quick) res=mysql_use_result(sock);else res=mysql_store_result(sock);

  可以看到,如果只是备份小量数据,足以放在空闲内存buffer中的话,禁用 -q 会快一些,但如果是大数据集,没办法完全hold在内存buffer中时,就会产生swap,效率反而更差,真是赔了夫人又折兵。

  因此,如果使用mysqldump来备份数据时,总是加上 -q 参数,避免发生swap反而影响备份效率。

  详细过程(有耐心的可以继续往下看)

关键词: mysql备份