這篇文章主要講解了“怎么配置MySQL緩存提高緩存命中率”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么配置MySQL緩存提高緩存命中率”吧!
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)高邑,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108一、什么時(shí)候應(yīng)用系統(tǒng)會(huì)從緩存中獲取數(shù)據(jù)?
數(shù)據(jù)庫從服務(wù)器上讀取數(shù)據(jù)時(shí),可以從硬盤的數(shù)據(jù)文件中獲取數(shù)據(jù),也可以從數(shù)據(jù)庫緩存中讀取數(shù)據(jù)?,F(xiàn)在數(shù)據(jù)庫管理員需要搞清楚的是,在什么樣的情況下,系統(tǒng)是從緩存中讀取數(shù)據(jù),而不是從硬盤的數(shù)據(jù)文件中讀取數(shù)據(jù)?
簡單的說,數(shù)據(jù)緩存就是內(nèi)存中的一塊存儲(chǔ)區(qū)域,其存儲(chǔ)了用戶的SQL文本以及相關(guān)的查詢結(jié)果。通常情況下,用戶下次查詢時(shí),如果所使用的SQL文本是相 同的,并且自從上次查詢后,相關(guān)的紀(jì)錄沒有被更新過,此時(shí)數(shù)據(jù)庫就直接采用緩存中的內(nèi)容。從這個(gè)原則中,可以看到如果要直接使用緩存中的數(shù)據(jù),至少要滿足 以下幾個(gè)條件。
一是所采用的SQL文本是相同的。當(dāng)前后兩次用戶使用了相同的SQL語句(假設(shè)不考慮其他條件),則服務(wù)器會(huì)從緩存中讀 取結(jié)果,而不需要再去解析和執(zhí)行SQL語句。這里需要注意的是,這里的SQL文本必須一次不差的完全相同。如果前后兩次查詢,使用了不同的查詢條件。如第 一次查詢時(shí)沒有輸入Where條件語句。后來發(fā)現(xiàn)數(shù)據(jù)量過多,利用了Where條件了過濾查詢的結(jié)果。此時(shí)即使最后的查詢結(jié)果是相同的,系統(tǒng)仍然是從數(shù)據(jù) 文件中獲取數(shù)據(jù),而不是從數(shù)據(jù)緩存中。再如,Select后面所使用的字段名稱也必須是相同的。如果有一個(gè)字段名稱不同或者前后兩次查詢所使用的字段數(shù)量 不同,則系統(tǒng)都會(huì)認(rèn)為是不同的SQL語句,而重新解析并查詢。
二是從數(shù)據(jù)緩存的角度考慮,大小寫是不敏感的。如前后兩次查詢時(shí),采用的字段名稱可能只有大小寫的差異。如第一次使用的是大小,第二次使用的是小寫,這系統(tǒng)認(rèn)為仍然是相同的SQL語句?;蛘哒f關(guān)鍵字大小寫等等這都是不敏感的。
三是要滿足二次查詢之間,數(shù)據(jù)記錄包括表結(jié)構(gòu)都沒有被更改過。如果記錄所在的標(biāo)更改了,如增加了一個(gè)字段等等,此時(shí)使用這個(gè)表的所有緩沖數(shù)據(jù)系統(tǒng)將自動(dòng) 清空。這里需要注意,這里指的更改是一個(gè)廣義的更改,包括表中任何數(shù)據(jù)或者結(jié)果的改變。舉一個(gè)簡單的例子,第一次查詢時(shí)用戶需要查詢2010年的出貨數(shù) 據(jù)。查詢后有用戶在這個(gè)表中插入了一條2011年1月份的出貨信息。然后又有用戶需要查詢2010年的出貨信息。使用的SQL語句與第一次查詢時(shí)完全相 同。在這種情況下,數(shù)據(jù)庫系統(tǒng)會(huì)使用緩存中的數(shù)據(jù)嗎?答案是否定的。因?yàn)楫?dāng)中間用戶插入一條記錄時(shí),系統(tǒng)會(huì)自動(dòng)清空跟這個(gè)表相關(guān)的所有緩存記錄。當(dāng)?shù)诙?查詢時(shí),緩存中已經(jīng)沒有這張表對(duì)應(yīng)的緩存信息。此時(shí)就需要重新解析并查詢。
四是需要注意,默認(rèn)字符集對(duì)緩存命中率的影響。通常情況下,如果客戶端與服務(wù)器之間所采用的默認(rèn)字符集不同,則即使查詢語句相同、在兩次查詢之間記錄與表結(jié)構(gòu)也沒有被更改,系統(tǒng)仍然認(rèn)為是不同的查詢。對(duì)于這一點(diǎn)需要特別的注意,大家比較容易忽視。
二、提高緩存命中率的建議。
從上面的條件分析中可以看出,利用緩存中的數(shù)據(jù)具有比較嚴(yán)格的條件。其實(shí)這些條件也是合情合理的。主要是為了保障數(shù)據(jù)的一致性。對(duì)以上這些條件有深入的認(rèn)識(shí)之后,現(xiàn)在數(shù)據(jù)庫管理員需要考慮的是,如何來提高這個(gè)緩存的命中率?對(duì)此筆者有如下幾個(gè)建議。
一是在配置時(shí),客戶端與服務(wù)器端要使用相同的字符集。如果客戶端(或者說第三方工具)與服務(wù)器端使用的字符集不同,那么任何情況下都不會(huì)使用緩存功能。 特別在國內(nèi),需要用到中文的字符集。此時(shí)特別需要注意,客戶端默認(rèn)字符集要與服務(wù)器端的默認(rèn)字符集相同。注意,這里是相同,而不是兼容。有時(shí)候即使采用了 不同的字符集,客戶端上仍然可以正常顯示。這主要是因?yàn)橛行┳址m然不相同,但是是相互兼容的。在緩存管理上,需要相同,光兼容還不行。
二是在客戶端上,要固化查詢的語句。如現(xiàn)在有財(cái)務(wù)人員和采購人員同時(shí)從系統(tǒng)中查詢11月份的出貨數(shù)據(jù)。顯然他們崗位職責(zé)不同,所需要字段的內(nèi)容是不同 的。此時(shí)在客戶端出,可以允許用戶設(shè)置自己所需要的表單格式。但是筆者建議,后臺(tái)所采用的SQL語句好是相同的。這里數(shù)據(jù)會(huì)經(jīng)過三個(gè)渠道:后臺(tái)數(shù)據(jù)庫、 客戶端、用戶。筆者的意識(shí)時(shí),后臺(tái)數(shù)據(jù)庫與客戶端之間的交互采用相同的SQL語句。然后客戶端與用戶之間進(jìn)行交互時(shí),根據(jù)用戶定義的格式(包括字段前后的 排列、不包括查詢條件語句的差異)向用戶顯示數(shù)據(jù)。此時(shí)由于采用了相同的SQL語句(只是用戶對(duì)于顯示格式的要求不同),從而可以提高應(yīng)用系統(tǒng)的查詢效 率。
三是提高內(nèi)存中緩存的配置,來提高命中率。一般在服務(wù)器啟動(dòng)時(shí),操作系統(tǒng)會(huì)跟數(shù)據(jù)庫軟件協(xié)商緩存空間的大小。當(dāng)緩存工作不足時(shí),緩 存中最舊的緩存記錄會(huì)被新的消息所覆蓋??梢?,如果能夠提高緩存空間,就可以提高命中率。這就好像打靶,目標(biāo)多了,命中的幾率也會(huì)高許多。不過用戶的并 發(fā)數(shù)越多,這個(gè)設(shè)置的效果會(huì)越不明顯。
四是通過分區(qū)表可以提高緩存的命中率。在上面的條件分析中,大家可以看到,只要所查詢的表中插入 了一條記錄,系統(tǒng)就會(huì)清空緩存記錄?,F(xiàn)在以查詢出貨記錄為例。出貨記錄表每天都在更新,而用戶在年初時(shí),會(huì)經(jīng)常需要查詢上一年的出貨記錄。此時(shí)由于這個(gè)表 中的數(shù)據(jù)每個(gè)小時(shí)都在更新,那么緩存中的信息會(huì)不斷的被情況。此時(shí)緩存的命中率顯然不會(huì)很高。針對(duì)這種情況,筆者建議可以采用分區(qū)表。如可以通過系統(tǒng)設(shè) 置,將2010年的出貨記錄單獨(dú)存放在一個(gè)出貨的分區(qū)表中。即每一個(gè)年度都使用一張單獨(dú)的分區(qū)表。此時(shí)2011年的紀(jì)錄,就不會(huì)影響到2010年的分區(qū) 表。此時(shí)如果用戶重復(fù)查詢2010年的出貨信息,只要其使用的SQL語句相同(沒有采用不同的查詢條件),那么就可以享受緩存機(jī)制所帶來的效益,提高應(yīng)用 系統(tǒng)的查詢效果。。
三、多個(gè)應(yīng)用對(duì)緩存的影響。
通常情況下,MySQL數(shù)據(jù)庫的緩存是根據(jù)服務(wù)器內(nèi)存的大小自動(dòng)分配 的。如果一臺(tái)服務(wù)器上只有一個(gè)MySQL應(yīng)用,那么固然好。不過在實(shí)際工作中,為了降低信息化投資的成本,往往會(huì)在同一臺(tái)服務(wù)器上布置多個(gè)信息化應(yīng)用。 由于其他信息化應(yīng)用也需要使用內(nèi)存的空間作為緩存,那么MySQL數(shù)據(jù)庫中緩存空間就可能變小。如果遇到這種情況下,數(shù)據(jù)庫管理員需要跟系統(tǒng)工程師進(jìn)行協(xié) 商,為各種不同的應(yīng)用根據(jù)性能要求的不同,手工設(shè)置不同的緩存空間。如此的話,就可以避免同一臺(tái)服務(wù)器上不同信息化應(yīng)用對(duì)緩存的沖突。
感謝各位的閱讀,以上就是“怎么配置MySQL緩存提高緩存命中率”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么配置MySQL緩存提高緩存命中率這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
當(dāng)前文章:怎么配置MySQL緩存提高緩存命中率-創(chuàng)新互聯(lián)
分享鏈接:http://aaarwkj.com/article44/codjhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站、網(wǎng)站內(nèi)鏈、電子商務(wù)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容