RDS的一个富有吸引力的服务是为用户提供慢日志的运行状况报告。报告从不同的维度(总执行时间,总执行次数,总逻辑读,总物理读)为用户提供TOP20的SQL。RDS希望在为用户提供稳定,快速服务的同时,用户可以从RDS得到更有个性化的优化建议。

这些信息很重要,用户可以有针对性地采取一些措施提高系统的性能。比如:对于那些总执行次数很多的SQL,用户可以在涉及到这些SQL的业务中加入缓存;如果某个SQL的总逻辑读很多,那么,用户极有必要为这些SQL涉及的字段添加缓存(从RDS缺失索引推荐服务的结果看,这类总逻辑读很多的SQL得到索引推荐的可能性很大)。

下面是一个报表的例子:

我们需要得到某一个时间段的SQL统计信息,比如某一天的运行状况。为了得到SQLServer的SQL统计信息,我们做了一些非常有意思的工作,原因在于SQLServer没有直接提供“某个时间段”的SQL运行信息。但是,SQLServer的sys.dm_exec_query_stats视图提供了SQL即时的运行统计信息(我们主要关注execution_count,total_elapsed_time,total_logical_reads,total_physical_reads这四个指标),这些统计信息是不断增长的,并且这些统计信息极有可能从缓存中换出。也就是说,如果某个SQL的统计信息不从缓存中换出,那么这些统计项的值是不断累加的,比如,昨天你看到execution_count是120,今天你会看到execution_count是230,到了明天,execution_count的值可能就是512。

为了得到“某个时间段的统计信息”,我们需要采取一些措施才行。核心的算法由 @鹿久 同学提供,其思想就是定期为sys.dm_exec_query_stats打快照(snapshot),然后根据快照计算快照的差值,从而得到某个时间段的运行状况统计信息。

例如,在1:00时,我们打了一次快照,此时某个SQL的execution_count的值是100, 在6:00时,我们再次打了一次快照,此时execution_count的值是120,在23:00时,我们又打了一次快照,此时execution_count的值是900。通过快照的信息,我们可以得知a) 1:00到6:00之间,该SQL执行了20次,b) 在1:00到23:00之间,该SQL执行了800次。我们可以大约得知,该SQL当天执行了800次。

RDS目前每一小时打一次快照,每8小时对当前的快照进行汇总,生成报表。下面是RDS大快照的一段记录:

此外,RDS重点对这些慢日志进行分析,提供了缺失索引推荐服务。

正确统计SQLServer的慢日志的更多相关文章

  1. (转)对SQLSERVER数据库事务日志的疑问

    本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/06/10/3130856.html 对SQLSERVER数据库事务日志的疑问 摸不透SQLS ...

  2. sqlserver 删掉日志文件ldf以后 救命语句

    sqlserver 删掉日志文件ldf以后  救命步骤: 先新建一个新数据库, 删掉新建的 .mdb 用想要还原的mdb覆盖 执行下面的语句 ALTER DATABASE 'DB_Core' SET ...

  3. SQLSERVER手动增长日志文件和数据文件

    原文:SQLSERVER手动增长日志文件和数据文件 SQLSERVER手动增长日志文件和数据文件 手动增长日志文件,实际上就是修改日志文件的大小  size 的单位是MB 下面设置日志文件大小是204 ...

  4. PHP 中如何正确统计中文字数

    PHP 中如何正确统计中文字数?这个是困扰我很久的问题,PHP 中有很多函数可以计算字符串的长度,比如下面的例子,分别使用了 strlen,mb_strlen,mb_strwidth 这个三个函数去测 ...

  5. 简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)

    在SQLSERVER,简单的组合sp_spaceused和sp_MSforeachtable这两个存储过程,可以方便的统计出用户数据表的大小,包括记录总数和空间占用情况,非常实用,在SqlServer ...

  6. SQLSERVER备份事务日志的作用

    事务日志备份有以下3种类型 (1)纯日志备份:仅包含相隔一段时间的事务日志记录,而不包含任何大容量更改 (2)大容量操作日志备份.包括由大容量操作更改的日志和数据页,不支持时间点恢复 (3)尾日志备份 ...

  7. sqlserver中压缩日志文件

    最近在转移数据,sqlserver的日志文件ldf,占用空间特别大,为了还原库,节省空间,所以压缩日志文件迫在眉睫.在网上找了一段代码: USE [master] GO ALTER DATABASE ...

  8. python 统计时间,写日志

    python 统计时间使用time模块,写日志使用logging模块,这两个都是标准模板. 测试socket使用socket模块 # 统计时间 ---------------------- impor ...

  9. SqlServer 2014该日志未截断,因为其开始处的记录是挂起的复制操作或变更数据捕获

    环境:AlwaysOn集群 操作系统:Windows Server 2008 R2 数据库: SQL Server 2014 错误提示:“该日志未截断,因为其开始处的记录是挂起的复制操作或变更数据捕获 ...

随机推荐

  1. Asp.Net 常用代码-备用

    1.DropDownList 复制 //DropDownList DropDownList2.Items.Clear(); foreach (ListItem li in DropDownList1. ...

  2. php目录文件下有php-ini-development和php.ini-production。

    1.apache: 只需要你解压到相应目录既可以,比如我这边将下载的apache文件解压到 C:\Apache24: bin目录下有: ApacheMonitor.exe和httpd.exe可用于服务 ...

  3. WTF,这到底是在做什么?

    1 <?php 2 $data = "<soap:Envelope>[...]</soap:Envelope>"; 3 $tuCurl = curl_ ...

  4. 【液晶模块系列基础视频】3.3fatfs接口函数的使用3

    ============================= 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:ht ...

  5. Eclipse问题提示

    记录下来以下两种方法: 一.只弹出简单的单词提示(如输入system.的时候自动弹出out.in等字段的那种): 点击eclipse上面的windows --> preferences --&g ...

  6. 使用 Intel GPA 与 分析3D程序和抓取模型

    原文链接在这里 http://dev.cra0kalo.com/?p=213 背景信息 Intel的GPA本身是一款图形分析软件,并没有设计从3D程序里抓取模型资源的功能,但这里作者是通过hook G ...

  7. Unix时间戳(Unix timestamp)转换工具

    http://tool.chinaz.com/Tools/unixtime.aspx 现在的Unix时间戳(Unix timestamp)是   1440732364         Unix时间戳( ...

  8. 使用php作linux自动执行脚本

    使用php作linux自动执行脚本 [来源] 达内    [编辑] 达内   [时间]2013-03-21 在作社区时, 时常需要统计上线人数等数据. 一般做法是, 把这段代码放在用户 login或者 ...

  9. 树莓派学Python博客收集

    http://www.geekfan.net/8657/  这个博客是控制LED,虽然不是原创地址不是这,但是我觉得排版比较好. http://my.oschina.net/RagingTyphoon ...

  10. delphi 创建DBASE和FOXPRO两类DBF数据文件的差异

    delphi 创建DBASE和FOXPRO两类DBF数据文件的差异,主要有几点: 1.创建方法不同 DBASE的创建方法: Self.Table1.Close; Self.Table1.Active ...