MySQL数据库慢的排查思路
数据库慢,如何排查?以下是总结的一些思路。
数据库应用,常见两种类型:CPU密集型和I/O密集型。因此,我们在排查数据库问题时,通常是从这两方面入手的。
CPU密集型的数据库,性能问题有以下几种:
1.复杂的查询语句、存储过程、触发器、自定义函数等;
2.锁竞争问题;
3.并发量大。
解决问题的思路:
1.通过慢查询日志,找出相关语句,优化查询语句调整索引策略。还可以将复杂存储过程、触发器、自定义函数交由应用代码实现;
2.根据infomation_schema中的innodb_trx、innodb_locks、innodb_lock_watis三种表,找出锁的事务与开发协调。如果场景允许,可以考虑把事务隔离级别降到读提交。
3.做读写分离、水平拆分。或者增加缓存层,让高并发的读写压力由缓存层消化;
4.调整mysql跟cpu相关参数,这里不一一罗列。
I/O密集型的数据库,性能问题有以下几种:
1.投影了所有字段、全表扫描、表结构设计、索引设计问题等;
2.内存缓冲区设置过小,造成了过多的磁盘I/O;
3.网络带宽较小(常见于分布式系统中)。
解决问题的思路:
1.通过慢查询日志,找出执行时间久,而且结果集大的语句。减少投影的字段,只选择必要的字段做投影,优化表结构与索引设计;
2.调整内存缓冲区、日志刷新、刷新方法等等参数的设置,这里不一一罗列;
3.提升网络带宽,调整内核参数。
如果上述措施还不能解决问题或者效果不明显,可以考虑扩容。扩容分为:纵向扩展和横向扩展。可参考https://www.cnblogs.com/makai/p/11583302.html这篇文章
纵向扩展:一般用于解决响应时间长的问题。增加CPU计算能力可以减少响应时间,增加内存可以减少磁盘I/O,并将磁盘做raid5、10、01或者直接使用SSD提升I/O处理能力;
横向扩展:一般用于解决高并发量问题。比如做简单的读写分离、使用mycat将数据量做分片等,尽量将单机压力分担出去。
这里提到了解决高并发量的问题,其实还可以用异步的方式,将压力前移到缓存层,降低写入压力;同时,缓存一些热点数据,也能大大减轻读压力。
原文地址:https://www.cnblogs.com/newcomer2012/p/15225074.html
- 了解学习速率以及它如何提高深度学习的表现
- 分布式消息队列 RocketMQ源码解析:事务消息
- WordPress用Windows主机设置伪静态方法
- PHP页面跳转代码
- 分布式事务 TCC-Transaction 源码解析 —— 调试环境搭建
- 机器学习入门——使用python进行监督学习
- 推荐算法的介绍,第一部分——协同过滤与奇异值分解
- 在ASP中实现UNIX时间戳
- 【学术】厉害了我的哥,国外技术大咖仿造了谷歌的Arts &Culture,找到古代的“你”
- 【技巧】应赛技巧,教你如何在Kaggle比赛中排在前1%
- 熔断器 Hystrix 源码解析 —— 命令执行(一)之正常执行逻辑
- 智能主题检测与无监督机器学习:识别颜色教程
- 如何下载安装Weka机器学习工作平台
- Dubbo 源码解析 —— LoadBalance
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 用这10个小技巧加速Python编程
- Dijkstra算法及其C++实现
- WPF 启动屏幕键盘
- dotnet 里的那些锁 AutoResetEvent 用法
- MySQL是如何实现事务的ACID
- 白话K8S核心组件概念
- k8s 架构、基本概念及命令
- Java API 连接 Hbase示例
- 点线图和阶梯图的画法
- 添加直线的两种方式
- nginx fastcgi模块ngx_http_fastcgi_module详细解析、使用手册、完整翻译
- Chrome代码调试指南
- Maven安装与配置
- CentOS7安装elk,并监控Nginx的access.log日志
- Aria2 + Rclone 实现离线下载 | 完美脚本配置 | 解决无法上传问题