先說明2點
開啟快取也會帶來開銷,主要表現在一下方面
讀取在查詢開始之前必須要檢查快取
如果查詢是快取的,但是不在結果集中,那麼產生結果後儲存資料會帶來一定的開銷
向快取寫如資料也會帶來開銷
有的情況查詢快取不會被快取,即使你使用 sql_cache也不能快取
主要一下幾個
引用了使用者自定義函式
引用了使用者自定義變數
以用了存續過程
查詢中包含一些實時的系統函式,比如now
引用了臨時表
雖然上面說到快取會帶來一些開銷
但是快取對mysql 還是很重要
帶來的好處比壞處多
下面講一下mysql快取如何使用記憶體
查詢快取的記憶體池被分為大小可變的塊,每乙個快都知道自己的大小,指向前乙個和後乙個邏輯塊和物理塊 的指標,伺服器啟動時初始化查詢快取使用的物理記憶體,記憶體池開始咋hi要乙個快,她的大小為被配置為快取的大小減去自身需要的40kb大小。在每次快取查詢結果時,會為查詢結果分配乙個快取塊,但是伺服器無法估計需要快取的結果的大小,至少會大於等於query_cache_min_res_unit,,伺服器在分配時,不會再快取中一次生成最終結果然後快取傳送到客戶端,而是產生一條快取一條,這樣快取就能保證空間不會在分配時浪費或者不足。分配記憶體塊的速度較慢,因為伺服器需要檢查可用記憶體列表並且找打大小合適的快,因此伺服器會儘量減少分配次數,當需要快取結果時,他會構建乙個大小至少為最小值的塊,並且把結果放在塊中,如果塊已經滿了,但是資料沒有完整儲存,那麼就會產生乙個新塊並且儲存資料,在資料存完後,如果資料塊還有空隙,伺服器就會剪輯資料塊,並且把空間併入剩餘的空間中,在其中可能產生碎片。通過緊縮,可以講碎片空間併入有效的資料空間中。
對於事物引擎,比如innodb,事物會影響快取,因為髒資料也會讓其他引用了這塊資料的快取失效。直到該事物提交或回滾之後,這塊資料才會被快取。
query_cache_min_res_unit:the minimum size (in bytes) for blocks allocated by the query cache. the default value is 4096 (4kb)
解析mysql 快取如何使用記憶體
先說明2點 開啟快取也會帶來開銷,主要表現在一下方面 讀取在查詢開始之前必須要檢查快取 如果查詢是快取的,但是不在結果集中,那麼產生結果後儲存資料會帶來一定的開銷 向快取寫如資料也會帶來開銷 有的情況查詢快取不會被快取,即使你使用 sql cache也不能快取 主要一下幾個 引用了使用者自定義函式 ...
mysql 記憶體使用 mysql記憶體使用分析 一
author skate time 2012 02 16 mysql記憶體使用分析 從記憶體的使用方式來說,mysql的記憶體使用主要分為以下兩類 1.執行緒獨享記憶體 2.全域性共享記憶體 1.執行緒獨享記憶體 在mysql 中,執行緒獨享記憶體主要用於各客戶端連線線程儲存各種操作的獨享資料,如執...
Mysql 記憶體使用
在這裡我們將介紹的是mysql記憶體使用上的執行緒獨享,執行緒獨享記憶體主要用於各客戶端連線線程儲存各種操作的獨享資料,如執行緒棧資訊,分組排序操作,資料讀寫緩衝,結果集暫存等等,而且大多數可以通過相關引數來控制記憶體的使用量。對於任何乙個資料庫管理系統來說,記憶體的分配使用絕對可以算的上是其核心之...