mysql数据库中的预热
来源:互联网 发布:医院网络咨询工作好吗 编辑:程序博客网 时间:2024/04/20 05:18
MySQL 5.0 5.1 下InnoDB的预热方法
http://dbahacker.com/mysql/mysql-5-0-5-1-%e4%b8%8binnodb%e7%9a%84%e9%a2%84%e7%83%ad%e6%96%b9%e6%b3%95
之前在做一个项目的MySQL数据库极限压测, 有部分场景是涉及到MySQL重启的,而这个项目使用的是InnoDB存储引擎。
重启完毕后,一开始十几分钟的性能是非常差的,原因是因为InnoDB有innodb buffer pool(简称ibf)的概念
和innodb buffer pool相关的参数innodb_buffer_pool_size,size越大,可以放到内存的数据越多,而大多数的项目都会有热点数据的存在,当热点数据经过LRU算法进入到buffer pool之后,读磁盘的次数减少,读的都是内存,速度是最快的
问题来了,数据库一重启,热点数据都被清空,bf里面都是空的.等待app的sql请求过来让bf填满数据是一个方法,但30分钟内很难把热点数据都装载进来.
这个时候,我们可以采取人工预热的办法来让bf满足我们的需求
MySQL 5.0的预热是最简单的
方法1 : 在MySQL重启后 执行 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES,经过我在一台5.0MySQL的实验 在重启后查看show innodb status\G 和执行完这条语句后 Free buffers的页数会减少.
这个count语句有何作用呢?InnoDB的存储格式和MyISAM不一样, innodb会在mysql启动后的第一次访问表的时候,统计表的索引基数等相关信息,如果表很多的话,这也是一个巨大的开销.所以在正式提供服务之前,就把表打开,放入到bp里面
MySQL 5.1的数据预热
我在一台5.1.48的MySQL进行了重启,测试了同样的SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES 但发现free buffers的页数没有变少,情况和mysqlperformanceblog.com作者所说的一样–这个方法在5.1之后就无法达到我们的需求了
可以采用另外一种方法:获得数据库里面的库和对应的表,来进行预热,核心代码是这一句
SELECT table_schema, table_name FROM information_schema.tables
可以用perl或者python来获取库和表 然后执行 select * from db.table limit 1 来实现我们的方法
最后提一下,我们可以再my.cnf 加入init-file=/mysql/init.sql ,在每次mysql重启的时候就自动执行这个预热的sql 当然了 sql是要我们自己生成的哦
http://dbahacker.com/mysql/mysql-5-0-5-1-%e4%b8%8binnodb%e7%9a%84%e9%a2%84%e7%83%ad%e6%96%b9%e6%b3%95
之前在做一个项目的MySQL数据库极限压测, 有部分场景是涉及到MySQL重启的,而这个项目使用的是InnoDB存储引擎。
重启完毕后,一开始十几分钟的性能是非常差的,原因是因为InnoDB有innodb buffer pool(简称ibf)的概念
和innodb buffer pool相关的参数innodb_buffer_pool_size,size越大,可以放到内存的数据越多,而大多数的项目都会有热点数据的存在,当热点数据经过LRU算法进入到buffer pool之后,读磁盘的次数减少,读的都是内存,速度是最快的
问题来了,数据库一重启,热点数据都被清空,bf里面都是空的.等待app的sql请求过来让bf填满数据是一个方法,但30分钟内很难把热点数据都装载进来.
这个时候,我们可以采取人工预热的办法来让bf满足我们的需求
MySQL 5.0的预热是最简单的
方法1 : 在MySQL重启后 执行 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES,经过我在一台5.0MySQL的实验 在重启后查看show innodb status\G 和执行完这条语句后 Free buffers的页数会减少.
这个count语句有何作用呢?InnoDB的存储格式和MyISAM不一样, innodb会在mysql启动后的第一次访问表的时候,统计表的索引基数等相关信息,如果表很多的话,这也是一个巨大的开销.所以在正式提供服务之前,就把表打开,放入到bp里面
MySQL 5.1的数据预热
我在一台5.1.48的MySQL进行了重启,测试了同样的SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES 但发现free buffers的页数没有变少,情况和mysqlperformanceblog.com作者所说的一样–这个方法在5.1之后就无法达到我们的需求了
可以采用另外一种方法:获得数据库里面的库和对应的表,来进行预热,核心代码是这一句
SELECT table_schema, table_name FROM information_schema.tables
可以用perl或者python来获取库和表 然后执行 select * from db.table limit 1 来实现我们的方法
最后提一下,我们可以再my.cnf 加入init-file=/mysql/init.sql ,在每次mysql重启的时候就自动执行这个预热的sql 当然了 sql是要我们自己生成的哦
- mysql数据库中的预热
- MYSQL中的数据库错误代码
- mysql数据库中的数据类型
- mysql数据库中的索引
- Mysql 数据库中的函数
- mysql数据库中的索引
- MySQL数据库中的常用命令
- mysql数据库中的事务
- mysql数据库中的锁
- mysql数据库中的索引
- Mysql数据库中的触发器
- Qt中的mysql数据库
- mysql中的数据库操作
- MySQL数据库中的order
- Linux中的数据库Mysql
- mysql 中的mysql数据库不见了
- MySQL 5.0 5.1 下InnoDB的预热方法
- MySQL数据库中的安全解决方案
- mysql命令行下的--tee选项功能
- html文字滚动代码
- activiti 5.10 笔记1
- 小tips:列出mysql中指定表的列数
- 几个简单常用的oracle权限查询脚本
- mysql数据库中的预热
- activiti 5.10笔记2
- 为何电商价格战无法避免
- 10个移动开发js框架
- 容易被忽略的collection.frequency方法
- (转)MySQL启用hugepage及相关监控
- linux C中定义打印宏
- (转)压测中How to耗尽linux资源(CPU,IO,Mem)
- RAC11.2.0.3.0完整安装笔记与一些故障解决