mysql共享記憶體 MySQL全域性共享記憶體介紹

2021-10-18 02:45:49 字數 1914 閱讀 8023

前言

全域性共享記憶體則主要是 mysql instance(mysqld程序)以及底層儲存引擎用來暫存各種全域性運算及可共享的暫存資訊,如儲存查詢快取的 query cache,快取連線線程的 thread cache,快取表檔案控制代碼資訊的 table cache,快取二進位制日誌的 binlog buffer, 快取 myisam 儲存引擎索引鍵的 key buffer以及儲存 innodb 資料和索引的 innodb buffer pool 等等。下面針對 mysql 主要的共享記憶體進行乙個簡單的分析。

查詢快取(query cache)

查詢快取是 mysql 比較獨特的乙個快取區域,用來快取特定 query 的結果集(result set)資訊,且共享給所有客戶端。通過對 query 語句進行特定的 hash 計算之後與結果集對應存放在 query cache 中,以提高完全相同的 query 語句的相應速度。當我們開啟 mysql 的 query cache 之後,mysql 接收到每乙個 select 型別的 query 之後都會首先通過固定的 hash 演算法得到該 query 的 hash 值,然後到 query cache 中查詢是否有對應的 query cache。如果有,則直接將 cache 的結果集返回給客戶端。如果沒有,再進行後續操作,得到對應的結果集之後將該結果集快取到 query cache 中,再返回給客戶端。當任何乙個表的資料發生任何變化之後,與該錶相關的所有 query cache 全部會失效,所以 query cache 對變更比較頻繁的表並不是非常適用,但對那些變更較少的表是非常合適的,可以極大程度的提高查詢效率,如那些靜態資源表,配置表等等。為了盡可能高效的利 用 query cache,mysql 針對 query cache 設計了多個 query_cache_type 值和兩個 query hint:sql_cache 和 sql_no_cache。當 query_cache_type 設定為0(或者 off)的時候不使用 query cache,當設定為1(或者 on)的時候,當且僅當 query 中使用了 sql_no_cache 的時候 mysql 會忽略 query cache,當 query_cache_type 設定為2(或者demand)的時候,當且僅當query 中使用了 sql_cache 提示之後,mysql 才會針對該 query 使用 query cache。可以通過 query_cache_size 來設定可以使用的最大記憶體空間。

連線線程快取(thread cache)

連線線程是 mysql 為了提高建立連線線程的效率,將部分空閒的連線線程保持在乙個快取區以備新進連線請求的時候使用,這尤其對那些使用短連線的應用程式來說可以極大的提高創 建連線的效率。當我們通過 thread_cache_size 設定了連線線程快取池可以快取的連線線程的大小之後,可以通過(connections - threads_created) / connections * 100% 計算出連線線程快取的命中率。注意,這裡設定的是可以快取的連線線程的數目,而不是記憶體空間的大小。

表快取(table cache)

表快取區主要用來快取表檔案的檔案控制代碼資訊,在 mysql5.1.3之前的版本通過 table_cache 引數設定,但從mysql5.1.3開始改為 table_open_cache 來設定其大小。當我們的客戶端程式提交 query 給 mysql 的時候,mysql 需要對 query 所涉及到的每乙個表都取得乙個表檔案控制代碼資訊,如果沒有 table cache,那麼 mysql 就不得不頻繁的進行開啟關閉檔案操作,無疑會對系統效能產生一定的影響,table cache 正是為了解決這一問題而產生的。在有了 table cache 之後,mysql 每次需要獲取某個表檔案的控制代碼資訊的時候,首先會到 table cache 中查詢是否存在空閒狀態的表檔案控制代碼。如果有,則取出直接使用,沒有的話就只能進行開啟檔案操作獲得檔案控制代碼資訊。在使用完之後,mysql 會將該檔案控制代碼資訊再放回 table cache 池中,以供其他執行緒使用。注意,這裡設定的是可以快取的表檔案控制代碼資訊的數目,而不是記憶體空間的大小。

mysql共享記憶體 MySQL全域性共享記憶體介紹

前言 全域性共享記憶體則主要是 mysql instance mysqld程序 以及底層儲存引擎用來暫存各種全域性運算及可共享的暫存資訊,如儲存查詢快取的 query cache,快取連線線程的 thread cache,快取表檔案控制代碼資訊的 table cache,快取二進位制日誌的 binl...

MySQL記憶體使用 全域性共享

全域性共享內則主要是 mysql instance mysqld程序 以及底層儲存引擎用來暫存各種全域性運算及可共享的暫存資訊,如儲存查詢快取的 query cache,快取連線線程的 thread cache,快取表檔案控制代碼資訊的 table cache,快取二進位制日誌的 binlog bu...

MySQL執行緒共享記憶體引數

mysql執行緒共享記憶體引數 全域性共享記憶體主要是 mysql instance mysqld程序 以及底層儲存引擎用來暫存各種全域性運算及可共享的暫存資訊,如儲存查詢快取的 query cache,快取連線線程的 thread cache,快取表檔案控制代碼資訊的 table cache,快取...