成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

教您如何調(diào)整MySQL查詢(xún)緩沖

數(shù)據(jù)庫(kù) MySQL
MySQL查詢(xún)緩沖相信大家都有一些了解,下文就教您如何調(diào)整MySQL查詢(xún)緩沖,希望對(duì)您能夠有所啟迪。

調(diào)整MySQL查詢(xún)緩沖的方法我們經(jīng)常會(huì)用到,下面就為您詳細(xì)介紹調(diào)整MySQL查詢(xún)緩沖方面的知識(shí),供您參考學(xué)習(xí)。

QueryCache(下面簡(jiǎn)稱(chēng)QC)是根據(jù)SQL語(yǔ)句來(lái)cache的。一個(gè)SQL查詢(xún)?nèi)绻詓elect開(kāi)頭,那么MySQL服務(wù)器將嘗試對(duì)其使用QC。每個(gè)Cache都是以SQL文本作為key來(lái)存的。在應(yīng)用QC之前,SQL文本不會(huì)被作任何處理。也就是說(shuō),兩個(gè)SQL語(yǔ)句,只要相差哪怕是一個(gè)字符(例如大小寫(xiě)不一樣;多一個(gè)空格等),那么這兩個(gè)SQL將使用不同的一個(gè)CACHE。

不過(guò)SQL文本有可能會(huì)被客戶(hù)端做一些處理。例如在官方的命令行客戶(hù)端里,在發(fā)送SQL給服務(wù)器之前,會(huì)做如下處理:
過(guò)濾所有注釋,去掉SQL文本前后的空格,TAB等字符。注意,是文本前面和后面的。中間的不會(huì)被去掉。

下面的三條SQL里,因?yàn)镾ELECT大小寫(xiě)的關(guān)系,最后一條和其他兩條在QC里肯定是用的不一樣的存儲(chǔ)位置。而第一條和第二條,區(qū)別在于后者有個(gè)注釋?zhuān)?在不同客戶(hù)端,會(huì)有不一樣的結(jié)果。所以,保險(xiǎn)起見(jiàn),請(qǐng)盡量不要使用動(dòng)態(tài)的注釋。在PHP的mysql擴(kuò)展里,SQL的注釋是不會(huì)被去掉的。也就是三條SQL會(huì)被存儲(chǔ)在三個(gè)不同的緩存里,雖然它們的結(jié)果都是一樣的。
select * FROM people where name='surfchen';
select * FROM people where /*hey~*/name='surfchen';
SELECT * FROM people where name='surfchen';

目前只有select語(yǔ)句會(huì)被cache,其他類(lèi)似show,use的語(yǔ)句則不會(huì)被cache。

因?yàn)镼C是如此前端,如此簡(jiǎn)單的一個(gè)緩存系統(tǒng),所以如果一個(gè)表被更新,那么和這個(gè)表相關(guān)的SQL的所有QC都會(huì)被失效。假設(shè)一個(gè)聯(lián)合查詢(xún)里涉及到了表A和表B,如果表A或者表B的其中一個(gè)被更新(update或者delete),這個(gè)查詢(xún)的QC將會(huì)失效。

也就是說(shuō),如果一個(gè)表被頻繁更新,那么就要考慮清楚究竟是否應(yīng)該對(duì)相關(guān)的一些SQL進(jìn)行QC了。一個(gè)被頻繁更新的表如果被應(yīng)用了QC,可能會(huì)加重?cái)?shù)據(jù)庫(kù)的負(fù)擔(dān),而不是減輕負(fù)擔(dān)。我一般的做法是默認(rèn)打開(kāi)QC,而對(duì)一些涉及頻繁更新的表的SQL語(yǔ)句加上SQL_NO_CACHE關(guān)鍵詞來(lái)對(duì)其禁用CACHE。這樣可以盡可能避免不必要的內(nèi)存操作,盡可能保持內(nèi)存的連續(xù)性。

那些查詢(xún)很分散的SQL語(yǔ)句,也不應(yīng)該使用QC。例如用來(lái)查詢(xún)用戶(hù)和密碼的語(yǔ)句——“select pass from user where name='surfchen'”。這樣的語(yǔ)句,在一個(gè)系統(tǒng)里,很有可能只在一個(gè)用戶(hù)登陸的時(shí)候被使用。每個(gè)用戶(hù)的登陸所用到的查詢(xún),都是不一樣的SQL 文本,QC在這里就幾乎不起作用了,因?yàn)榫彺娴臄?shù)據(jù)幾乎是不會(huì)被用到的,它們只會(huì)在內(nèi)存里占地方。

存儲(chǔ)塊,在本節(jié)里“存儲(chǔ)塊”和“block”是同一個(gè)意思。

QC緩存一個(gè)查詢(xún)結(jié)果的時(shí)候,一般情況下不是一次性地分配足夠多的內(nèi)存來(lái)緩存結(jié)果的。而是在查詢(xún)結(jié)果獲得的過(guò)程中,逐塊存儲(chǔ)。當(dāng)一個(gè)存儲(chǔ)塊被填滿(mǎn)之后,一個(gè)新的存儲(chǔ)塊將會(huì)被創(chuàng)建,并分配內(nèi)存(allocate)。單個(gè)存儲(chǔ)塊的內(nèi)存分配大小通過(guò)query_cache_min_res_unit參數(shù)控制,默認(rèn)為4KB。最后一個(gè)存儲(chǔ)塊,如果不能被全部利用,那么沒(méi)使用的內(nèi)存將會(huì)被釋放。如果被緩存的結(jié)果很大,那么可能會(huì)導(dǎo)致分配內(nèi)存操作太頻繁,系統(tǒng)性能也隨之下降;而如果被緩存的結(jié)果都很小,那么可能會(huì)導(dǎo)致內(nèi)存碎片過(guò)多,這些碎片如果太小,就很有可能不能再被分配使用。

除了查詢(xún)結(jié)果需要存儲(chǔ)塊之外,每個(gè)SQL文本也需要一個(gè)存儲(chǔ)塊,而涉及到的表也需要一個(gè)存儲(chǔ)塊(表的存儲(chǔ)塊是所有線程共享的,每個(gè)表只需要一個(gè)存儲(chǔ)塊)。 存儲(chǔ)塊總數(shù)量=查詢(xún)結(jié)果數(shù)量*2+涉及的數(shù)據(jù)庫(kù)表數(shù)量。也就是說(shuō),第一個(gè)緩存生成的時(shí)候,至少需要三個(gè)存儲(chǔ)塊:表信息存儲(chǔ)塊,SQL文本存儲(chǔ)塊,查詢(xún)結(jié)果存儲(chǔ)塊。而第二個(gè)查詢(xún)?nèi)绻玫氖峭粋€(gè)表,那么最少只需要兩個(gè)存儲(chǔ)塊:SQL文本存儲(chǔ)塊,查詢(xún)結(jié)果存儲(chǔ)塊。

通過(guò)觀察Qcache_queries_in_cache和Qcache_total_blocks可以知道平均每個(gè)緩存結(jié)果占用的存儲(chǔ)塊。它們的比例如果接近1:2,則說(shuō)明當(dāng)前的query_cache_min_res_unit參數(shù)已經(jīng)足夠大了。如果Qcache_total_blocks比Qcache_queries_in_cache多很多,則需要增加query_cache_min_res_unit的大小。

Qcache_queries_in_cache * query_cache_min_res_unit(sql文本和表信息所在的block占用的內(nèi)存很小,可以忽略)如果遠(yuǎn)遠(yuǎn)大于query_cache_size - Qcache_free_memory,那么可以嘗試減小 query_cache_min_res_unit的值。

調(diào)整大小
如果Qcache_lowmem_prunes增長(zhǎng)迅速,意味著很多緩存因?yàn)閮?nèi)存不夠而被釋放,而不是因?yàn)橄嚓P(guān)表被更新。嘗試加大query_cache_size,盡量使Qcache_lowmem_prunes零增長(zhǎng)。

啟動(dòng)參數(shù)
show variables like 'query_cache%' 可以看到這些信息。
query_cache_limit: 如果單個(gè)查詢(xún)結(jié)果大于這個(gè)值,則不Cache
query_cache_size: 分配給QC的內(nèi)存。如果設(shè)為0,則相當(dāng)于禁用QC。要注意QC必須使用大約40KB來(lái)存儲(chǔ)它的結(jié)構(gòu),如果設(shè)定小于 40KB,則相當(dāng)于禁用QC。QC存儲(chǔ)的最小單位是1024 byte,所以如果你設(shè)定了一個(gè)不是1024的倍數(shù)的值,這個(gè)值會(huì)被四舍五入到最接近當(dāng)前值的等于1024的倍數(shù)的值。
query_cache_type: 0 完全禁止QC,不受SQL語(yǔ)句控制(另外可能要注意的是,即使這里禁用,上面一個(gè)參數(shù)所設(shè)定的內(nèi)存大小還是會(huì)被分配);1啟用QC,可以在SQL語(yǔ)句使用 SQL_NO_CACHE禁用;2可以在SQL語(yǔ)句使用SQL_CACHE啟用。
query_cache_min_res_unit: 每次給QC結(jié)果分配內(nèi)存的大小

狀態(tài)
show status like 'Qcache%' 可以看到這些信息。
Qcache_free_blocks: 當(dāng)一個(gè)表被更新之后,和它相關(guān)的cache blocks將被free。但是這個(gè)block依然可能存在隊(duì)列中,除非是在隊(duì)列的尾部。這些blocks將會(huì)被統(tǒng)計(jì)到這個(gè)值來(lái)。可以用FLUSH QUERY CACHE語(yǔ)句來(lái)清空f(shuō)ree blocks。
Qcache_free_memory: 可用內(nèi)存,如果很小,考慮增加query_cache_size
Qcache_hits: 自mysql進(jìn)程啟動(dòng)起,cache的命中數(shù)量
Qcache_inserts: 自mysql進(jìn)程啟動(dòng)起,被增加進(jìn)QC的數(shù)量
Qcache_lowmem_prunes: 由于內(nèi)存過(guò)少而導(dǎo)致QC被刪除的條數(shù)。加大query_cache_size,盡可能保持這個(gè)值0增長(zhǎng)。
Qcache_not_cached: 自mysql進(jìn)程啟動(dòng)起,沒(méi)有被cache的只讀查詢(xún)數(shù)量(包括select,show,use,desc等)
Qcache_queries_in_cache: 當(dāng)前被cache的SQL數(shù)量
Qcache_total_blocks: 在QC中的blocks數(shù)。一個(gè)query可能被多個(gè)blocks存儲(chǔ),而這幾個(gè)blocks中的最后一個(gè)未用滿(mǎn)的內(nèi)存將會(huì)被釋放掉。例如一個(gè)QC結(jié)果要占6KB內(nèi)存,如果query_cache_min_res_unit是4KB,則最后將會(huì)生成3個(gè)blocks,第一個(gè)block用來(lái)存儲(chǔ)sql語(yǔ)句文本,這個(gè)不會(huì)被統(tǒng)計(jì)到query_cache_size里,第二個(gè)block為4KB,第三個(gè)block為2KB(先allocate4KB,然后釋放多余的2KB)。每個(gè)表,當(dāng)?shù)谝粋€(gè)和它有關(guān)的SQL查詢(xún)被CACHE的時(shí)候,會(huì)使用一個(gè) block來(lái)存儲(chǔ)表信息。也就是說(shuō),block會(huì)被用在三處地方:表信息,SQL文本,查詢(xún)結(jié)果。

show global status like 'Com_select' 可以看到未中cache的查詢(xún)次數(shù),包括讀寫(xiě)查詢(xún)。

SELECT查詢(xún)的總數(shù)量等價(jià)于:

Com_select + Qcache_hits + queries with errors found by parser

Com_select的值等價(jià)于:

Qcache_inserts + Qcache_not_cached + queries with errors found during columns/rights check
常用計(jì)算公式:

Qcache命中率:Qcache_hits / (Com_select + Qcache_hits)

Qcache碎片率:Qcache_free_blocks / Qcache_total_blocks

Query結(jié)果集平均大小:(query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache

 

 

【編輯推薦】

MySQL查詢(xún)緩存變量的相關(guān)解釋

MySQL條件查詢(xún)語(yǔ)句的用法

常用MySQL命令行工具介紹

詳解mysql命令行給列起假名

MySQL中SELECT命令的特殊用法

 

責(zé)任編輯:段燃 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-11-25 14:56:46

MySQL全文查詢(xún)

2010-10-13 16:49:56

MySql查詢(xún)時(shí)間段

2010-09-26 13:56:43

SQL遠(yuǎn)程查詢(xún)

2010-11-18 16:27:37

2010-10-12 14:53:31

mysql索引優(yōu)化

2010-11-25 13:45:07

MySQL查詢(xún)語(yǔ)句

2010-11-25 14:49:08

MySQL查詢(xún)最大值

2010-11-24 10:35:34

MySQL單表多字段

2010-10-08 11:27:34

MySql訪問(wèn)限制

2010-10-12 16:35:05

MySQL用戶(hù)權(quán)限

2010-10-12 11:07:34

MySQL存儲(chǔ)過(guò)程

2010-10-13 15:59:21

MySQL索引

2010-11-22 16:05:53

MySQL多表插入

2010-10-14 10:28:18

MySQL動(dòng)態(tài)視圖

2010-09-28 11:07:37

SQL索引

2010-10-08 10:37:00

MYSQL添加新字段

2010-10-12 10:10:55

mysql觸發(fā)器

2010-10-11 09:41:23

MySQL環(huán)境變量

2010-11-23 13:29:36

MySQL數(shù)據(jù)列類(lèi)型

2010-10-13 15:01:03

MySQL更新日志文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 男女网站免费观看 | 久久久久久a | 日韩欧美视频网站 | 神马久久av| 一本大道久久a久久精二百 国产成人免费在线 | www成人免费视频 | 亚洲欧美自拍偷拍视频 | 精品久久久久久一区二区 | 亚洲成人播放器 | 欧美精品久久久 | 成年人在线观看视频 | 美女视频三区 | www.亚洲.com | 国产精品成人国产乱 | 成人妇女免费播放久久久 | 999热在线视频| 成人国产在线视频 | 国产一在线观看 | 免费观看一级特黄欧美大片 | 日日爱夜夜操 | 日韩在线视频一区 | 一级黄色片免费在线观看 | 国产精品精品 | 日韩毛片免费看 | 免费亚洲一区二区 | 国产激情一区二区三区 | 福利片在线观看 | 99久久婷婷国产精品综合 | 亚洲精品黄色 | 亚洲精品一区二区三区免 | 精品一级 | 亚洲精视频 | 99re视频在线免费观看 | 色吊丝2288sds中文字幕 | 欧美一级免费看 | 国产精品久久国产精品 | 国产免费让你躁在线视频 | 香蕉久久久 | 成人免费看片网 | 亚洲最色视频 | 久色视频在线 |