明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

詳細(xì)說明MySQL緩存分類與設(shè)置

[摘要]MySQL緩存分類   InnoDB緩沖池   InnoDB日志文件和MyIsAM數(shù)據(jù)的操作系統(tǒng)緩存   MyIsAM鍵緩存   查詢緩存   無法手工配置的緩存,二進(jìn)制日志,表定義文件的操作系統(tǒng)緩存   其它緩存,通常不需要太多內(nèi)存InnoDB緩沖池    作用:    1.緩存的對(duì)...
MySQL緩存分類

  InnoDB緩沖池
  InnoDB日志文件和MyIsAM數(shù)據(jù)的操作系統(tǒng)緩存
  MyIsAM鍵緩存
  查詢緩存
  無法手工配置的緩存,二進(jìn)制日志,表定義文件的操作系統(tǒng)緩存
  其它緩存,通常不需要太多內(nèi)存

InnoDB緩沖池 
  作用:
    1.緩存的對(duì)象包括:數(shù)據(jù)行,索引,插入緩沖,鎖,以及內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
    2.利用緩沖池來版主延遲寫入,可以合并多次寫入,順序?qū)憰?huì)(存儲(chǔ)設(shè)備)
  相關(guān)參數(shù):
    查詢InnoDB緩沖池的大小,單位是字節(jié)
    show variables like 'innodb_buffer_pool_size';
    innodb_max_dirty_pages_pct變量影響臟頁(yè)的數(shù)量,
    查看innodb_max_dirty_pages_pct的設(shè)置
    show variables like 'innodb_max_dirty_pages_pct'
    當(dāng)臟頁(yè)超過innodb_max_dirty_pages_pct指定的百分比之后,后臺(tái)線程啟動(dòng)(快速刷寫模式)將臟頁(yè)刷寫入磁盤
    MySQL內(nèi)存不足時(shí),有一個(gè)類似于sqlserver的lazywrite的后臺(tái)線程定時(shí)將臟頁(yè)刷新入磁盤,
    并且清理臟頁(yè)占用的內(nèi)存空間,給其他數(shù)據(jù)(需要載入內(nèi)存的數(shù)據(jù))使用。
    當(dāng)事務(wù)日志沒有空間的時(shí)候,InnoDB將進(jìn)入激烈刷寫模式,大日志可以提升性能的原因(?)
  預(yù)熱緩沖區(qū):
    可以理解成數(shù)據(jù)庫(kù)啟動(dòng)的時(shí)候?qū)?shù)據(jù)從磁盤加載到緩存區(qū)中,以提升數(shù)據(jù)的訪問性能
    兩種預(yù)熱緩沖區(qū)的方法
    1.Percina Server
    2.Init_file設(shè)置,也即啟動(dòng)后指定Init_file里面的sql,將sql語(yǔ)句中指定的數(shù)據(jù)寫入緩沖區(qū)

MyisAM鍵緩存(key caches)
  作用:
    MyisAM鍵緩存又稱鍵緩沖,MyisAM表只緩存索引不緩存數(shù)據(jù),MyisAM鍵緩存就是緩存的索引
  相關(guān)參數(shù):
    默認(rèn)只有一個(gè)MyisAM鍵緩存(池)
    配置選項(xiàng)key_buffer_size
    設(shè)置key_buffer_size時(shí)參考索引的大小,key_buffer_size的值沒必要設(shè)置的比索引更大
    或者不超過操作系統(tǒng)緩存保留總內(nèi)存的25%-50%
    設(shè)置時(shí)參考索引字段的大。簊elect sum(index_length) from information_schema.`TABLES`
    mysql默認(rèn)回將所有索引都換粗在默認(rèn)鍵緩存中,
    每個(gè)MyisAM鍵緩存(池)有指定的大小,可以建多個(gè)key_buffer_size來緩存索引
    配置方法,在配置文件中加入
    key_buffer_1.key_buffer_size = 1G
    key_buffer_2.key_buffer_size = 1G
    加上默認(rèn)的一個(gè),一共有三個(gè)key_buffer_size
  指定索引到鍵緩存:
    緩存表的索引到指定緩沖區(qū):cache index t1,t2 in key_buffer_1
    或者在init_file中配置
    LODA INDEX INTO CACHE t1,t2(被分配在默認(rèn)緩沖區(qū))
  鍵緩存使用率計(jì)算:
    100-((key_buffer_unused*key_cache_block_size)*100/key_buffer_size)
  其它:
    1.MyisAM使用操作系統(tǒng)內(nèi)存來緩存數(shù)據(jù),數(shù)據(jù)往往比索引要大,因此要預(yù)留更多的內(nèi)存給操作系統(tǒng)緩存,而不是鍵緩存
    2.即使沒有使用MyisAM表,依舊要設(shè)置key_buffer_size為一個(gè)較小的值(比如32M),mysql服務(wù)器可能在內(nèi)部使用MyisAM表

線程緩存
  作用:
    當(dāng)連接關(guān)閉后,釋放的線程被緩存起來,處于備用狀態(tài),
    當(dāng)有新的連接創(chuàng)建時(shí),可以直接使用緩存中緩存的線程,以提高連接請(qǐng)求的效率
    不用為每個(gè)連接創(chuàng)建新的線程
  消費(fèi)方式:
    新進(jìn)來的連接從緩存中占用一個(gè)處于緩存狀態(tài)的線程(被占用后從緩存中刪除),
    當(dāng)連接關(guān)閉后,如果線程緩存還有空間的話,將當(dāng)前線程歸還到緩存線程中,如果緩存線程沒有空間,則銷毀這個(gè)線程
  相關(guān)參數(shù):
    thread_cache_size指定了緩存中可保存的線程的個(gè)數(shù)
    每個(gè)線程占用的內(nèi)存空間為256kb左右,
    除非有非常高的并發(fā)訪問,否則不應(yīng)該,一般不需要配置這個(gè)值
    單位是緩存的線程的個(gè)數(shù)
    show variables like 'thread_cache_size'
    每個(gè)線程占用的內(nèi)存空間為256kb左右,

表緩存
  作用:
    主要是跟MyisAM表有關(guān),緩存的是表的.frm解析結(jié)果和一些其他數(shù)據(jù),
    緩存之后就提高訪問表的效率。對(duì)于MyIsAM表,表緩存之后可以避免修改MyisAM頭文件來標(biāo)記表正在被使用
    show variables like '%table_open_cache%';

InnoDB 數(shù)據(jù)字典表
  作用:  
    緩存InnoDB的表定義信息,
    每當(dāng)打開一張InnoDB表的時(shí)候,就會(huì)緩存這個(gè)表的定義到數(shù)據(jù)字典,但是表關(guān)閉后并不會(huì)從緩存中移除

以上就是詳細(xì)介紹MySQL緩存分類和配置的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。