mysql 緩存

配置文件設置緩存

 my.ini 或 my.cy 找到 [mysqld]html

query_cache_size = 20M  #緩存大小
query_cache_type = ON  #開啓緩存
table_cache=256    #用於限制緩存表的最大數目,若是當前已經緩存的表未達到table_cache,則會將新表添加進來;若已經達到此值,MySQL將根據緩存表的最後查詢時間、查詢率等規則釋放以前的緩存

 

參數調優

mysql> show global status like 'open%_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables   | 0     |  #當前正在打開表的數量
| Opened_tables | 35    |  #全部已經打開表的數量,建議table_cache 比Opened_tables的數值大一些
+---------------+-------+

 

查詢緩存相關配置參數

mysql> show variables like '%query_cache%';
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| have_query_cache             | YES     | #是否支持查詢緩存
| query_cache_limit            | 1048576 | #可緩存具體查詢結果的最大值
| query_cache_min_res_unit     | 4096    | #查詢緩存是以塊來申請內存空間的,每次申請的塊大小爲設定值 
| query_cache_size             | 0       | #查詢緩存的大小
| query_cache_type             | ON      | #關閉或是開啓緩存
| query_cache_wlock_invalidate | OFF     |  #該參數用於設置行級排它鎖與查詢緩存之間的關係,默認爲爲0(OFF),表示施加行級排它所的同時,該表的全部查詢緩存依然有效。若是設置爲1(ON),表示事假行級排它鎖的同時,該表的全部查詢緩存失效。
+------------------------------+---------+

 

查詢緩存使用狀況

mysql> show status like 'Qcache%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Qcache_free_blocks      | 0     | #緩衝區碎片數量
| Qcache_free_memory      | 0     | #表示當前MySQL服務實例的查詢緩存還有多少可用內存
| Qcache_hits             | 0     | #使用查詢緩存的次數
| Qcache_inserts          | 0     | #表示查詢緩存中此前總共緩存過多少條select 語句的結果集。
| Qcache_lowmem_prunes    | 0     | #值很是大,則代表常常出現緩衝不夠的狀況
| Qcache_not_cached       | 0     |  #表示沒有進入查詢緩存的select個數
| Qcache_queries_in_cache | 0     |  #緩存中緩存這多少條select語句的結果集
| Qcache_total_blocks     | 0     |  #查詢緩存的總個數
+-------------------------+-------+

 

清理緩存碎片 

mysql> flush query cache;
Query OK, 0 rows affected (0.00 sec)
mysql> flush tables;   #清空當前全部緩存的表
Query OK, 0 rows affected (0.00 sec) 
 
 
mysql> reset query cache; #清理內存中的碎片
Query OK, 0 rows affected (0.00 sec)

 

MyISAM 存儲引擎緩存索引

 key_buffer_size 是用於索引塊的緩衝區的大小,也稱爲密鑰緩存mysql

sql 緩存索引相關命令sql

mysql> SHOW STATUS like 'key_%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Key_blocks_not_flushed | 0     |  # 密鑰緩存中已更改但還沒有刷新到磁盤 的密鑰塊數
| Key_blocks_unused      | 22365 |  # 密鑰緩存 中未使用的塊數
| Key_blocks_used        | 1     |  # 密鑰緩存 中已使用塊的數量。此值是一個高水位標記,表示一次使用過的最大塊數。
| Key_read_requests      | 1     | # 從密鑰緩存中讀取密鑰塊的請求數
| Key_reads              | 1     | # 從磁盤到密鑰緩存的密鑰塊的物理讀取次數,若是 很大,那麼你的 價值可能過小了
| Key_write_requests     | 0     |  # 將密鑰塊寫入密鑰緩存的請求數
| Key_writes             | 0     |  # 密鑰塊從密鑰緩存到磁盤的物理寫入次數
+------------------------+-------+MyISAMMyISAMMyISAMMyISAMKey_readskey_buffer_sizeMyISAMMyISAM

高速緩存未命中率能夠計算爲 Key_reads/Key_read_requests 比率一般應小於0.01,Key_writes/Key_write_requests若是您主要使用更新和刪除,則比率一般接近1,但若是您傾向於同時執行影響多行的更新或者您正在使用DELAY_KEY_WRITE 表選項,則比率可能會小得多緩存

注意:若是建立表時 ALTER TABLE table_name DELAY_KEY_WRITE= 1  須要在 my.ini 配置 [mysqld] 下添加  myisam-recover=BACKUP,FORCE,這樣在你啓動mysql的時候會檢查你的表並同步表和索引。spa

使用的密鑰緩衝區的分數能夠 key_buffer_size 結合 Key_blocks_unused 狀態變量和緩衝區塊大小來肯定 ,緩衝區塊大小能夠從 key_cache_block_size 系統變量中得到:1 ((Key_blocks_unused * key_cache_block_size/ key_buffer_size).net

相關文章
相關標籤/搜索