企业级Mysql优化意见:
两种日志的分类
RedoLog
redo log是InnoDB引擎特有;
redo log是物理日志,记录的是“在某个数据页上做了什么修改”;
redo log是循环写的,空间固定会用完.
BinLog
binlog是MySQL的Server层实现,所有引擎都可以使用;
binlog是逻辑日志,记录的是这个语句的原始逻辑;
binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前日志。
日志参数优化
1. redo log用于保证crash-safe能力。innodb_flush_log_at_trx_commit这个参数设置成1的时候,表示每次事务的redo log都直接持久化到磁盘。这个参数我建议你设置成1,这样可以保证MySQL异常重启之后数据不丢失。
2. sync_binlog这个参数设置成1的时候,表示每次事务的binlog都持久化到磁盘。这个参数我也建议你设置成1,这样可以保证MySQL异常重启之后binlog不丢失。
表结构设计优化
1. 小而简单的合适数据类型 尽量不用null
2. 使用相同的数据类型存储相似和相关的值
3. 注意可变长字符串
4. 使用主键
5. ALTER TABLE大部分情况下,都会锁表并重建整张表。
6. 范式和反范式要配合使用
MYsql主从复制出现延迟处理方法
若从库IO处理能力不是很强,主库又很繁忙,此时sync_relay_log(io_thread刷盘参数),
innodb_flush_log_at_trx_commit和sync_binlog(sql_thread刷盘参数)又都配置为1,
虽然数据得到了最大的安全保障,但是造成了从库极大的IO负担,从而造成延时。
处理MYsql延时问题
1. 从库出现问题 都是IO的问题 需要减少从库的压力来决绝延迟问题
2. 大事务延迟、大表DLL延迟、长期未提交事务延迟、有无主键、存储层面上的锁、参数设置来处理