mysql预热⽅式_mysqlinnodb数据预热
⾼负荷mysql数据库突然崩溃之后,在⼀段时间内,特别是⾼峰期,整个应⽤感觉⾮常卡!
这个时候就需要我们对mysql进⾏预热了!
因为mysql热点数据都在innodb buffer pool中,如果mysql突然关闭,buffer pool被清空!所有数据都需要从硬盘加载⾄内存中的buffer pool,当需要某个数据时,才从硬盘拿取,导致速度异常慢!这个时候,我们可以将⼀些数据⼿动加载⾄buffer pool,称为⼈为预热!
当然,还有⼀种⽅式,在mysql正常关闭的时候,将内存中的buffer pool备份值硬盘!在下次开启时,将该备份导⼊⾄buffer pool!这是5.6的快速预热特性!前提是正常关闭,如果是突然关闭或者kill -9关闭,就需要⼿动预热了!
简单讲⼀下⼏个版本的预热⽅式!
5.0
最简单的,只需要在information_schema.tables依次做⼀次count统计即可!
SELECT table_name FROM INFORMATION_SCHEMA.TABLES
c语言中数组怎么表示select count(1) from table_name;
然后SHOW STATSU 查看buffer pool中free页,即Innodb_buffer_pool_pages_free参数是否减少!
5.1
对于5.1来说,5.0的⽅法已经不适⽤了!
当时我们还是可以结合information_schema.tables!⽤动态sql以及游标组装出select * from db.tables limit 1,写⼀个预热存储过程!(也可以通过shell/python脚本来写!)
提供⼀个存储预热存储过程!DELIMITER $$
USE `mysql`$$
DROPPROCEDURE IF EXISTS `Proc_MySQL_Warmup`$$
CREATE DEFINER=`root`@`%` PROCEDURE `Proc_MySQL_Warmup`(
)
COMMENT '预热mysql存储过程'
BEGIN
>>>>>>>>>>>>#
#1.先从information_schema.tables中出所有表
#2.利⽤游标进⾏获取
#3.动态语句组装sql
#4.依次执⾏select * from db.tables limit 1;
>>>>>>>>>>>>#
# 宣告游标变量
DECLARE p_c INTDEFAULT 0;
# 宣告db.table变量
DECLARE p_table VARCHAR(1024);
# 宣告游标
DECLARE cur1 CURSORFOR
SELECT CONCAT(TABLE_SCHEMA,".",table_name) FROM information_schema.tables WHERE TABLE_TYPE='BASE TABLE'; # 如果获得'02000'状态,则表⽰游标已经获取到最后⼀个,将p_c变量置为NULL
DECLARECONTINUE HANDLER FOR SQLSTATE '02000'SET p_c = NULL;
# 开启游标
OPEN cur1;
# 在开启循环之前,获取第⼀个值
FETCH cur1 INTO p_Table;
WHILE (p_c ISNOTNULL) DO
# 打印上⼀个游标值
# select p_Table;
SET @p_Table= p_Table;
# 进⾏动态语句执⾏
SET @SQL=CONCAT("select * from ",p_Table, " limit 1 ");
PREPARE smtm FROM @SQL;
EXECUTE smtm ;
DEALLOCATEPREPARE smtm;
FETCH cur1 INTO p_Table;
END WHILE;
END$$
DELIMITER ;
url编码处理mysql查看所有存储过程
有的时候上⾯这种该⽅法不管⽤,还是得⽤select count(1) from table_name;
5.5
和5.1类似的操作
5.6
如果是正常关闭,可以使⽤5.6的快速预热备份!
你只需在myf⾥,加⼊如下:
innodb_buffer_pool_dump_at_shutdown = 1
解释:在关闭时把热数据dump到本地磁盘。
innodb_buffer_pool_dump_now = 1
marquee boost 偏大解释:采⽤⼿⼯⽅式把热数据dump到本地磁盘。
innodb_buffer_pool_load_at_startup = 1
解释:在启动时把热数据加载到内存。
innodb_buffer_pool_load_now = 1
解释:采⽤⼿⼯⽅式把热数据加载到内存。
在关闭MySQL时,会把内存中的热数据保存在磁盘⾥ib_buffer_pool⽂件中,位于数据⽬录下。如果是异常关闭,就只能⽤5.1的⼿动预热⽅法了!
预热后,查看innodb_buffer_pool是不是变化较⼤
SHOW GLOBAL STATUS LIKE '%innodb_buffer%';
Innodb_buffer_pool_pages_data和Innodb_buffer_pool_pages_free是否变化较⼤!MyISAM预热
有专⽤命令进⾏预热
LOAD INDEX INTO CACHE t1, t2 IGNORE LEAVES;
将t1的全部索引加⼊cache,t2出⼦叶以外的索引加⼊缓冲
还可以对分区进⾏缓冲
LOAD INDEX INTO CACHE pt PARTITION (p1, p3);
预热之后可以查看key_buffer_size中缓冲区使⽤情况笨方法python3电子版
查看Key_blocks_unused和Key_blocks_used变化情况制作网页时我们应当规避侵权风险
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
mysql常用的存储引擎以及各个使用场景
« 上一篇
MySQLWorkbench操作详解(史上最细)
下一篇 »
发表评论