Mysql 快速预热InnoDB Buffer_Pool缓冲池

数据库的buffer pool中的数据重启后,会丢失。因此,再次启动后,需要重新通过应用对数据库的访问,逐渐加载到buffer pool中。这个过程称为数据库预热。如果库较大,该过程花费时间较长,期间应用的性能也受到影响。
查看当前buffer pool 使用情况 show global status like '%innodb_buffer_pool_bytes%';

MySQL 5.6中,可以将buffer pool的内容(文件页的索引)dump到文件中,然后快速load到buffer pool中。避免了数据库的预热过程,提高了应用访问的性能。

mysql> show variables like 'innodb_buffer%';
+-------------------------------------+----------------+
| Variable_name                       | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_dump_at_shutdown | OFF            |
| innodb_buffer_pool_dump_now         | OFF            |
| innodb_buffer_pool_filename         | ib_buffer_pool |
| innodb_buffer_pool_load_at_startup  | OFF            |
| innodb_buffer_pool_load_now         | OFF            |
+-------------------------------------+----------------+


运行时dump缓冲池 在命令行执行

运行时dump缓冲池
set global innodb_buffer_pool_dump_now = ON;

运行时load缓冲池
set global innodb_buffer_pool_load_now = ON;


永久修改 在my.cnf 添加

innodb_buffer_pool_dump_at_shutdown = ON  # 关闭时dump缓冲池
innodb_buffer_pool_load_at_startup  = ON  # 启动时load缓冲池
 
innodb_buffer_pool_filename = <path\to\file> # 设置记录缓冲池页块的文件  默认为 ib_buffer_pool


方法二 使用脚本预热

#!/bin/bash
# description: Mysql data preheat. All tables loaded InnoDB Buffer Pool

MYSQL_USER='root'
MYSQL_PWD='password'
MYSQL_HOST='127.0.0.1'
MYSQL_PORT='3306'
MYSQL_DB='powl22'
MYSQL_CONN="/usr/bin/mysql -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"
MYSQL_TABLES=`${MYSQL_CONN} -e "show tables from ${MYSQL_DB};" 2>/dev/null | sed '1d'`

for i in ${MYSQL_TABLES}
do
  ${MYSQL_CONN} -e "select * from ${MYSQL_DB}.$i limit 1;" >/dev/null  2>&1
  ${MYSQL_CONN} -e "select count(*) from ${MYSQL_DB}.$i;" >/dev/null  2>&1

done


方法三

my.cnf 加入init-file=/mysql/init.sql ,在每次mysql重启的时候就自动执行这个预热的sql  当然了 sql是要我们自己生成的哦

你可能感兴趣的:(Mysql 快速预热InnoDB Buffer_Pool缓冲池)