X

MySQL Query Cache 效率的計算

轉載自 MySQL Query Cache 效率的計算.

原來 MySQL 本身就可以做 Cache 的功能~ 🙂

Query Cache 在提高資料庫性能方面具有非常重要的作用。

其設定也非常簡單,僅需要在配置檔寫入兩行: query_cache_type 和 query_cache _size,而且 MySQL 的 query cache 非常快!而且一旦命中,就直接發送給用戶端,節約大量的 CPU 時間。

當然,非 SELECT 語句對緩衝是有影響的,它們可能使緩衝中的資料過期。一個 UPDATE 語句引起的部分表修改,將導致對該表所有的緩衝資料失效,這是 MySQL 為了平衡性能而沒有採取的措施。因為,如果每次 UPDATE 需要檢查修改的資料,然後撤出部分緩衝將導致代碼的複雜度增加。

query_cache_type 0 代表不使用緩衝, 1 代表使用緩衝,2 代表根據需要使用。

設置 1 代表緩衝永遠有效,如果不需要緩衝,就需要使用如下語句:
SELECT SQL_NO_CACHE * FROM my_table WHERE ...

如果設置為 2 ,需要開啟緩衝,可以用如下語句:
SELECT SQL_CACHE * FROM my_table WHERE ...

用 SHOW STATUS 可以查看緩衝的情況:
mysql> show status like 'Qca%';

+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_queries_in_cache | 8 |
| Qcache_inserts | 545875 |
| Qcache_hits | 83951 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 2343256 |
| Qcache_free_memory | 33508248 |
| Qcache_free_blocks | 1 |
| Qcache_total_blocks | 18 |
+-------------------------+----------+
8 rows in set (0.00 sec)

如果需要計算命中率,需要知道伺服器執行了多少 SELECT 語句:
mysql> show status like 'Com_sel%';

+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Com_select | 2889628 |
+---------------+---------+
1 row in set (0.01 sec)

在本例中, MySQL 命中了 2,889,628 條查詢中的 83,951 條,而且 INSERT 語句只有 545,875 條。因此,它們兩者的和和280萬的總查詢相比有很大差距,因此,我們知道本例使用的緩衝類型是 2 。

而在類型是 1 的例子中, Qcache_hits 的數值會遠遠大於 Com_select 。

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post