如何减少 innodb 数据库关闭的时间?

来自:http://blog.chinaunix.net/uid-10449864-id-2956856.html


     大家在使用innodb数据库的时候,会发现有这么一个现象,当我们需要关闭或者重新启动mysql服务的时候,会需要相当一段长的时间,如果是数据库进程异常关闭,打开数据库又会花很长的时间来作恢复。
     开始还以为是数据库太大了引起的,后来看到一篇文章讲的是 “innodb_max_dirty_pages_pct与检查点的关系” ,才明白其中的道理。通常的原因是来自 buffer pool 的脏页数据交换,mysql会通知OS,把一些脏页交换出去,而交换是在内存中进行修改,而不是在硬盘上。


如果你需要快速关闭 innodb 数据库,那么有一个办法,如下:


1,设置全局变量,设置 innodb_max_dirty_pages_pct 参数的值。
mysql> set global innodb_max_dirty_pages_pct = 0;


2,执行如下命令,查看被修改的数据页面。
/usr/local/mysql/bin/mysqladmin -uroot -p  ext -i10 | grep dirty
Enter password:
| Innodb_buffer_pool_pages_dirty    | 4530        |
| Innodb_buffer_pool_pages_dirty    | 4576        |
| Innodb_buffer_pool_pages_dirty    | 4475        |
| Innodb_buffer_pool_pages_dirty    | 4496        |
| Innodb_buffer_pool_pages_dirty    | 4411        |


当这个参数变为 0,或者接近 0(如果你的服务器在使用,是不会变成 0 的)。
此时,这个数值相当的低时,你就可以重新启动你的数据库服务,这个时候,你会发现速度相当的快。


注意:
    这个数值和 innodb buffer 有很大的关系,一般不建议更改这个数值,除非你的 innodb buffer 很大。我这里有3台数据库服务器,一个设置了3G的 innodb buffer 脏页数据在1000左右,其他的是1G的 innodb buffer 脏页在4000左右,,看来还是 innodb buffer 越大越好呀!
   
    也许你会说可以通过 innodb_fast_shutdown 这个选项来调整关闭速度,系统默认为 1,但是如果你将此项的值修改为 0 或者 2,,这样的mysql就比较危险。
   
   
官方描述如下:

The InnoDB shutdown mode. By default, the value is 1, which causes a “fast” shutdown (the normal type of shutdown).

If the value is 0, InnoDB does a full purge and an insert buffer merge before a shutdown. These operations can take minutes, or even hours in extreme cases.

If the value is 1, InnoDB skips these operations at shutdown.

If the value is 2, InnoDB will just flush its logs and then shut down cold, as if MySQL had crashed; no committed transaction will be lost, but crash recovery will be done at the next startup. A value of 2 cannot be used on NetWare.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 数据库的性能优化是提高数据库响应速度和吞吐量的关键。以下是一些常用的 MySQL 性能优化方法和建议: 1. 优化查询语句:确保编写高效的查询语句,使用索引、避免全表扫描、减少不必要的连接和子查询等。 2. 创建索引:根据查询需求和数据访问模式,创建适当的索引来加速查询操作。但要注意不要过度索引,因为索引过多可能会影响写入性能。 3. 优化表结构:合理设计数据库表结构,避免冗余字段、过度标准化或反范式化等问题,以提高查询效率。 4. 配置合理的缓存和缓冲区:通过调整 MySQL 的缓存和缓冲区设置,如查询缓存、InnoDB 缓冲池等,来提高读取性能。 5. 分区和分表:对于大型数据库,可以考虑使用分区或分表技术来分割数据,减少单个表的数据量,提高查询效率。 6. 合理配置数据库连接池:使用连接池来管理数据库连接,避免频繁创建和关闭连接的开销,并限制连接数以防止资源耗尽。 7. 监控和调优:定期监控数据库性能指标,如查询执行时间、锁等待、磁盘 I/O 等,根据监控结果进行调优和优化。 8. 使用合适的存储引擎:根据应用需求选择合适的存储引擎,如 InnoDB、MyISAM 等,以提高性能和数据一致性。 9. 优化配置参数:根据数据库的硬件和工作负载,调整 MySQL 的配置参数,如缓存大小、并发连接数、线程池等。 10. 垂直和水平扩展:根据需求可以考虑垂直扩展(升级硬件)或水平扩展(分布式架构)来提高数据库性能和容量。 请注意,这些仅是一些常用的 MySQL 性能优化方法,具体的优化策略和步骤可能因环境和需求而有所不同。建议在实施之前,先了解并评估您的具体需求和瓶颈,并参考 MySQL 官方文档和性能优化指南进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值