MySQL基础知识第二期,如何解决MySQL对数据量大的表操作时产生Repair with keycache问题,主要讨论问题产生的原因与解决方法。
问题描述
执行一条影响行数非常大数据库查询,如数据表的行数有几百万行,但需要更新一条索引或查询一条语句,如果数据库的临时空间太小,就会产生Repair with keycache问题。实例如下
mysql> show processlist\G
*************************** 1. row ***************************
Id: 91
User: root
Host: localhost
db: test
Command: Query
Time: 405
State: Repair with keycache
Info: ALTER TABLE `liuhui` DROP INDEX `postdate`
1 row in set (0.01 sec)
如 上查看MySQL的进程列表,发现执行的一条SQL语句ALTER TABLE `liuhui` DROP INDEX `postdate`,删除数据表liuhui的索引postdate,由于liuhui这张数据表非常大,就产生了Repair with keycache问题。
解决方法
产生Repair with keycache问题主要是临时空间不够造成的,因此应该增大临时空间的大小,其状态应该如:Repair by sorting
1,打开my.cnf文件
- # vi /etc/my.cnf
2,找到tmpdir 配置,如果不存在则增加一行,如下
- tmpdir = /var/tmp
说明:开启临时目录,注意当前临时目录的空间大小。
3,重新执行查询语句
- mysql>ALTER TABLE `liuhui` DROP INDEX `postdate`
MySQL对数据量大的表操作时产生Repair with keycache问题解决后的状态应该为Repair by sorting,这样问题解决,请继续关注MySQL基础知识系列。
实践是一个过程,记录是一种方式,无数个思考的点滴托起
