azure mysql慢查日志_SQL性能调优:查找慢查询的5种方法

原标题:SQL性能调优:查找慢查询的5种方法

SQL性能调优:查找慢查询的5种方法

SQL Server的查询运行太慢了,以至于大家都不太喜欢。我们来看看如何快速跟踪它们,以便您可以处理这些查询!

SQL性能调优是一场永无止尽的斗争。我不是一名DBA,而是一名15年的开发人员。我从开始用SQL Server数据库工作,一直到用Stackify的大SQL Azure数据库。这么多年来,我看到了一切。

在本文中,我将提供一些技巧,以便开发人员可以在SQL Server中查找SQL慢查询并进行性能调优。

查找SQL慢查询的5种方法

1

使用SQL DMVs查找慢查询

SQL Server的一个重要特性是内置的动态管理视图(DMVs)。他们可以提供大量关于各种主题的信息。

有几个DMVs提供关于查询统计信息,执行计划,近期查询等数据。这些可以一起使用来提供一些惊人的见解。

例如,下面的查询可用于查找使用最多读取,写入,工作时间(CPU)等的查询。

cd3d96f3837e345ea82b057b0ac07abe.png

查询的结果如下图所示。下面的图片是我制作的一款营销应用程序。您可以看到一个特定的查询(前一个查询)占用了所有的资源。

通过查找这个,我可以复制该SQL查询,看看是否有改进方法,添加索引等。

6feec37f82f17bd74501ff515a88eff0.png

优点:始终可用的基本汇总统计。

缺点:没有告诉您什么是查询。当查询被调用时无法可视化。

2

通过APM解决方案查询报告

许多应用程序性能管理(APM)工具的一大特性就是能够跟踪SQL查询。例如,Retrace跟踪跨越多个数据库提供程序(包括SQL Server)的SQL查询。Retrace可以告诉您一个查询执行了多少次,平均需要多长时间,以及调用哪些事务。对于SQL性能调优,这是真正有价值的信息。

APM解决方案通过在运行时对应用程序代码进行轻量级性能分析来收集这些数据。

以下是Retrace的应用程序仪表板的屏幕截图,显示了特定的应用程序,其中SQL查询花费的时间最长。

f5803c2c9728f6dcda36c2fff6bb7209.png

Retrace高级SQL查询

Retrace收集正在执行的每个SQL查询的性能统计信息。您可以搜索特定的查询来寻找潜在的问题。

d9796337c1d25a20bc1b0c46a16136a6.png

Retrace查看所有的SQL查询

通过选择一个查询,您可以看到该查询被调用的频率和时间。您还可以看到网页使用SQL查询以及它们的性能是如何受到影响的。

b3ebb994bc468451590b7939b50e7aea.png

随着时间的推移Retrace SQL性能

由于Retrace是一个轻量级的代码分析器并获取了ASP.NET请求跟踪,它甚至可以向您展示您的代码正在做什么。

下面是一个获取的跟踪,显示了所有的SQL查询以及有关代码正在做什么的细节。Retrace甚至可以在同一视图中显示日志消息。另外请注意,它显示了正在执行查询的服务器地址和数据库名称。您还可以看到返回了多少记录。

bff18cd989c7525c217d22f860d0ca53.png

Retrace Web事务跟踪

如您所见,Retrace提供了全面的SQL报告功能,作为其APM功能的一部分。它还在SQL查询中提供了多个监视和警报功能。

优点:每个应用程序和每个查询的详细报告。可以显示事务跟踪细节,详细说明如何使用查询。每月只需10美元。总是在安装后运行。

缺点:不提供每个查询的读写数量。

3

SQL Server Profiler(弃用!)

SQL Server Profiler已经存在很长一段时间了。如果您尝试实时查看针对数据库执行的SQL查询,那么这是非常有用的。

注意:Microsoft已经宣布SQL Server Profiler已被弃用!

SQL Profiler获取了与SQL Server交互的非常详细的事件:

登录连接,断开连接和故障。

SELECT,INSERT,UPDATE和DELETE语句。

RPC批处理状态调用。

存储过程的开始和结束。

存储过程中语句的开始和结束。

SQL批处理的开始和结束。

写入SQL Server错误日志的错误。

在数据库对象上获取或释放的锁。

打开光标。

权限检查。

e35bb2a501e50a4699fda9a86fd914f2.png

SQL Server Profiler

优点:非常详细的数据。

缺点:你必须手动打开它。这迫使您重新创建您要捕获的场景。它最终会消失,取而代之的是扩展事件。

4

SQL Server扩展事件

SQL Profiler已被SQL Server扩展事件所取代。这肯定会激怒很多人,但我理解Microsoft为什么要这样做。

扩展事件通过事件跟踪(ETW)工作。这是所有Microsoft相关技术公开诊断数据的常用方法。

ETW提供了更多的灵活性。作为一名开发人员,我可以轻松从SQL Server中获取ETW事件,来收集用于自定义用途的数据。这真的很酷,而且真的很强大。

d3b9e72be29ba608e7d0d87bd5aa74db.png

优点:更容易启用并运行。更容易开发定制解决方案。

缺点:相对较新,大多数人可能没有注意到它。

5

SQL Azure查询性能洞察

我将假设SQL Azure的性能报告是建立在扩展事件之上的。在Azure Portal中,您可以访问各种性能报告和优化技巧,这些信息非常有用。

注意:这些报告功能仅适用于在SQL Azure上的数据库。

在下面的屏幕截图中,您可以看到SQL Azure如何轻松地使用最多CPU,数据IO和Log IO的查询。

6d051489df0d8a58076e046a704f4744.png

SQL Azure热门查询

您还可以选择单个查询并获取更多详细信息以帮助SQL性能调优。

ef78ec97e5326eec6f3cb8dd53096057.png

SQL Azure查询详细信息

优点:基础报告很好

缺点:仅适用于Azure。没有跨越多个数据库的报告。

概要

下次您需要使用SQL Server进行性能调整时,您将有几个选项可以考虑。您将使用以上工具中的一个,具体取决于您要完成的任务。

如果您正在使用像Retrace这样的APM解决方案,请确保检查其内置的SQL性能功能。如果您没有APM解决方案或不确定它是什么,请务必阅读:什么是应用程序性能管理和开发人员在APM中需要的10个关键功能(https://stackify.com/what-is-apm/)。

每日推荐:

a2f13f1688fba283413500ef511f39fa.png

如您有任何疑问,

以及想要和优才小编沟通,

请联系:15201480058返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【赛迪网-IT技术报道】SQL Server数据库查询速度的原因有很多,常见的有以下几种:   1、没有索引或者没有用到索引(这是查询最常见的问题,是程序设计的缺陷)     2、I/O吞吐量小,形成了瓶颈效应。     3、没有创建计算列导致查询化。     4、内存不足     5、网络速度     6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)     7、锁或者死锁(这也是查询最常见的问题,是程序设计的缺陷)     8、sp_lock,sp_who,活动的用户看,原因是读写竞争资源。     9、返回了不必要的行和列     10、查询语句不好,没有化 ●可以通过以下方法查询 : 1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要。 2、纵向、横向分割表,减少表的尺寸(sp_spaceuse) 3、升级硬件 4、根据查询条件,建立索引,化索引、化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段。 5、提高网速。 6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。 配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。运行 Microsoft SQL Server? 2000时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的1.5倍。如果另外安装了全文检索功能,并打算运行Microsoft搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的3倍。将SQL Server max server memory服务器配置选项配置为物理内存的1.5倍(虚拟内存大小设置的一半)。 7、增加服务器CPU个数;但是必须 明白并行处理串行处理更需要资源例如内存。使用并行还是串行程是MsSQL自动评估选择的。单个任务分解成多个任务,就可以在处理器上运行。例如耽搁查询 的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。 8、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间。 like ''a%'' 使用索引 like ''%a'' 不使用索引用 like ''%a%'' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。 9、DB Server 和APPLication Server 分离;OLTP和OLAP分离 10、分布式分区视图可用于实现数据库服务器联合体。 联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制能够扩大一组服务器,以支持大型的多层 Web 站点的处理需要。有关更多信息,参见设计联合数据库服务器。(参照SQL帮助文件''分区视图'') a、在实现分区视图之前,必须先水平分区表 b、 在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上 运行。系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的。 11、重建索引 DBCC REINDEX ,DBCC INDEXDEFRAG,收缩数据和日志 DBCC SHRINKDB,DBCC SHRINKFILE. 设置自动收缩日志.对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。 在T-sql的写法上有很大的讲究,下面列出常见的要点:首先,DBMS处理查询计划的过程是这样的:   1、 查询语句的词法、语法检     2、 将语句提交给DBMS的查询化器     3、 化器做代数化和存取路径的化     4、 由预编译模块生成查询规划     5、 然后在合适的时间提交给系统处理执行     6、 最后将执行结果返回给用户。 其次,看一下SQL SERVER的数据存放的结构:一个页面的大小为8K(8060)字节,8个页面为一个盘区,按照B树存放。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值