ITPub博客

首页 > 数据库 > MySQL > MySQL参数DELAY_KEY_WRITE的详细说明

MySQL参数DELAY_KEY_WRITE的详细说明

原创 MySQL 作者:Michael_DD 时间:2015-02-10 10:31:55 0 删除 编辑
MySQL参数DELAY_KEY_WRITE的详细说明

DELAY_KEY_WRITE 延迟更新索引

      MySQL参数DELAY_KEY_WRITE的相关知识是本文我们主要要介绍的内容,DELAY_KEY_WRITE是指在表关闭之前,将对表的update操作指跟新数据到磁盘,而不更新索引到磁盘,把对索引的更改记录在内存。这样MyISAM表可以使索引更新更快。在关闭表的时候一起更新索引到磁盘。

使用:create table的时候,指定DELAY_KEY_WRITE。

当表已经存在的时候:ALTER TABLE table_name DELAY_KEY_WRITE= 1。

适用范围:表有update操作,这个参数的优势会很好的体现出来。因为这个参数能延迟更新索引到表关闭。当我们需要经常跟新一个大表的时候,可以考虑使用这个参数。

说明:表关闭会在什么时候发生?你可以理解成当flash table的时候,表将关闭。那么有2种情况将会发生flush table:

当cache 满了一个新的thread试图打开一个表的时候,那个表没有在cache;
当cache里的表数比table_cache多时thread不在使用表;
这个2种情况将会flush table。

当然,你也可以直接设置启动参数flush_time ,设置每多少时间flush table一次。

需要注意的是:当DELAY_KEY_WRITE使用的时候,如果出现重启或者掉电等情况,会导致在cache的索引update没来得及更新,所以必须在启动参数加上 --myisam-recover,这样在你启动mysql的时候会检查你的表并同步表和索引.或者在重启服务器之前运行myisamchk。(然而,即使在这种情况下,应通过使用DELAY_KEY_WRITE保证不丢失数据,因为关键字信息总是可以从数据行产生)。如果你使用该特性,你应用--myisam-recover选项启动服务器,为所有MyISAM表添加自动检查。

mysql> alter table nagios_servicechecks DELAY_KEY_WRITE=1;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table nagios_hostchecks DELAY_KEY_WRITE=1;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> flush table;
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql>
mysql>
mysql> exit
Bye
[root@mysqltest ~]#
[root@mysqltest ~]#
[root@mysqltest ~]# service mysqld restart
mysqld: unrecognized service
[root@mysqltest ~]# service mysql restart
Shutting down MySQL.....[  OK  ]
Starting MySQL.[  OK  ]
[root@mysqltest ~]# service mysql restart --myisam-recover
Shutting down MySQL...[  OK  ]
Starting MySQL.[  OK  ]
[root@mysqltest ~]#




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29500582/viewspace-1432048/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-02-22

  • 博文量
    326
  • 访问量
    2671970