mysql的SQL性能监控

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

1、慢查询

1.1、慢查询的作用

慢查询的主要作用是将执行超过一定时间的sql语句记录到慢查询日志文件,方便找出有性能问题的sql,然后我们可以针对这些sql进行分析调优。

和慢查询相关的参数有三个:

long_query_time参数设置时间,执行时间大于该参数设置时间的sql都会被记录下来,支持小于1秒的设置,不过一般设置为1秒,主要原因时小于1秒的sql太多了,而且执行计划在大数据量情况下小于1秒的一般是没全表扫描的,而小数据量小于1秒的,即便全表扫描也问题不大,除非是执行频率非常高。

slow_query_log参数设置是否打开慢查询日志的开关。

slow_query_log_file参数设置慢查询日志文件。

1.2、慢查询的设置

两种配置方式,一种是通过命令配置,可以即时生效,但重启服务后失效。示例如下:

root@laojiang:~> mysql -uroot -proot

set global long_query_time=1;

set global slow_query_log=on;

set global slow_query_log_file='/home/root/data/data/mysql-slow_1.log';

Exit

root@laojiang:~> mysql -uroot -proot

show variables like '%_query_%';

第二种方式是修改配置文件,然后重启服务,如下:

root@laojiang:~/etc> vi mysql.ini

[mysqld]

long_query_time=1

slow_query_log=ON

slow_query_log_file=/home/root/data/data/mysql-slow_2.log

root@laojiang:~/etc> service mysql stop

root@laojiang:~/etc> service mysql start



1.3、慢查询示例

进入命令窗口执行查询语句:

root@laojiang:~> mysql -uroot -proot

mysql> select count(*) from performance.order_line where ol_dist_info like '%abcdefg%' or ol_dist_info like '%hijk%';

查看慢查询日志文件:

root@laojiang:~/data/data> tail -f mysql-slow_2.log



1.4、系统慢查询状态检查

mysql> show global status like '%slow%';

+---------------------+-------+

| Variable_name    | Value |

+---------------------+-------+

| Slow_launch_threads | 0     |

| Slow_queries        | 4148 |

+---------------------+-------+

打开慢查询日志可能会对系统性能有一点点影响,如果MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响又小。



1.5、mysqldumpslow命令

慢查询日志有可能会有很多重复的sql语句,我们如何过滤呢?Mysql有自带的命令mysqldumpslow可进行查询,例下列命令可以查出访问次数最多的20个sql语句

mysqldumpslow -s c -t 20 host-slow.log

2、当前系统正在执行的sql

show processlist以及show full processlist可以查看mysql当前正在执行的sql语句,以便找到当前消耗资源的sql。第2个命令可以查看完整的正在执行的sql语句。

3、sql执行各阶段所花费的时间

通过mysql自带profiling(性能分析)工具可以诊断某个sql各个执行阶段消耗的时间,每个执行阶段在cpu  disk io等方面的消耗情况。

mysql> show variables like '%profiling%';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| have_profiling         | YES   |

| profiling              | OFF   |

| profiling_history_size | 15    |

+------------------------+-------+



mysql> set global profiling=1;



mysql> show variables like '%profiling%';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| have_profiling         | YES   |

| profiling              | ON    |

| profiling_history_size | 15    |

+------------------------+-------+

mysql> select count(*) from test_info;

+----------+

| count(*) |

+----------+

| 10000000 |

+----------+ 

mysql> show  profiles;

+----------+------------+--------------------------------------+

| Query_ID | Duration   | Query                                |

+----------+------------+--------------------------------------+

|        1 | 0.00014900 | 1                                    |

|        2 | 0.00007725 | set global profiling=1               |

|        3 | 0.00059175 | show variables like '%profiling%'    |

|        4 | 2.83227700 | select count(*) from test_info |

+----------+------------+--------------------------------------+ 

mysql> show profile for query 4;

+----------------------+----------+

| Status               | Duration |

+----------------------+----------+

| starting             | 0.000067 |

| checking permissions | 0.000007 |

| Opening tables       | 0.000021 |

| init                 | 0.000017 |

| System lock          | 0.000008 |

| optimizing           | 0.000007 |

| statistics           | 0.000016 |

| preparing            | 0.000015 |

| executing            | 0.000003 |

| Sending data         | 2.831913 |

| end                  | 0.000015 |

| query end            | 0.000009 |

| closing tables       | 0.000015 |

| freeing items        | 0.000141 |

| cleaning up          | 0.000024 |

+----------------------+----------+

15 rows in set, 1 warning (0.00 sec)

4、sql执行状态

这些状态在show processlist和show profile for query n中会出现,所谓sql执行状态,就是只sql执行的步骤,可以查到当前sql正在做什么,这个在oracle中对应就是sql的等待事件。




     本文转自aaron428 51CTO博客,原文链接http://blog.51cto.com/aaronsa/1728263:,如需转载请自行联系原作者



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
348
分享
相关文章
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
【YashanDB知识库】如何将mysql含有group by的SQL转换成崖山支持的SQL
本文探讨了在YashanDB(崖山数据库)中执行某些SQL语句时出现的报错问题,对比了MySQL的成功执行结果。问题源于SQL-92标准对非聚合列的严格限制,要求这些列必须出现在GROUP BY子句中,而SQL:1999及更高版本允许非聚合列直接出现在选择列中。YashanDB和Oracle遵循SQL-92标准,因此会报错。文章提供了两种解决方法:使用聚合函数处理非聚合列,或将GROUP BY与ORDER BY拆分为两层查询。最后总结指出,SQL-92标准更为严谨合理,建议开发者遵循此规范以避免潜在问题。
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
68 9
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
81 3
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
63 1
【YashanDB 知识库】如何将 mysql 含有 group by 的 SQL 转换成崖山支持的 SQL
在崖山数据库中执行某些 SQL 语句时出现报错(YAS-04316 not a single-group group function),而这些语句在 MySQL 中能成功执行。原因是崖山遵循 SQL-92 标准,不允许选择列表中包含未在 GROUP BY 子句中指定的非聚合列,而 MySQL 默认允许这种操作。解决办法包括:使用聚合函数处理非聚合列或拆分查询为两层,先进行 GROUP BY 再排序。总结来说,SQL-92 更严格,确保数据一致性,MySQL 在 5.7 及以上版本也默认遵循此标准。
MySQL原理简介—10.SQL语句和执行计划
本文介绍了MySQL执行计划的相关概念及其优化方法。首先解释了什么是执行计划,它是SQL语句在查询时如何检索、筛选和排序数据的过程。接着详细描述了执行计划中常见的访问类型,如const、ref、range、index和all等,并分析了它们的性能特点。文中还探讨了多表关联查询的原理及优化策略,包括驱动表和被驱动表的选择。此外,文章讨论了全表扫描和索引的成本计算方法,以及MySQL如何通过成本估算选择最优执行计划。最后,介绍了explain命令的各个参数含义,帮助理解查询优化器的工作机制。通过这些内容,读者可以更好地理解和优化SQL查询性能。
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
205 82
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等