Group Blog
 
 
พฤษภาคม 2554
 
1234567
891011121314
15161718192021
22232425262728
293031 
 
22 พฤษภาคม 2554
 
All Blogs
 

QC3: เริ่มต้นใช้งาน Query Cache


หลังจากได้ทราบรายละเอียดเกี่ยวกับตัวแปรระบบและตัวแประสถานะที่เกี่ยวข้องกับ Query Cache กันไปแล้ว
ก็ได้เวลาเริ่มทดสอบการใช้งาน Query Cache กัน

เปิดใช้งานโดยกำหนดตัวแปร query_cache_size และ query_cache_type ดังนี้

mysql> SET GLOBAL query_cache_size=10*1024*1024;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'query_cache%';
+------------------------------+----------+
| Variable_name | Value |
+------------------------------+----------+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 10485760 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+
5 rows in set (0.00 sec)

mysql> SHOW GLOBAL STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 10468392 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 0 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+----------+
8 rows in set (0.00 sec)

เริ่มต้นตัวแปรสถานะต่าง ๆ มีค่าเป็น 0
ผมจะทดสอบการทำงานของ Query Cache เบื้องต้น ดังนี้
mysql> SELECT * FROM city LIMIT 1;
+----+-------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+----+-------+-------------+----------+------------+
| 1 | Kabul | AFG | Kabol | 1780000 |
+----+-------+-------------+----------+------------+
1 row in set (0.19 sec)

mysql> SHOW GLOBAL STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 10466856 |
| Qcache_hits | 0 |
| Qcache_inserts | 1 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 1 |
| Qcache_queries_in_cache | 1 |
| Qcache_total_blocks | 4 |
+-------------------------+----------+
8 rows in set (0.00 sec)

จะเห็นได้ว่า เริ่มต้นยังไม่มี query อยู่ใน cache จึงเกิด Qcache_inserts เพิ่มขึ้นหนึ่งครั้ง

mysql> SELECT * FROM city LIMIT 1;
+----+-------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+----+-------+-------------+----------+------------+
| 1 | Kabul | AFG | Kabol | 1780000 |
+----+-------+-------------+----------+------------+
1 row in set (0.00 sec)

mysql> SHOW GLOBAL STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 10466856 |
| Qcache_hits | 1 |
| Qcache_inserts | 1 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 1 |
| Qcache_queries_in_cache | 1 |
| Qcache_total_blocks | 4 |
+-------------------------+----------+
8 rows in set (0.00 sec)

เมื่อมี query เกิดขึ้นซ้ำอีกครั้ง คราวนี้เกิด Qcache_hits เพิ่มขึ้นหนึ่ง ไม่เกิด Qcache_inserts แล้ว เพราะมีใน cache แล้ว

mysql> SELECT * FROM City LIMIT 1;
+----+-------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+----+-------+-------------+----------+------------+
| 1 | Kabul | AFG | Kabol | 1780000 |
+----+-------+-------------+----------+------------+
1 row in set (0.00 sec)

mysql> SHOW GLOBAL STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 10465832 |
| Qcache_hits | 1 |
| Qcache_inserts | 2 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 1 |
| Qcache_queries_in_cache | 2 |
| Qcache_total_blocks | 6 |
+-------------------------+----------+
8 rows in set (0.00 sec)

คราวนี้ query แตกต่างจากเดิม ตัว c เล็ก เป็น C ใหญ่ พบว่าเกิด Qcache_inserts แทนที่จะเป็น Qcache_hits
แสดงว่า query ต้องเหมือนเดิม 100% เท่านั้นจึงจะเกิด Qcache_hits

mysql> UPDATE city SET Population=Population+1 WHERE id=2;
Query OK, 1 row affected (0.11 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> SHOW GLOBAL STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 10468392 |
| Qcache_hits | 1 |
| Qcache_inserts | 2 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 1 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+----------+
8 rows in set (0.00 sec)

เมื่อมีการแก้ไขข้อมูลในตาราง แม้จะคนละแถวกัน
cache ทุกตัวที่เกี่ยวข้องกับตาราง จะถูกปลดออกจาก cache ทันที
ดังจะเห็นได้จาก Qcache_queries_in_cache ลดจาก 2 เป็น 0


เป็นยังไงบ้างครับ คิดว่าคงพอเข้าใจหลักการทำงานของ Query Cache มากขึ้นนะครับ




 

Create Date : 22 พฤษภาคม 2554
0 comments
Last Update : 22 พฤษภาคม 2554 20:05:46 น.
Counter : 454 Pageviews.

ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
  *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 


saknarak
Location :


[ดู Profile ทั้งหมด]

ให้ทิปเจ้าของ Blog [?]
ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 1 คน [?]




MCT, MCITP:SQLServer, MySQL DBA, DEV, CCSI
Friends' blogs
[Add saknarak's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.