mysql快取 碎片 mysql查詢快取的記憶體碎片

2021-10-18 08:28:56 字數 784 閱讀 6269

query_cache_min_res_unit   查詢快取分配的最小塊的大小(位元組)

query_alloc_block_size    為查詢分析和執行過程中建立的物件分配的記憶體塊大小

qcache_free_blocks代表記憶體自由塊的多少,反映了記憶體碎片的情況

1)當查詢進行的時候,mysql把查詢結果儲存在qurey cache中,但如果要儲存的結果比較大,超過query_cache_min_res_unit的值 ,這時候mysql將一邊檢索結果,一邊進行儲存結果,所以,有時候並不是把所有結果全部得到後再進行一次性儲存,而是每次分配一塊query_cache_min_res_unit 大小的記憶體空間儲存結果集,使用完後,接著再分配乙個這樣的塊,如果還不不夠,接著再分配乙個塊,依此類推,也就是說,有可能在一次查詢中,mysql要進行多次記憶體分配的操作。

2)記憶體碎片的產生。當一塊分配的記憶體沒有完全使用時,mysql會把這塊記憶體trim掉,把沒有使用的那部分歸還以重複利用。比如,第一次分配4kb,只用了3kb,剩1kb,第二次連續操作,分配4kb,用了2kb,剩2kb,這兩次連續操作共剩下的1kb+2kb=3kb,不足以做個乙個記憶體單元分配, 這時候,記憶體碎片便產生了。

3)使用flush query cache,可以消除碎片

4)如果qcache_free_blocks值過大,可能是query_cache_min_res_unit值過大,應該調小些5)query_cache_min_res_unit的估計值:(query_cache_size - qcache_free_memory) / qcache_queries_in_cache

mysql 減少快取碎片

沒有辦法避免所有的碎片,但是仔細選擇query cache min res unit 可以有效的避免記憶體浪費,query cache min res unit 過大會產生記憶體浪費和碎片,query cache min res unit 過小導致記憶體經常allocate 也回帶來效能影響,所以q...

mysql碎片空間 mysql碎片應用

1.查詢結果集中自增功能 set i 0 select i i 1 id 2.資料庫備份 mysqldump database uroot p beifen.sql 3.資料庫表空間tablespace優化 show table status from database like table nam...

mysql索引碎片整理 MysqL碎片整理優化

先來說一下什麼是碎片,怎麼知道碎片有多大!簡單的說,刪除資料必然會在資料檔案中造成不連續的空白空間,而當插入資料時,這些空白空間則會被利用起來.於是造成了資料的儲存位置不連續,以及物理儲存順序與理論上的排序順序不同,這種是資料碎片.實際上資料碎片分為兩種,一種是單行資料碎片,另一種是多行資料碎片.前...