詳細(xì)說明MySQL緩存分類與設(shè)置
發(fā)表時(shí)間:2023-09-04 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]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í)。