`

[转] 定位效率底的 SQL

 
阅读更多


转自:http://blog.zol.com.cn/2210/article_2209910.html

般通过以下两种方式定位执行效率较低的 SQL 语句。

通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件,通过查看这个日志文件定位效率较低的 SQL 。
慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的 执行情况,同时对一些锁表操作进行优化。
下面我们举例说明一下,如何通过慢查询日志定位执行效率底的 SQL 语句:

开启慢查询日志 , 配置样例:

[mysqld]

log-slow-queries

在 my.cnf 配置文件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能生效。慢查询 日志将写入参数 DATADIR (数据目录)指定的路径下,默认文件名是 host_name-slow.log 。

和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。下例中演示了慢查询日志的设置和读取过程。

( 1 )首先查询一下 long_query_time 的值 。

mysql> show variables like 'long%';

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

| Variable_name | Value |

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

| long_query_time | 10 |

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

1 row in set (0.00 sec)

( 2 )为了方便测试,将修改慢查询时间为 5 秒。

mysql> set long_query_time=5;

Query OK, 0 rows affected (0.02 sec)

( 3 )依次执行下面两个查询语句。

第一个查询因为查询时间低于 5 秒而不会出现在慢查询日志中:

mysql> select count(*) from order2008;

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

| count(*) |

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

| 208 |

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

1 row in set (0.00 sec)

第二个查询因为查询时间大于 5 秒而应该出现在慢查询日志中:

mysql> select count(*) from t_user;

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

| count(*) |

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

| 6552961 |

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

1 row in set (11.07 sec)

( 4 )查看慢查询日志。

[root@localhost mysql]# more localhost-slow.log

# Time: 081026 19:46:34

# User@Host: root[root] @ localhost []

# Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961

select count(*) from t_user;

从上面日志中,可以发现查询时间超过 5 秒的 SQL ,而小于 5 秒的则没有出现在此日志中。

如果慢查询日志中记录内容很多,可以使用 mysqldumpslow 工具( MySQL 客户端安装自带)来对慢查询日志进行分类汇总。下例中对日志文件 mysql_master-slow.log 进行了分类汇总,只显示汇总后摘要结果:

[root@mysql_master mysql_data]# mysqldumpslow mysql_master-slow.log

Reading mysql slow query log from mysql_master-slow.log

Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql_master

select count(N) from t_user;

对于 SQL 文本完全一致,只是变量不同的语句, mysqldumpslow 将会自动视为同一个语句进行统计,变量值用 N 来代替。这个统计结果将大大增加用户阅读慢查询日志的效率,并迅速定位系统的 SQL 瓶颈。

注意:慢查询日志对于我们发现应用中有性能问题的 SQL 很有帮助,建议正常情况下,打开此日志并经常查看分析。
分享到:
评论

相关推荐

    Mysql效率优化定位较低sql的两种方式

    SQL 语句,用 –log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件,通过查看这个日志文件定位效率较低的 SQL 。 慢查询日志在查询结束...

    sql server 查看执行效率不高的语句

    因此,掌握如何查看和分析执行效率不高的SQL语句是DBA(数据库管理员)和开发人员必备的技能之一。 SQL Server提供了丰富的DMV(动态管理视图)和系统存储过程,用于监控和诊断数据库的运行状态。其中,`sys.dm_...

    Mysql优化、定位执行效率低的SQL、索引底层实现原理、SQL场景分析、常用SQL优化、查询索引选择、数据类型优化、锁介绍

    Mysql优化、定位执行效率低的SQL、索引底层实现原理、SQL场景分析、常用SQL优化、查询索引选择、数据类型优化、锁介绍

    oracle 定位sql语句

    4. **定位资源消耗大的SQL**:可以查询`v$sql`视图,通过`disk_reads`和`buffer_gets`等指标来找出那些执行效率低下的SQL语句,例如`select sql_text from v$sqlwhere disk_reads > 1000 or (executions > 0 and ...

    显示 sql 执行效率.

    ### 显示 SQL 执行效率 在数据库管理与优化过程中,SQL 语句的执行效率是至关重要的一个方面。本文将详细介绍如何通过 Oracle 的 SQL*Plus 工具来查看 SQL 语句的执行效率,并手动设置 SQL 语句的执行计划显示方式...

    sql查询效率

    ### SQL查询效率提升详解 #### 一、理解SQL查询优化的重要性 在当今数据驱动的世界里,高效地查询数据库成为了一项关键技能。SQL查询优化旨在减少处理查询所需的时间,从而提高系统的整体性能。优化不仅涉及编写更...

    如何写高效率的SQL

    在优化SQL查询以提高效率的过程中,有多个关键点需要关注。以下是从提供的文件内容中提炼出的关键知识点,旨在帮助开发者编写高效的SQL语句。 1. 使用索引 在编写SQL时,合理利用数据库索引是提高查询效率的重要...

    Sql效率查询

    通过以上分析,我们可以看出该脚本不仅能够帮助我们快速定位到资源消耗较大的SQL语句,还能提供丰富的统计数据帮助进一步优化这些查询。这对于维护大型数据库系统的稳定性和提升整体性能具有重要意义。

    access转换sql工具

    标题中的“access转换sql工具”指的是能够将Microsoft Access数据库转换为SQL语言的工具,这通常是为了将数据迁移至其他类型的SQL数据库系统,如MySQL或DB2。这些工具可以帮助用户更轻松地进行数据迁移,尤其在需要...

    利用索引提高SQLServer数据处理效率

    在SQL Server数据库中,索引是提升数据处理效率的关键手段,尤其对于联机事务处理(OLTP)系统,快速的数据查询速度是系统性能的核心指标。本文主要探讨如何通过合理使用索引来优化SQL Server的性能。 首先,我们来...

    Archery 定位于 SQL 审核查询平台,旨在提升 DBA 的工作效率,支持多种数据库的 SQL 上线和查询.rar

    若没有平台工具支持,只能通过人工的方式来处理,效率低且质量没办法保证。为了规范操作,提高效率,大多数团队可能会自己开发或引入开源工具。这里介绍两款开源免费的 web 端 SQL 审核平台。 Yearning 是一款可满足...

    巧用工具快速定位问题sql

    1. **索引优化**:检查SQL语句中涉及的表是否已建立适当的索引,不合适的索引设计可能会导致查询效率低下。 2. **避免全表扫描**:尽可能减少使用如`SELECT * FROM table_name`这样的查询方式,因为它会导致全表...

    ORACLE+SQL效率优化.rar

    本资料“ORACLE+SQL效率优化.rar”深入探讨了如何优化Oracle中的SQL语句,以提高数据库性能,确保系统运行流畅。 首先,了解SQL执行效率的基础在于理解查询执行计划。Oracle使用解析器解析SQL语句,然后生成执行...

    SQL优化 SQL优化软件 SQL优化工具

    当SQL语句执行效率低下时,可能导致数据库响应时间延长,服务器负载增加,甚至影响整个应用程序的性能。因此,SQL优化对于保持系统的高效运行至关重要。 SQL优化工具通常提供以下功能: 1. **查询分析**:这些工具...

    SQL查詢效率優化

    在大数据时代,SQL查询效率优化是数据库管理与开发中的关键环节。无论是SQL Server、Oracle、MySQL还是DB2,提升查询速度对于系统性能至关重要。本文将深入探讨如何优化SQL查询,以实现更高效的数据处理。 首先,...

    纯真ip数据库转sqlserver

    在SQL Server 2000这样的关系型数据库管理系统中存储和查询IP数据可以极大地提高查询效率和准确性。将纯真IP数据库转换到SQL Server 2000涉及到以下几个关键步骤和知识点: 1. 数据库结构设计:首先,我们需要设计...

    sql语句优化建议

    - **非聚集索引**:对于有大量重复值的`date`字段,非聚集索引在范围查找时效率较低,因为数据物理上随机分布,需执行多次表扫描。 - **聚集索引**:在`date`上建立聚集索引,数据按顺序存储,重复值相邻,范围查找...

    sql性能分析工具效率分析

    本文将详细探讨"SQL性能分析工具效率分析"这一主题,旨在帮助你理解和利用这些工具来优化你的项目和SQL功能。 首先,SQL(Structured Query Language)是用于管理和处理关系型数据库的标准语言,其性能直接影响到...

    SQLMonitor oracle跟踪SQL工具

    针对Oracle数据库,有一款名为SQLMonitor的工具,它专为跟踪和监控SQL语句而设计,帮助开发者和DBA们找出程序操作的数据表,从而提升程序性能并进行精准的问题定位。本文将深入探讨SQLMonitor的功能、使用方法及其在...

Global site tag (gtag.js) - Google Analytics