1、快取包括:
(1)、快取查詢計畫避免二次詞法語法解析、優化、執行。
(2)、快取mysql查詢語句返回的完整結果,被命中時,mysql會理解返回結果,省去解析、優化和執行等步驟。
2、如何命中快取?
mysql儲存結果於快取中:把select語句本身做hash計算,計算的結果作為key,查詢結果作為value
因此在寫sql語句時,大小寫以及順序等要統一,這樣快取的機率就大。
3、什麼樣的語句不會被快取?
查詢語句中有一些不確定資料時,不會快取:如now(),current_time();
一般來說,如果查詢中包含使用者自定義函式、儲存函式、使用者變數、臨時表、
mysql庫中系統表或者許可權表,一般都不會被快取。
4、快取帶來的額外開銷?
每個查詢都得先檢查是否命中。
查詢結果要先快取。
mysql>show global variables like 'query_cache%';
| variable_name | value |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 16777216 |
| query_cache_type | on |
| query_cache_wlock_invalidate | off |
(1)、query_cache_type:是否開啟快取功能,
其值有三種on|off|demand,
其中demand如果要快取需要在select語句中需要顯示指明 sql_cache
(2)、query_cache_size:
快取總空間,單位位元組,大小必須為1024的整數倍,從上面可以看出缺省16m。
如果變更大小,會清空當前快取,因此最好開始就設定好。
(3)、query_cache_min_res_unit:儲存快取的最小記憶體塊。
(query_cahce_size-qcache_free_memory)/qcache_queries_in_cache
即(快取總空間-空閒快取空間)/快取個數
(4)、query_cache_limit:
單個快取物件的最大值,超過則不快取。從上面可以看出缺省1m。
可以手動使用sql_no_cache人為地避免嘗試快取返回查詢結果超出此引數限定值的語句。
(5)、query_cache_wlock_invalidate:
如果某錶被其他使用者連線鎖住了,是否仍然從快取中返回結果,off為返回,建議使用off返回。
6、如果判斷快取命中率:
(1)、mysql>show global status like 'qcache%';
| variable_name | value |
| qcache_free_blocks | 1 |
| qcache_free_memory | 16757128 |
| qcache_hits | 3 |
| qcache_inserts | 2 |
| qcache_lowmem_prunes | 0 |
| qcache_not_cached | 29 |
| qcache_queries_in_cache | 2 |
| qcache_total_blocks | 6 |
qcache_hits :命中快取的次數。
qcache_inserts:寫入快取的次數。
qcache_free_memory:空閒快取空間。
qcache_total_blocks:已申請的塊數。
qcache_free_blocks:空閒塊數。
qcache_queries_in_cache:快取個數
qcache_not_cached:未被快取個數
qcache_lowmem_prunes:因快取總空間太小,進行修減(騰出老快取的次數)記憶體的次數。
(2)、命中率指標:
mysql>show global status where variable_name='qcache_hits' or variable_name='com_select';
| variable_name | value |
| com_select | 35 |
| qcache_hits | 3 |
此值如果大於3:1,則表明快取也是有效,能達到10:1,則比較理想;否則關閉快取比較好。
7、碎片整理:
flush query_cache
8、清空快取:
reset query_cache
9、快取優化思路:
(1)、批量寫入,可以提高快取命中率。
(2)、快取空間不宜過大,否則會因為大量快取同時失效造成伺服器假死。
(3)、必要時使用sql_cache或sql_no_cache手動控制快取。
(4)、對寫密集型應用場景來說,禁用快取反而提高效能。
mysql 3 備份恢復
先檢視資料庫表的資料,這裡面時000001裡面的資料 將資料以sql的形式備份到 tmp目錄下,備份的是000001的資料 mysqldump uroot mysql l f tmp mysql1.sql l 鎖表,在備份的時候不讓其他客戶端運算元據庫,以免備份資料不完整 f 即flush logs...
mysql 3 事務隔離
1.事務就是要保證一組資料庫操作,要麼全部成功,要麼全部失敗 2.在 mysql 中,事務支援是在引擎層實現的 3.mysql 是乙個支援多引擎的系統,但並不是所有的引擎都支援事務。比如 mysql 原生的 myisam 引擎就不支援事務,這也是 myisam 被 innodb 取代的重要原因之一。...
mysql 3 資料型別
mysql 中定義資料欄位的型別對你資料庫的優化是非常重要的。mysql 支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。邏輯性對應 boolean 關鍵字int 是integer 的同義詞,關鍵字 dec是 decimal 的同義詞。bit資料型別儲存位字段值,並且支援 myi...