MySQL引數DELAY_KEY_WRITE的詳細說明

Michael_DD發表於2015-02-10
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部落格 ” ,連結:http://blog.itpub.net/29500582/viewspace-1432048/,如需轉載,請註明出處,否則將追究法律責任。

相關文章