MySQL中QueryCache的鎖模型
來源:懂視網
責編:小采
時間:2020-11-09 09:41:52
MySQL中QueryCache的鎖模型
MySQL中QueryCache的鎖模型:有同學在問 MySQL中 QueryCache(QC)的鎖是 全局鎖還是 表鎖。這里簡要說明一下。 1、 QC基本概念 這個是實現在MySQL層(非引擎層)的一個內存結構,基本規則是將滿足一定條件的查詢結果緩存在內存中,若同樣的查詢再執行第二次,而且緩存沒有失效,則可以直接返
導讀MySQL中QueryCache的鎖模型:有同學在問 MySQL中 QueryCache(QC)的鎖是 全局鎖還是 表鎖。這里簡要說明一下。 1、 QC基本概念 這個是實現在MySQL層(非引擎層)的一個內存結構,基本規則是將滿足一定條件的查詢結果緩存在內存中,若同樣的查詢再執行第二次,而且緩存沒有失效,則可以直接返

有同學在問 MySQL中 QueryCache(QC)的鎖是 全局鎖還是 表鎖。這里簡要說明一下。 1、 QC基本概念 這個是實現在MySQL層(非引擎層)的一個內存結構,基本規則是將滿足一定條件的查詢結果緩存在內存中,若同樣的查詢再執行第二次,而且緩存沒有失效,則可以直接返
有同學在問 MySQL中 QueryCache(QC)的鎖是 “全局鎖”還是 “表鎖”。這里簡要說明一下。
1、 QC基本概念
這個是實現在MySQL層(非引擎層)的一個內存結構,基本規則是將滿足一定條件的查詢結果緩存在內存中,若同樣的查詢再執行第二次,而且緩存沒有失效,則可以直接返回查詢結果,無需到引擎獲取數據。
-
幾個說明:
a) QC的結構是hash,key為查詢字符串的原文,因此若想命中QC,要求查詢語句與之前的一模一樣,包括大小寫必須一致、不能增減空格等等。
b) Qc可以緩存一個表中的多個查詢語句和結果。
c) 對一個表的DML或DDL操作都會將與這個表有關的緩存都從QC中刪除。
2、 鎖模型
于是說到鎖的粒度。整個QC在內存中只有一個實例Query_cache query_cache;
我們來看上面c中說到的失效邏輯的部分代碼
1.void Query_cache::invalidate_table(THD *thd, uchar * key, uint32 key_length)
2.{
3. DEBUG_SYNC(thd, “wait_in_query_cache_invalidate1″);
4.
5. lock();
6.
7. DEBUG_SYNC(thd, “wait_in_query_cache_invalidate2″);
8.
9. if (query_cache_size > 0) 10. invalidate_table_internal(thd, key, key_length);
11.
12. unlock();
13.}
可以看到這里lock()沒有參數,函數內部用一額全局信號量COND_cache_status_changed,來控制。
因此即使兩個dml更新的是不同的表,也會由于都要失效本表在QC中的緩存項而互鎖。
因此是“全局鎖”。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
MySQL中QueryCache的鎖模型
MySQL中QueryCache的鎖模型:有同學在問 MySQL中 QueryCache(QC)的鎖是 全局鎖還是 表鎖。這里簡要說明一下。 1、 QC基本概念 這個是實現在MySQL層(非引擎層)的一個內存結構,基本規則是將滿足一定條件的查詢結果緩存在內存中,若同樣的查詢再執行第二次,而且緩存沒有失效,則可以直接返