關於INNODB引擎的一些學習概要 1)

2021-07-31 00:19:46 字數 1969 閱讀 6168

innodb儲存引擎第二版讀書筆記1

1、innodb 狀態檢視 : show engine innodb status\g;

2、io thread innodb中預設有4個read io thread和4個write io thread,還有1個log  io thread和1個插入快取(insert buffer thread)

可以通過 innodb_read_io_threads 和 innodb_write_io_threads進行調整,這個要根據磁碟io承載和資料庫壓力來調整。

3、可以為 undolog 處理的 purge threads 單獨配置乙個程序,,配置為 innodb_purge_threads 設定

4、可以通過innodb_page_cleaners配置增加innodb 髒頁fix到磁碟的工作執行緒,讓髒頁重新整理對查詢減少阻塞(mysql 5.7)

5、關於緩衝池,緩衝池引數 innodb_buffer_pool_size 調整整個緩衝池的大小,這個引數需要根據機器配置來設定,一般為機器總記憶體的1/3,

6、innodb_buffer_pool_instances 來配置緩衝池切分為多個緩衝池

7、innodb緩衝池是使用lru演算法來進行管理的,緩衝池中的頁大小為16kb,innodb中lru演算法有所修改,最新訪問的資料會被移動到midpoint位置,通常在整個列表的5/8處,可以通過 innodb_old_blocks_pct進行控制,show variables like 'innodb_old_blocks_pct'\g 的單位為 百分比,標示距離列表尾端的百分比。

8、引數 innodb_old_blocks_time 設定了當資料在lru中被訪問時,需要過多久才把這個頁從mid 位置放到lru 熱端。

9、show engine innodb status 命令中的 buffer pool hit rate 表示緩衝池命中率,這個值如果低於95%,則要注意是不是因為全表掃瞄導致lru列表被汙染問題。

10、可以通過 innodb_buffer_pool_status 檢視緩衝池狀態

11、通過innodb_buffer_page_lru檢視 lru列表的狀態

12、重做日誌 redo log 的緩衝池大小通過引數 innodb_log_buffer_size 設定,當mast thread發現redo log 的緩衝池大小小於1/2的時候,就會將redo log buff 重新整理到重做日誌檔案中

13、關於緩衝池中的髒頁,innodb 有一套checkpoint 機制來管理,

14、master thread 對於將髒頁重新整理到磁碟,根據 innodb_max_dirty_pages_pct 這個引數來判斷,這個值最佳為 75-80,如果髒頁超過這個百分比,則重新整理100個髒頁。innodb 1.1 以後根據 innodb_adaptive_flushing 來更改是不是自適應重新整理,buf_flush_get_desired_flush_rate來自動判斷一次重新整理多少個髒頁合適。

15、非主鍵(聚族索引)和唯一索引,mysql會把輔助索引使用 insert buffer,insert buffer 預設最大只能占用 innodb_buffer_pool 1/2的大小,innodb 1.1 以後增加了change buffer,分別是 insert buffer, delete buffer, purge buffer,可以通過 innodb_change_buffering 進行配置開啟的型別,通過 innodb_change_buffer_max_size 控制change buffer 的大小。

16、insert buffer 內部的實現為一顆b+tree,innodb 1.1以後整個資料庫只有一顆insert buffer b+tree

17、innodb 1.1 以後通過innodb_use_native_aio 引數開啟對 native aio的支援

18、關於啟動與恢復,innodb_fast_shutdown 引數來控制啟動的時候mysql是否需要重新整理髒頁回磁碟,還有innodb_force_recovery引數判斷是否啟動的時候需要回滾日誌。

關於innodb的一些理解

innodb一致性讀的理解 如果此時的隔離級別為rr 事務開啟時不會建立read view,而是在事務中出現第乙個select語句的時候建立read view這個資料結構,這個資料結構包含以下的幾個字段 1 up limit id 代表建立這個read view時當前全域性事務中已經提交的事務的最後...

關於日誌的一些學習

為什麼要打日誌 在日常開發中 日誌起到至關重要的作用 因為專案上線後不允許你除錯,你只能通過log來分析問題。專案出問題時,你要能拿出log證明自己負責的部分沒有問題,如果是自己的問題,要從log裡快速找出錯誤原因 關於log級別 曾經在面試的時候被問到過的問題 直到忙到今天才有時間對這個問題進行詳...

關於HTTP的一些學習

第一次進入乙個 時,本地無快取,response成功返回200 伺服器在response header裡,設定了etag和last modify,如下圖 etag欄位將資源唯一性的標識,如果資源有更新,etag值也將變化 last modify表明了在伺服器端最後發生改變的時間 瀏覽器儲存這個eta...