InnoDB儲存引擎——重新整理鄰接頁、啟動、關閉和恢復
重新整理鄰接頁
InnoDB儲存引擎還提供了Flush Neighbor Page(重新整理鄰接頁)的特性。其工作原理為:當重新整理一個髒頁時,InnoDB儲存引擎會檢測該頁所在區(extent)的所有頁,如果是髒頁,那麼一起進行重新整理。
有兩個問題:
1)是不是可能將不怎麼髒的頁進行了寫入,而該頁之後又會 很快變成髒頁?
2)固態硬碟有著較高的IOPS,是否還需要這個特性?
所以,InnoDB1.2.x版本開始提供了引數innodb_flush_neighbors,用來控制是否啟用該特性。對於傳統機械硬碟建議啟用該特性,而對於固態硬碟有著較高的IOPS效能的磁碟,則建議將該引數設定為0,即關閉該特性。
啟動、關閉和恢復
InnoDB儲存引擎是MySql資料庫的儲存引擎之一,因此InnoDB儲存引擎的啟動和關閉,或者說MySql資料庫伺服器的啟動和關閉過程對InnoDB儲存引擎的處理過程。
在關閉時,引數 innodb_fast_shutdown影響著表的InnoDB儲存引擎的行為,該引數可以為0,1,2,預設值為1;
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1 |
+----------------------+-------+
1 row in set (0.00 sec)
(1)為0時,表示在MySql資料庫關閉時,InnoDB需要完成所有的full purge和merge insert buffer,並且將所有的髒頁重新整理回磁碟。這需要一些時間,有時甚至需要幾個小時來完成。如果在進行InnoDB升級時,必須將這個引數設定為0,然後再關閉資料庫。
(2)1是引數 innodb_fast_shutdown的預設值,表示不需要完成上述的full purge和merge insert buffer操作,但是在緩衝池中的一些資料髒頁還是會重新整理回磁碟。
(3)2表示不完成full purge和merge insert buffer操作,也不將緩衝池中的資料髒頁寫回磁碟,而是將日誌都寫入日誌檔案。這樣不會有任何事務的丟失,但是下次MySql資料庫啟動時,會進行恢復操作。
當正常關閉MySql資料庫時,下次的啟動應該會非常正常。但是如果沒有正常地關閉資料庫,如用kill命令關閉資料庫,在MySql資料庫執行中重啟了伺服器,或者在關閉資料庫時,將引數innodb_fast_shutdown設定為了2,下次MySql資料庫啟動時都會對InnoDB儲存引擎的表進行恢復操作。
引數innodb_force_recovery影響了整個InnoDB儲存引擎恢復的狀態。該引數預設值為0,表示當發生需要恢復時,進行所有的恢復操作,當不能進行有效恢復時,如資料頁發生了corruption,MySql資料庫可能發生當機(crash),並把錯誤寫入錯誤日誌中去。
mysql> show variables like 'innodb_force_recovery';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_force_recovery | 0 |
+-----------------------+-------+
1 row in set (0.00 sec)
某些情況下,可能並不需要進行完整的恢復操作,因為使用者自己知道怎麼進行恢復。比如在對一個表進行alter table操作時發生了意外,資料庫重啟時會對InnoDB表進行回滾操作,對於一個大表來說這需要很長時間,可能是幾個小時。這時使用者可以自行進行恢復,如可以把表刪除,從備份中重新匯入資料到表,可能這些操作的速度要遠遠快於回滾操作。
引數innodb_force_recovery還可以設定為6個非零值:1-6,大的數字表示包含了前面所有小數字表示的影響。具體情況如下:
1:忽略檢查到的corrupt頁。
2:阻止Master Thread執行緒的執行,如Master Thread執行緒需要進行full purge,而這會導致crash。
3:不進行事務的回滾操作。
4:不進行插入緩衝的合併操作。
5:不檢視撤銷日誌(Undo Log),InnoDB儲存引擎會將未提交的事務視為已提交。
6:不進行前滾的操作。
引數innodb_force_recovery的值大於0時,可以對錶進行select,creaete和drop操作,但是insert,update和delete這類DML操作是不允許的。
相關文章
- Innodb關鍵特性之重新整理鄰接頁
- MyISAM 儲存引擎,Innodb 儲存引擎儲存引擎
- Innodb儲存引擎儲存引擎
- InnoDB儲存引擎——表儲存引擎
- MySQL InnoDB儲存引擎MySql儲存引擎
- 圖的儲存結構——鄰接矩陣與鄰接表矩陣
- InnoDB儲存引擎簡介儲存引擎
- InnoDB儲存引擎檔案儲存引擎
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- Mysql技術內幕InnoDB儲存引擎讀書筆記--《二》InnoDB儲存引擎MySql儲存引擎筆記
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- InnoDB儲存引擎——兩次寫儲存引擎
- InnoDB儲存引擎——記憶體儲存引擎記憶體
- InnoDB儲存引擎——Checkpoint技術儲存引擎
- InnoDB儲存引擎——插入緩衝儲存引擎
- InnoDB儲存引擎——非同步IO儲存引擎非同步
- WPS異常關閉怎麼恢復檔案?Wps文件儲存及自動儲存方法
- Mysql技術內幕InnoDB儲存引擎讀書筆記--《八》備份與恢復MySql儲存引擎筆記
- MySQL 引擎特性:InnoDB崩潰恢復MySql
- 你真的瞭解Innodb儲存引擎?儲存引擎
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC
- 14.1 InnoDB 儲存引擎介紹儲存引擎
- innodb儲存引擎備份工具--Xtrabackup儲存引擎
- 第二章 InnoDB儲存引擎儲存引擎
- MySQL三種InnoDB、MyISAM和MEMORY儲存引擎對比MySql儲存引擎
- MySQL儲存引擎之MyIsam和Innodb總結性梳理MySql儲存引擎
- 【儲存資料恢復案例】儲存斷電後無法成功重啟,虛擬機器無法啟動-資料恢復資料恢復虛擬機
- [Mysql技術內幕]Innodb儲存引擎MySql儲存引擎
- InnoDB儲存引擎鎖機制(一、案例)儲存引擎
- innodb儲存引擎鎖的實現(一)儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- InnoDB儲存引擎——後臺執行緒儲存引擎執行緒
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- MySQL技術內幕:InnoDB儲存引擎MySql儲存引擎
- _DataStructure_C_Impl:圖的鄰接矩陣儲存ASTStruct矩陣
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎