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)
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