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