Mysql 缓存
文章目录
MySQL 超时
- connect_timeout 与客户端连接建立超时,默认10秒
- interactive_timeout 交互终端超时断开,默认28800秒
- wait_timeout 非交互终端超时断开,默认28800秒
- net_read_timeout 从客户端读取数据超时,默认30秒
- net_write_timeout 向客户端写入数据超时,默认60秒
- innodb_lock_wait_timeout 锁等待超时,默认50秒
- innodb_rollback_on_timeout 超时后回滚整个事务操作,默认OFF
- slave_net_timeout 从库读取binlog失败后,等待指定秒后重新连接主库,默认60秒
查询缓存配置
** MySQL 8.0 已关闭该功能 **
- have_query_cache 是否支持查询缓存,默认yes
- query_cache_limit select结果集大于该值时不缓存,默认1048576
- qeury_cache_min_res_unit 查询缓存申请的内存单位(块)大小,默认4096,一般不改
- query_cache_size 查询缓存大小,默认1048576
- query_cache_type
- 0(OFF) 关闭查询缓存,默认
- 1(ON) 如果select语句没有sql_no_cache选项,则使用查询缓存
- 2(DEMOND) 如果select语句没有sql_cache选项,则不使用查询缓存
- query_cache_wlock_invalidate
- 0(OFF) 锁表后,该表的查询缓存依旧有效,默认
- 1(ON) 锁表后,该表的查询缓存失效
查询缓存状态
** MySQL 8.0 已关闭该功能 **
- Qcache_free_blocks 查询缓存中的内存碎片数量
- 碎片过多表明查询结果集较小,可适当减小query_cache_min_res_unit
- 整理查询缓存中的碎片,获得一个较大的内存空闲空间
1
flush query cache
- 缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
- Qcache_free_memory 查询缓存中的可用内存
- Qcache_hits 使用查询缓存的次数
- Qcache_inserts 查询缓存中缓存过的select结果集数量(包括当前正在缓存的)
- Qcache_lowmen_prunes 因查询缓存已满而删除的select结果集数量
- 该值较大表明查询缓存较小
- Qcache_not_cached 没有进入查询缓存的select语句个数
- Qcache_queries_in_cache 查询缓存中当前缓存着select结果集数量
- Qcache_total_blocks 查询缓存中的块总数
- Com_select 执行过的select语句数量
- 查询缓存的命中率 = Qcache_hits / Com_select * 100%
排序缓存配置
- sort_buffer_size 排序缓存大小,默认262144
- max_length_for_sort_data 排序sql中的全部字段长度总和小于该值时,使用优化排序方式,否则使用常规排序方式,默认1024
- max_sort_length 使用列的前(默认1024)个字节排序
- innodb_sort_buffer_size InnoDB用于创建/重建索引的排序缓存,默认1048576
排序缓存状态
- Sort_merge_passes 使用临时文件完成排序操作的次数
- 增加sort_buffer_size可减少使用临时文件排序的次数
- Sort_range 使用范围排序的次数
- Sort_rows 已经排序的记录行数
- Sort_scan 通过全表扫描完成排序的次数
join 连接缓存
- join_buffer_size 两表join但不能使用索引时,为每张表分配的连接缓存,默认262144
- 尽量实现索引join
表/表结构 缓存配置
- table_open_cache 可以缓存表和视图的数量
- table_defination_cache 可以存储的表结构数量
- open_files_limit 可以打开的文件数量
InnoDB 重做日志缓存配置
- innodb_log_buffer_size 事务提交前,把重做日志写入缓存中
- innodb_flush_log_at_trx_commit
- 0 每隔一秒,把日志缓存写到日志文件,并刷新到磁盘
- 1 每次提交时,把日志缓存写到日志文件,并刷新到磁盘
- 2 每次提交是,把日志缓存写到日志文件,每隔一秒刷新到磁盘
InnoDB 预读配置
- innodb_read_ahead_threshold 预读的前后数据库个数
FLUSH 语句
- HOSTS 清空主机表
- LOGS 关闭binlog文件,创建新编号binlog文件
- PRIVILEGES 从数据库授权表中重新装载权限到缓存中
- TABLES 关闭打开的表,清空查询缓存
- QUERY CACHE 整理碎片,不影响查询缓存中现有数据
- 清空查询缓存
1
RESET QUERY CACHE
- TABLES WITH READ LOCK 关闭打开的表并加一个只读锁
- 解锁
1
UNLOCK TABLES
- STATUS 重置大多数状态变量到0
- MASTER(RESET MASTER) 删除全部binlog文件,重建一个新的binlog文件
- SLAVE(RESET SLAVE) 忘记主库binlog文件位置,删除relay log
文章作者 Colben
上次更新 2019-10-30