1 总结mysql常见的存储引擎以及特点。
1.MyISAM 引擎特点
- 不支持事务
- 表级锁定
- 读写相互阻塞,写入不能读,读时不能写
- 只缓存索引
- 不支持外键约束
- 不支持聚簇索引
- 读取数据较快,占用资源较少
- 不支持MVCC(多版本并发控制机制)高并发
- 崩溃恢复性较差
2.InnoDB引擎特点
- 行级锁
- 支持事务,适合处理大量短期事务
- 读写阻塞与事务隔离级别相关
- 可缓存数据和索引
- 支持聚簇索引
- 崩溃恢复性更好
- 支持MVCC高并发
2 总结MySQL查询缓存优化总结。
1.查询缓存相关的服务器变量
- query_cache_min_res_unit:查询缓存中内存块的最小分配单位,默认4k,较小值会较少浪费,会导致更频繁的内存分配操作,较大值会带来浪费,会导致碎片过多,内存不足
- query_cache_limit:单个查询结果能缓存的最大值,单位字节,默认为1M,对于查询结果过大而无法缓存的语句,建议使用SQL_NO_CACHE
- query_cache_size:查询缓存总共可用的内存空间;单位字节,必须是1024的整数倍,最小值40KB,低于此值有警报
- query_cache_wlock_invalidate:如果某表被其它的会话锁定,是否仍然可以从查询缓存中返回结果,默认值为OFF,表示可以在表被其它会话锁定的场景中继续从缓存返回数据;ON则表示不允许
- query_cache_type:是否开启缓存功能,取值为ON,OFF,DEMAND
2.SELECT语句的缓存控制
- SQL_CACHE:显示指定存储查询结果于缓存之中
- SQL_NO_CACHE:显示查询结果不予缓存
- query_cache_type 参数变量
- query_cache_type的值为OFF或0时,查询缓存功能关闭
- query_cache_type的值为ON或1时,查询缓存功能打开,SELECT的结果符合缓存条件即会缓存,否则,不予缓存,显示指定SQL_NO_CACHE,不予缓存,此为默认值
- query_cache_type的值为DEMAND或2时,查询缓存功能按需进行,显示指定的SQL_CACHE的SELECT语句才会缓存;其它均不予缓存
3.查询缓存相关的状态变量
- Qcache_free_blocks:处于空闲状态 Query Cache中内存 Block 数
- Qcache_total_blocks:Query Cache 中总Block ,当Qcache_free_blocks相对此值较大时,可能用内存碎片,执行FLUSH QUERY CACHE清理碎片
- Qcache_free_memory:处于空闲状态的 Query Cache 内存总量
- Qcache_hits:Query Cache 命中次数
- Qcache_inserts:向 Query Cache 中插入新的 Query Cache 的次数,即没有命中的次数
- Qcache_lowmem_prunes:记录因为内存不足而被移除出查询缓存的查询数
- Qcache_not_cached:没有被 Cache 的 SQL 数,包括无法被 Cache 的 SQL 以及由于query_cache_type 设置的不会被 Cache 的 SQL语句
- Qcache_queries_in_cache:在 Query Cache 中的 SQL 数量
3 MySQL日志各类总结。
- 事务日志
- redo log:实现 WAL(Write Ahead Log) ,数据更新前先记录redo log
- undo log:保存与执行的操作相反的操作,用于实现rollback
- 事务型存储引擎自行管理和使用,建议和数据文件分开存放
- 错误日志
- mysqld启动和关闭过程中输出的事件信息
- mysqld运行中产生的错误信息
- event scheduler运行一个event时产生的日志信息
- 在主从复制架构中的从服务器上启动从服务器线程时产生的信息
- 通用日志
- 记录对数据库的通用操作,包括:错误的SQL语句
- 通用日志可以保存在:file(默认值)或 table(mysql.general_log表)
- 慢查询日志
- 记录执行查询时长超出指定时长的操作
- 二进制日志(备份)
- 记录导致数据改变或潜在导致数据改变的SQL语句
- 记录已提交的日志
- 不依赖于存储引擎类型