詳細說明MySQL緩存分類與設置
發表時間:2023-09-04 來源:明輝站整理相關軟件相關文章人氣:
[摘要]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表的時候,就會緩存這個表的定義到數據字典,但是表關閉后并不會從緩存中移除
以上就是詳細介紹MySQL緩存分類和配置的詳細內容,更多請關注php中文網其它相關文章!
學習教程快速掌握從入門到精通的SQL知識。