<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗,分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請與我聯(lián)系。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

    mysql cache功能分析:

    1 mysql的cache功能的key的生成原理是:把select語句按照一定的hash規(guī)則生成唯一的key,select的結(jié)果生成value,即 key=>value。所以對于cache而言,select語句是區(qū)分大小寫的,也區(qū)分空格的。兩個select語句必須完完全 全一致,才能夠獲取到同一個cache。

    2 生成cache之后,只要該select中涉及到的table有任何的數(shù)據(jù)變動(insert,update,delete操作等),相 關(guān)的所有cache都會被刪除。因此只有數(shù)據(jù)很少變動的table,引入mysql 的cache才較有意義。關(guān)于這方面的測試,可以參考:《Query Cache,看上去很美》一文。

    所以,mysql的cache功能只適用于下列場合:數(shù)據(jù)變動較少,select較多的table。

    那么。在復(fù)雜的系統(tǒng)中,如何使用mysql的cache功能呢,基本方法如下:

    配置query_cache_type,同時改寫程序。

    query_cache_type 0 代表不使用緩沖, 1 代表使用緩沖,2 代表根據(jù)需要使用。

    設(shè)置 1 代表緩沖永遠(yuǎn)有效,如果不需要緩沖,就需要使用如下語句:

    SELECT SQL_NO_CACHE * FROM my_table WHERE …

    如果設(shè)置為 2 ,需要開啟緩沖,可以用如下語句:

    SELECT SQL_CACHE * FROM my_table WHERE …

    So,最簡單又可靠的做法是:把query_cache_type設(shè)置為2,然后在需要提高select速度的地方,使用:

    SELECT SQL_CACHE * FROM…

    的方式進(jìn)行SELECT。

    【mysql cache調(diào)試筆記】

    1 可以使用下列命令開啟mysql的select cache功能:

    SET GLOBAL query_cache_size = 102400000;

    因為當(dāng)query_cache_size默認(rèn)為0時,是不開啟cache功能的。

    2 調(diào)試:

    查看cache的設(shè)置:

    show variables like ‘%query_cache%’;

    性能監(jiān)控:

    show status like ‘%Qcache%’;

    3 mysql cache的清理:

    可以使用FLUSH QUERY CACHE語句來清理查詢緩存碎片以提高內(nèi)存使用性能。該語句不從緩存中移出任何查詢。

    RESET QUERY CACHE語句從查詢緩存中移出所有查詢。FLUSH TABLES語句也執(zhí)行同樣的工作。


    Query Cache

    當(dāng)你的數(shù)據(jù)庫打開了Query Cache(簡稱QC)功能后,數(shù)據(jù)庫在執(zhí)行SELECT語句時,會將其結(jié)果放到QC中,當(dāng)下一次處理同樣的SELECT請求時,數(shù)據(jù)庫就會從QC取得結(jié) 果,而不需要去數(shù)據(jù)表中查詢。

    在這個“Cache為王”的時代,我們總是通過不同的方式去緩存我們的結(jié)果從而提高響應(yīng)效率,但一個緩存機制是否有效,效果如何,卻是一個需要好好 思考的問題。在MySQL中的Query Cache就是一個適用較少情況的緩存機制。在上圖中,如果緩存命中率非常高的話,有測試表明在極端情況下可以提高效率238%[1]。 但實際情況如何?Query Cache有如下規(guī)則,如果數(shù)據(jù)表被更改,那么和這個數(shù)據(jù)表相關(guān)的全部Cache全部都會無效,并刪除之。這里“數(shù)據(jù)表更改”包括: INSERTUPDATEDELETETRUNCATEALTER TABLEDROP TABLE, orDROP DATABASE等。舉 個例子,如果數(shù)據(jù)表posts訪問頻繁,那么意味著它的很多數(shù)據(jù)會被QC緩存起來,但是每一次posts數(shù)據(jù)表的更新,無論更新是不是影響到了cache 的數(shù)據(jù),都會將全部和posts表相關(guān)的cache清除。如果你的數(shù)據(jù)表更新頻繁的話,那么Query Cache將會成為系統(tǒng)的負(fù)擔(dān)。有實驗表明,糟糕時,QC會降低系統(tǒng)13%[1]的處理能力。

    如果你的應(yīng)用對數(shù)據(jù)庫的更新很少,那么QC將會作用顯著。比較典型的如博客系統(tǒng),一般博客更新相對較慢,數(shù)據(jù)表相對穩(wěn)定不變,這時候QC的作用會比 較明顯。

    再如,一個更新頻繁的BBS系統(tǒng)。下面是一個實際運行的論壇數(shù)據(jù)庫的狀態(tài)參數(shù):

    QCache_hit 5280438
    QCache_insert 8008948
    Qcache_not_cache 95372
    Com select 8104159

    可以看到,數(shù)據(jù)庫一共往QC中寫入了約800W次緩存,但是實際命中的只有約500W次。也就是說,每一個緩存的使用率約為0.66次。很難說,該 緩存的作用是否大于QC系統(tǒng)所帶來的開銷。但是有一點是很肯定的,QC緩存的作用是很微小的,如果應(yīng)用層能夠?qū)崿F(xiàn)緩存,將可以忽略QC的效果。

    ————-下面是關(guān)于QC的一些其他細(xì)節(jié)—————–

    一、Query Cache相關(guān)參數(shù):

    • query_cache_size QC占用空間大小,通過將其設(shè)置為0關(guān)閉QC功能
    • query_cache_type 0表示關(guān)閉QC;1表示正常緩存;2表示SQL_CACHE才緩存
    • query_cache_limit 最大緩存結(jié)果集
    • query_cache_min_res_unit 手冊上說,QC會按照這個值分配緩存block的大小。
    • Qcache_lowmem_prunes 這是一個狀態(tài)變量(show status),當(dāng)緩存空間不夠需要釋放舊的緩存時,該值會自增。

    二、Query Cache觀察:

    CREATE TABLE t1(id INT,var1 varchar(10));
    //Com_select:8 Qcache_hits:1
    INSERT INTO t1 VALUES(1,’WWW’);
    //Com_select:8 Qcache_hits:1
    SELECT * FROM t1 WHERE id=1;
    //Com_select:9 Qcache_hits:1
    SELECT * FROM t1 WHERE id=1;
    //Com_select:9 Qcache_hits:2 Qcache_queries_in_cache:1
    INSERT INTO t1 VALUES(2,’RRRR’);
    //Com_select:9 Qcache_hits:2 Qcache_queries_in_cache:0
    SELECT * FROM t1 WHERE id=1; //INSERT后Cache失效
    //Com_select:10 Qcache_hits:2 Qcache_queries_in_cache:1

    參考:

    1. http://dev.mysql.com/doc/refman/5.0/en/query-cache.html
    2. http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
    3. http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/
    posted on 2015-09-10 19:20 rogerfan 閱讀(437) 評論(0)  編輯  收藏 所屬分類: 【數(shù)據(jù)庫】
    主站蜘蛛池模板: 亚洲精品无码高潮喷水A片软| 黄a大片av永久免费| 亚洲色无码一区二区三区| 歪歪漫画在线观看官网免费阅读 | 精品无码一级毛片免费视频观看| 国产乱子伦精品免费女| 国产成人亚洲精品播放器下载| 国产在线观a免费观看| 国产亚洲AV手机在线观看| 青青操免费在线视频| 国产亚洲人成网站在线观看不卡| 国产一区二区免费视频| 亚洲va在线va天堂va888www| 亚洲免费视频观看| 久久亚洲精品国产精品婷婷| 国产成人精品免费视频软件| 亚洲色偷偷av男人的天堂| 在线观看H网址免费入口| 久久亚洲国产欧洲精品一| 国产成人AV免费观看| 国产一区二区三区免费在线观看| 国产亚洲视频在线观看网址| 亚洲一级黄色视频| 久久亚洲中文字幕无码| 亚洲日韩中文无码久久| 最近中文字幕国语免费完整| 亚洲人成7777| 一本色道久久88亚洲综合| 亚洲国产人成在线观看| 在线观看免费精品国产| 一本到卡二卡三卡免费高| 亚洲国产成人久久精品动漫| 国产精品免费在线播放| 久久久久亚洲精品天堂| 日本高清色本免费现在观看| 国产乱妇高清无乱码免费| 久久精品国产亚洲av日韩| 成人永久免费高清| 免费在线黄色电影| 亚洲欧美日韩综合俺去了| 亚洲精品V欧洲精品V日韩精品|