MySQL快取分類

2021-09-24 04:22:46 字數 2569 閱讀 2916

mysql快取分類

innodb緩衝池

innodb日誌檔案和myisam資料的作業系統快取

myisam鍵快取

查詢快取

無法手工配置的快取,例如 二進位制日誌,表定義檔案的作業系統快取

其它快取,通常不需要太多記憶體

innodb緩衝池 (innodb_buffer_pool_size)

作用:1.快取的物件包括:資料行,索引,插入緩衝,鎖,以及內部資料結構。

2.利用緩衝池來幫助延遲寫入,可以合併多次寫入,順序寫會(儲存裝置)

查詢innodb緩衝池的大小,單位是位元組

show variables like 'innodb_buffer_pool_size';

innodb_max_dirty_pages_pct變數影響髒頁的數量,

檢視innodb_max_dirty_pages_pct的設定 : show variables like 'innodb_max_dirty_pages_pct'

當髒頁超過innodb_max_dirty_pages_pct指定的百分比之後,後台執行緒啟動(快速刷寫模式)將髒頁刷寫入磁碟

mysql記憶體不足時,有乙個類似於sqlserver的lazywrite的後台執行緒定時將髒頁重新整理入磁碟,

並且清理髒頁占用的記憶體空間,給其他資料(需要載入記憶體的資料)使用。

當事務日誌沒有空間的時候,innodb將進入激烈刷寫模式,大日誌可以提公升效能的原因(?)

預熱緩衝區:

可以理解成資料庫啟動的時候將資料從磁碟載入到快取區中,以提公升資料的訪問效能

兩種預熱緩衝區的方法

1.percina server

2.init_file設定,也即啟動後指定init_file裡面的sql,將sql語句中指定的資料寫入緩衝區

innodb緩衝池越大,與預熱和和髒頁重新整理會時間越久。

myisam鍵快取(key caches) (key_buffer_size)

作用:myisam鍵快取又稱鍵緩衝,myisam表只快取索引不快取資料,myisam鍵快取就是快取的索引, 資料快取依賴於作業系統, 和鍵快取沒有關係。

預設只有乙個myisam鍵快取(池)

配置選項key_buffer_size

設定key_buffer_size時參考索引的大小,key_buffer_size的值沒必要設定的比索引更大, 或者不超過作業系統快取保留總記憶體的25%-50%

mysql缺省會將所有索引都快取在預設鍵快取中,每個myisam鍵快取(池)有指定的大小,可以建多個key_buffer_size來快取索引

配置方法,在配置檔案中加入

key_buffer_1.key_buffer_size = 1g

key_buffer_2.key_buffer_size = 1g

加上預設的乙個,一共有三個key_buffer_size

指定索引到鍵快取:

快取表的索引到指定緩衝區:cache index t1,t2 in key_buffer_1

或者在init_file中配置

loda index into cache t1,t2(被分配在預設緩衝區)

鍵快取使用率計算:

100-((key_buffer_unused*key_cache_block_size)*100/key_buffer_size)

其它:1.myisam使用作業系統記憶體來快取資料,資料往往比索引要大,因此要預留更多的記憶體給作業系統快取,而不是鍵快取

2.即使沒有使用myisam表,依舊要設定key_buffer_size為乙個較小的值(比如32m),mysql伺服器可能在內部使用myisam表

執行緒快取(thread_cache_size)

作用:當連線關閉後,釋放的執行緒被快取起來,處於備用狀態,

當有新的連線建立時,可以直接使用快取中快取的執行緒,以提高連線請求的效率,不用為每個連線建立新的執行緒

消費方式:

新進來的連線從快取中占用乙個處於快取狀態的執行緒(被占用後從快取中刪除),

當連線關閉後,如果執行緒快取還有空間的話,將當前執行緒歸還到快取執行緒中,如果快取執行緒沒有空間,則銷毀這個執行緒

show variables like 'thread_cache_size' 指定了快取中可儲存的執行緒的個數

太高的快取數, 作業系統不能處理, 大部分處於休眠狀態; 太低的快取數, 會導致執行緒的頻繁建立和銷毀, 一般使用預設配置就可以了, 除非有非常高的併發訪問, 增加快取數, 提公升訪問效率。

單位是快取的執行緒的個數, 每個執行緒占用的記憶體空間為256kb左右

表快取  mysql表快取包含

開啟表的快取(table_open_cache) :解析 .frm 檔案的結果、 包含一些其他資料, 其資料是每個執行緒、表使用的。

定義表的快取(table_definition_cache) : 是表的定義, 是全域性的、可以被所有連線共享的, 最好是在記憶體充足, 數量不是特別大時, 快取所有表的定義。

innodb 資料字典表

作用:  

快取innodb的表定義資訊或者資料字典

每當開啟一張innodb表的時候,就會快取這個表的定義到資料字典,但是表關閉後並不會從快取中移除

MySQL快取分類

mysql快取分類 innodb緩衝池 innodb日誌檔案和myisam資料的作業系統快取 myisam鍵快取 查詢快取 無法手工配置的快取,二進位制日誌,表定義檔案的作業系統快取 其它快取,通常不需要太多記憶體 innodb緩衝池 作用 1.快取的物件包括 資料行,索引,插入緩衝,鎖,以及內部資...

mysql前端的快取 MySQL快取分類和配置

讀書筆記,待補充完善 mysql快取分類 innodb緩衝池 innodb日誌檔案和myisam資料的作業系統快取 myisam鍵快取 查詢快取 無法手工配置的快取,二進位制日誌,表定義檔案的作業系統快取 其它快取,通常不需要太多記憶體 innodb緩衝池 作用 1.快取的物件包括 資料行,索引,插...

redis快取分類

場景 前端需要根據條數num限制獲取分類,快取為8小時,減少訪問效能 實現原理 獲取分類列表時,先判斷是否能在快取中得到資料,如果有直接展示,如果沒有,要先去查資料,然後再快取。新增分類時要重新處理快取,新增成功後,先把清理快取,再查詢資料庫快取新的資料。遇到問題 當新增成功後,快取為10條資料,這...