重新整理記憶體池資料,保證記憶體快取的是最新的資料,將已修改的資料檔案重新整理到磁碟中,資料庫發生異常時innodb能恢復至正常執行狀態.
負責將緩衝池中的資料非同步重新整理到磁碟,保證資料的一致性,包括髒頁的重新整理,合併插入緩衝,undo頁的**.
async io處理io請求,四種thread: write, read, insert buffer, log io thread, 可設定: innodb_read_io_threads, innodb_write_io_threads
來**已經使用並分配的undo頁.
髒頁重新整理的操作放在該執行緒中執行.
緩衝池大小可配: innodb_buffer_pool_size
緩衝池個數可配: innodb_buffer_pool_instances
改進lru演算法,該演算法為midpoint insertion strategy,預設midpoint的位於列表的5/8處,該位置可以通過innodb_old_blocks_pct控制.
引數innodb_old_blocks_time表示頁讀取到mid位置後需要等待多久才會被加入到lru的熱端.
髒頁既存在於lru list, flush list中,lur列表是用來管理頁列表的可用性,而flush列表是用來管理將頁重新整理回磁碟,兩者互不影響.
重做日誌緩衝池:可配置引數innodb_log_buffer_size,預設為8mb,以下三種將快取池內容重新整理到磁碟中的情況:
1) master thread每一秒將重做日誌緩衝重新整理到重做日誌中;
2) 每個事務提交時會將重做日誌緩衝重新整理到重做日誌中;
3) 當重做日誌緩衝池剩餘空間小於1/2時,重做日誌緩衝重新整理到重做日誌中.
兩種checkpoint: sharp checkpoint(資料庫關閉時將所有髒頁重新整理會磁碟), fuzzy checkpoint.
fuzzy checkpoint有以下幾種:
master thread checkpoint
fulsh_lru_list checkpoint
async/sync flush checkpoint
dirty page too much checkpoint
內部分為多個loop: loop, background loop, flush loop, suspend loop;
每秒操作:
日誌緩衝重新整理到磁碟,即使這個事務還沒有提交(總是);
合併插入緩衝(可能);
至多重新整理100個髒頁到磁碟(可能);
若當前無使用者活動,切換到background loop.
每10秒操作:
重新整理100個髒頁到磁碟;(可能)
合併至多5個插入緩衝;(總是)
將日誌緩衝重新整理到磁碟;(總是)
刪除無用的undo頁;(總是)
重新整理100個或10個髒頁到磁碟(總是).
刪除無用的undo頁(總是);
合併20個插入緩衝(總是);
跳出主迴圈(總是);
不斷重新整理100個頁直到符合條件(可能,跳轉到flush loop完成).
innodb_io_capacity
innodb_max_dirty_pages_pct
innodb_adaptive_flushing
innodb_purge_batch_size
master thread偽**:
從master thread中分離出重新整理髒頁的操作至乙個單獨的page cleaner thread.
適用物件: 非唯一的輔助索引
內部實現: b+樹
ahi有乙個要求:對這個頁的連續訪問模式必須是一樣的
INNODB引擎概述
innodb儲存引擎是oltp應用中核心表的首選儲存引擎。innodb儲存引擎包含在所有mysql資料庫的二進位制發行版本中。早期其版本隨著mysql資料庫的更新而更新。從mysql5.1開始,mysql資料庫允許儲存引擎開發商以動態形式載入引擎,這樣儲存引擎的更新可以不受mysql資料庫版本的限制...
儲存引擎 MyIsam概述
myisam是mysql5.5之前預設的儲存引擎,缺點是 不支援事務,不支 持外來鍵,優點 批量插入和查詢資料快,不支援事務安全或者主要以查詢,插入為主的業務表的建立,可以定義為myisam儲存引擎。從上可知,獲取內容時,後面的空格都被過濾掉,前面的空格保留了。動態表中包含變長字段,記錄長度不是固定...
mysql儲存引擎概述
mysql儲存引擎特點 為表選擇儲存引擎 mysql create table test a int engine innodb 檢視有多少種儲存引擎 mysql show engines更改表的儲存引擎 mysql alter table tbl engine innodb 主要儲存引擎 inno...