MySQL问题排查思路
2023-04-23 14:37:31 0 举报
AI智能生成
MySQL学习,以及问题排查简单思路
作者其他创作
大纲/内容
MySQL问题排查
1.使用top或者sar -u 查看CPU资源使用情况
3.1 vmstat命令 – 监视系统资源状态
3.2 pidstat -u 1 显示占用CPU的进程
2.使用命令查看具体进程的CPU使用率
CPU
查看哪些进程导致CPU使用率高
1. 使用命令iostat,iotop 查看io情况,看是否有io使用打满情况
2. 使用 lsof -p IPD 查找哪个文件引起的I/Owait异常
IO
查看关键字段iowait和%util 定位
连续ping,观察是否存在丢包(正常0丢包)
1. ping所有节点心跳是否正常
如果网络指标异常,需要让网络工程师协助
tcp_max_syn_backlog
tcp_max_tw_buckets
net.ipv4.tcp_tw_reuse
net.ipv4.tcp_tw_recycle
net.ipv4.tcp_fin_tiimeout
netstat异常计数增长
1.tcp支持队列数2.减少断开链接,资源回收3.表示开启重用,允许将TIME-WAIT sockets重用于新的TCP链接,默认为0,表示关闭4.表示开启TCP链接中TIME-WAITsockets的快速回收,默认为0,表示关闭5.修改系统默认的timeout时间
网络
1.内存剩余过小
2.产生swap
3.hugepage
内存
1.free -g 命令查看内存2.top 命令查看对应进程内存使用情况3.强制回收所有内存,立即释放内存!!!谨慎使用(echo 1 > /proc/sys/vm.drop_caches)
1. 打开文件限制
2. 线程限制
资源限制
cat /etc/security/limits.confmysql soft nofile 65535mysql hard nofile 65535mysql soft nproc 65535mysql hard nproc 65535
1. 查看 /var/log/messages 日志
2.使用 dmesg 命令查看
OOM
出现oom情况或者内存溢出可以使用命令或者查看系统日志进行定位
硬件问题
1. key_buffer_size
2. innodb_buffer_pool_size
3. innodb_log_buffer_size
4. binlog_chache_size
全局内存参数
1. read_buffer_size
2.sort_buffer_size
3. join_buffer_size
4. tmp_table_size
5.thread_stack
6. read_rnd_buffer_size
线程级别内存参数
1.内存问题
1.多表join
2.排序
3.创建大量临时表
4.大量聚合操作
临时表
1. 临时buffer不够用2.调整参数max_heap_table_size,tmp_table_size3.建议SQL尽量不用text、blob等字段
1.max_user_connection
2.max_connection
链接数
1. 链接参数建议不超过100002.可以通过processlist 观察业务最高峰的链接数量,更具实际信息来调整链接参数
1.table_definition_cache
2. table_open_cache
3. table_open_cache_instances
表句柄信息
表锁
行锁
范围锁
元表锁
1.锁级别
可以通过 information_schema下的视图 innodb_TRXinnodb_LOCKSinnodb_LOCK_WAITS等来确认事务对应的锁信息
事务
1.数据库隔离级别
2.行锁
3. gap锁冲突
4. 不同索引锁冲突
死锁
1.show innodb status 查看最近死锁信息2.调整参数 innodb_lock_wait_timeout控制3.及时kill 掉锁
1. error log
2. slow log
3.binlog
4. relay log
问题定位日志
MySQL系统问题
通过explain(profile)进行SQL分析
1.SQL语句分析
查看表是否是无索引或执行计划错误
2.索引
使用工具pt-qurey-digest分析慢日志
3.慢日志
通过show processlist 查看执行SQL的情况,适当调整并发数限制
4.大量并发
避免使用存储过程、触发器,存储过程和触发器会消耗大量mysql的CPU所以要尽量规避
5.存储过程,触发器
尽量避免3张表以上的join,容易产生中间表
1.Nest-Loop Join(简单嵌套循环连接)
2.Index Nested-Loop Join(索引嵌套)
3. Block Nested-Loop Join(块嵌套循环连接)
4.Batched Key Access Join
join算法
6.多表join
1.主键
2.字段类型选择
3.索引
按照MySQL规范,进行设计
7.表结构设计
执行SQL
1.查看复制信息show slave status\\G
2.mysqlbinlog查看事务信息
3.查看error日志中主从复制报错信息
1.复制错误
1.从库呗写入
2.事务丢失
3.大事务
4.宕机
5.复制搭建方式错误
2.主从数据不一致,可能因素
1.binlog解析
2.event扫描方式
3.表结构(无主键或者存在大量myisam表)
4.大批量更新产生大事务
3.延迟
4.复制相关参数设置不合理
主从
1.内存泄漏
2.版本内置问题
3.版本缺陷
MySQL bug
1.通过重启或者设置【echo 1> /proc/sys/vm/drop_caches】2.查看官方文档(bugs.mysql.com),升级到bug修复版本
1.strace
2.pstack
3.pmap
4.gdb
代码以及堆栈
1.strace命令-根据指定进程的所有系统调用,并统计所花费时间(微秒级): 语法格式:strace -T -tt -e trace=all -p 51882.pstack-显示指定进程的栈跟踪信息语法格式:pstack [参数] 进程号码3.pmap命令 – 显示进程的内存映像信息语法格式:pmap [参数] 进程ID4.gdb命令 – GUN程序调试器语法格式:gdb [参数] 文件名
收藏
0 条评论
回复 删除
下一页