数据库
首页 > 数据库> > 确定mysql中索引的状态

确定mysql中索引的状态

作者:互联网

我在一张有3500万条记录的桌子上创建了一个新索引,现在已经运行了将近1天.以前当我创建索引需要花费20分钟时,然而有些列是浮动的.新的idnex在varchar(45)上

我使用了processlist命令,该命令显示索引创建仍在使用以下输出

65417 | Repair with keycache | CREATE INDEX insert_index on checkins(dateinserted)

我想知道是否有人可以给我建议,以查明查询是否真的死了,只是坐在进程列表中.也许在某个阶段出现了问题,我不知道.

谢谢

解决方法:

您的索引正在构建,但速度很慢.

MySQL有两种可用于构建索引的方法:

>通过排序.这是最快的方法,但占用了大量内存.
>通过keycache.慢,慢,慢 – 但耗尽了很少的记忆.

keycache方法有点像插入排序:一次将值插入索引中.这与使用INSERT语句向表中添加行时服务器使用的方法相同.

排序方法使用quicksort对所有值进行排序,然后从中构建索引.它非常快,但需要大量内存和临时磁盘空间.

某些服务器变量可以增加排序方法的可用空间,因此允许它使用更大的表.请参阅myisam_max_sort_file_size

http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_myisam_max_sort_file_size

在Linux上,您可以通过检查用于构建索引的临时文件的大小来跟踪索引修复的进度.以下命令将列出MySQL进程保持打开的所有文件:

sudo ls -l /proc/[mysql-pid]/fd  

然后查看名称中带有哈希的那些大小 – 这些是临时文件.

标签:mysql,database,database-indexes
来源: https://codeday.me/bug/20190726/1545230.html