啟用 MySQL 和 MariaDB 查詢快取
很多新手都在使用 Memcached 或者 Redis 擴充套件來加速伺服器資料庫的執行效能,其實這些擴充套件對於小部落格的伺服器來說有時候是個負擔和安全隱患的,具體可以參考【 理智冷靜的使用 Memcached 或者 Redis 】一文,那麼不使用優化擴充套件我們如何來提升
SQL/">MySQL 或 MariaDB 資料庫的執行效能呢?
其實 MySQL 和 MariaDB 都是支援“查詢快取”功能,並且啟用MySQL查詢快取可以極大地減低資料庫伺服器的CPU使用率,實際使用情況是:開啟前CPU使用率120%左右,開啟後降到了10%。明月已經用這個方法加速我的 MariaDB 資料庫近一年多時間了,所以我一直都沒有再使用過 Memcached 或者 Redis 了。
今天就給大家講講如何開啟這個“查詢快取”。
檢視查詢快取情況
mysql> show variables like '%query_cache%';
( query_cache_type
為 ON
表示已經開啟)
+------------------------------+----------+ | Variable_name| Value| +------------------------------+----------+ | have_query_cache| YES| | query_cache_limit| 1048576| | query_cache_min_res_unit| 4096| | query_cache_size| 20971520 | | query_cache_type| ON| | query_cache_wlock_invalidate | OFF| +------------------------------+----------+
如果不是ON,修改配置檔案以開啟查詢快取:
vi /etc/my.cnf
[mysqld]中新增: query_cache_size = 20M query_cache_type = ON
重啟mysql服務:
service mysql restart
檢視快取使用情況
mysql> show status like 'qcache%'; +-------------------------+----------+ | Variable_name| Value| +-------------------------+----------+ | Qcache_free_blocks| 83| | Qcache_free_memory| 19811040 | | Qcache_hits| 3108196| | Qcache_inserts| 757254| | Qcache_lowmem_prunes| 20720| | Qcache_not_cached| 47219| | Qcache_queries_in_cache | 47| | Qcache_total_blocks| 276| +-------------------------+----------+
其中各個引數的意義
Qcache_free_blocks
:快取中相鄰記憶體塊的個數。數目大說明可能有碎片。FLUSH QUERY CACHE會對快取中的碎片進行整理,從而得到一個空閒塊。
Qcache_free_memory
:快取中的空閒記憶體。
Qcache_hits
:每次查詢在快取中命中時就增大
Qcache_inserts
:每次插入一個查詢時就增大。命中次數除以插入次數就是不中比率。
Qcache_lowmem_prunes
:快取出現記憶體不足並且必須要進行清理以便為更多查詢提供空間的次數。這個數字最好長時間來看;如果這個 數字在不斷增長,就表示可能碎片非常嚴重,或者記憶體很少。(上面的 free_blocks和free_memory可以告訴您屬於哪種情況)
Qcache_not_cached
:不適合進行快取的查詢的數量,通常是由於這些查詢不是 SELECT 語句或者用了now()之類的函式。
Qcache_queries_in_cache
:當前快取的查詢(和響應)的數量。
Qcache_total_blocks
:快取中塊的數量。
對於某些不想使用快取的語句,可以這樣使用:
select SQL_NO_CACHE count(*) from users where email = 'hello';
這個“查詢快取”算是 MySQL 或者 MariaDB 預設原生的加速方法了,穩定性和相容性不用質疑,絕對的可靠!同時還免去了使用第三方快取擴充套件帶來的安全隱患,沒有開啟的儘快去開啟吧!記住開啟前一定要清除 Memcached 或者 Redis 程序哦,否則就起不到加速的效果了!