如何解决MySQL对数据量大的表操作时产生Repair with keycache问题

创造于:2010年05月29日10:36 档案在:MySQL 浏览次数:232 作者:liuhui

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文件

  1. # vi /etc/my.cnf

2,找到tmpdir 配置,如果不存在则增加一行,如下

  1. tmpdir  = /var/tmp

说明:开启临时目录,注意当前临时目录的空间大小。

3,重新执行查询语句

  1. mysql>ALTER TABLE `liuhui` DROP INDEX `postdate`

MySQL对数据量大的表操作时产生Repair with keycache问题解决后的状态应该为Repair by sorting,这样问题解决,请继续关注MySQL基础知识系列。

发表一下看法
注册一下,轻松回复,请放心,邮箱严格保密,便于更好沟通
用户名*
邮箱*
个人主页 (带http://)
内容
验证码