詳細介紹MySQL緩存分類和配置

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表的時候,就會緩存這個表的定義到數據字典,但是表關閉后并不會從緩存中移除

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享