分析 group by 语句的异常原因
- 看错误,可能会扯到
SQL_MODE
的配置
SQL_MODE
- 配置 mysql 处理 sql 的方式
- todo
如何比较系统运行配置和配置文件中的配置是否一致
查看当前系统运行配置
- show 指令
show variables like <参数>
set
指令设置系统运行配置
- session: 设置对当前 session 有效
set [session | @@session ]
=
- global: 设置对当前 session 无效,仅对后续的连接生效;需要设置到 my.cnf ,避免重启失效
set [global | @@global ]
=
- persist: 8.0 支持;设置会保存到一个文件(
mysqld-auto.cnf
)中,避免 db 重启丢失- 是否对当前 session 有效呢?
set [persist| @@persist]
=
- 是否对当前 session 有效呢?
比较
- 使用 percona toolkit 中的
pt-config-diff
工具pt-config-diff u=
, p= ,h= ,P=
性能参数举例
服务器配置参数
参数 | 说明 | 备注 |
---|---|---|
max_connections | 设置 mysql 运行访问的连接数 | |
interactive_timeout | 设置交互连接的 timeout 时间 | |
wait_timeout | 设置非交互连接的 timeout 时间 | |
max_allowed_packet | 控制 mysql 可以接收的数据包大小 | 主从复制的节点,需要保持一致 |
sysnc_binlog | 每写多少次缓冲会向磁盘同步一次 binlog | 主从复制时,master 写 1,避免 binlog 丢失 |
sort_buffer_size | 设置每个 session 使用的排序缓冲区大小 | 占用空间=设置 * 线程(连接数) 需要小心配置 |
join_buffer_size | 设置每个 session 使用的连接缓冲区大小 | |
read_buffer_size | 指定了当对一个 myisam 进行表扫描似乎锁支配的读缓冲区大小; 创建临时表也会使用该缓冲区; 4k的倍数 |
|
read_rnd_buffer_size | 设置控制 index 缓冲区大小 | |
binlog_cache_size | 设置每个 session 用于缓存未提交的事务缓存大小 |
存储引擎参数
参数 |
说明 | 备注 |
---|---|---|
innodb_flush_log_at_trx_commit | 0: 每秒进行一次重做日志磁盘刷新操作; 1: 每次事务提交都会刷新事务日志到磁盘中 2: 每次事务提交先写入 os cache 中,每秒向磁盘刷新一次 |
建议 1 |
innodb_buffer_pool_size | ||
innodb_buffer_pool_instances | ||
innodb_file_per_table | 5.7 后默认启用 |