讀書筆記,待補充完善 MySQL緩存分類 InnoDB緩衝池 InnoDB日誌文件和MyIsAM數據的操作系統緩存 MyIsAM鍵緩存 查詢緩存 無法手工配置的緩存,二進位日誌,表定義文件的操作系統緩存 其它緩存,通常不需要太多記憶體 InnoDB緩衝池 作用: 1.緩存的對象包括:數據行,索引,插入 ...
讀書筆記,待補充完善
MySQL緩存分類
InnoDB緩衝池
InnoDB日誌文件和MyIsAM數據的操作系統緩存
MyIsAM鍵緩存
查詢緩存
無法手工配置的緩存,二進位日誌,表定義文件的操作系統緩存
其它緩存,通常不需要太多記憶體
InnoDB緩衝池
作用:
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語句中指定的數據寫入緩衝區
MyisAM鍵緩存(key caches)
作用:
MyisAM鍵緩存又稱鍵緩衝,MyisAM表只緩存索引不緩存數據,MyisAM鍵緩存就是緩存的索引
相關參數:
預設只有一個MyisAM鍵緩存(池)
配置選項key_buffer_size
設置key_buffer_size時參考索引的大小,key_buffer_size的值沒必要設置的比索引更大
或者不超過操作系統緩存保留總記憶體的25%-50%
設置時參考索引欄位的大小:select sum(index_length) from information_schema.`TABLES`
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指定了緩存中可保存的線程的個數
每個線程占用的記憶體空間為256kb左右,
除非有非常高的併發訪問,否則不應該,一般不需要配置這個值
單位是緩存的線程的個數
show variables like 'thread_cache_size'
每個線程占用的記憶體空間為256kb左右,
表緩存
作用:
主要是跟MyisAM表有關,緩存的是表的.frm解析結果和一些其他數據,
緩存之後就提高訪問表的效率。對於MyIsAM表,表緩存之後可以避免修改MyisAM頭文件來標記表正在被使用
show variables like '%table_open_cache%';
InnoDB 數據字典表
作用:
緩存InnoDB的表定義信息,
每當打開一張InnoDB表的時候,就會緩存這個表的定義到數據字典,但是表關閉後並不會從緩存中移除