正确统计SQLServer的慢日志
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的慢日志的更多相关文章
- (转)对SQLSERVER数据库事务日志的疑问
本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/06/10/3130856.html 对SQLSERVER数据库事务日志的疑问 摸不透SQLS ...
- sqlserver 删掉日志文件ldf以后 救命语句
sqlserver 删掉日志文件ldf以后 救命步骤: 先新建一个新数据库, 删掉新建的 .mdb 用想要还原的mdb覆盖 执行下面的语句 ALTER DATABASE 'DB_Core' SET ...
- SQLSERVER手动增长日志文件和数据文件
原文:SQLSERVER手动增长日志文件和数据文件 SQLSERVER手动增长日志文件和数据文件 手动增长日志文件,实际上就是修改日志文件的大小 size 的单位是MB 下面设置日志文件大小是204 ...
- PHP 中如何正确统计中文字数
PHP 中如何正确统计中文字数?这个是困扰我很久的问题,PHP 中有很多函数可以计算字符串的长度,比如下面的例子,分别使用了 strlen,mb_strlen,mb_strwidth 这个三个函数去测 ...
- 简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)
在SQLSERVER,简单的组合sp_spaceused和sp_MSforeachtable这两个存储过程,可以方便的统计出用户数据表的大小,包括记录总数和空间占用情况,非常实用,在SqlServer ...
- SQLSERVER备份事务日志的作用
事务日志备份有以下3种类型 (1)纯日志备份:仅包含相隔一段时间的事务日志记录,而不包含任何大容量更改 (2)大容量操作日志备份.包括由大容量操作更改的日志和数据页,不支持时间点恢复 (3)尾日志备份 ...
- sqlserver中压缩日志文件
最近在转移数据,sqlserver的日志文件ldf,占用空间特别大,为了还原库,节省空间,所以压缩日志文件迫在眉睫.在网上找了一段代码: USE [master] GO ALTER DATABASE ...
- python 统计时间,写日志
python 统计时间使用time模块,写日志使用logging模块,这两个都是标准模板. 测试socket使用socket模块 # 统计时间 ---------------------- impor ...
- SqlServer 2014该日志未截断,因为其开始处的记录是挂起的复制操作或变更数据捕获
环境:AlwaysOn集群 操作系统:Windows Server 2008 R2 数据库: SQL Server 2014 错误提示:“该日志未截断,因为其开始处的记录是挂起的复制操作或变更数据捕获 ...
随机推荐
- hdu Bone Collector
入门级动态规划 #include"iostream" #include"string.h" #include"stdio.h" using ...
- Leetcode | N-Queens I & II
N-Queens I The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no ...
- Solr学习笔记之1、环境搭建
Solr学习笔记之1.环境搭建 一.下载相关安装包 1.JDK 2.Tomcat 3.Solr 此文所用软件包版本如下: 操作系统:Win7 64位 JDK:jdk-7u25-windows-i586 ...
- HDU 1176 经典dp
记录最晚时间 从time为2枚举到最晚时间 每个时间段的x轴节点都等于上一个时间段的可触及的最大馅饼数 #include<stdio.h> #include<string.h> ...
- Ubuntu 14.04 LTS 安装 VNC Viewer
1.修改镜像源: /etc/apt/sources.list将"http://archive.ubuntu.com/ubuntu/"替换为: http://cn.archive.u ...
- T-SQL笔记
主要是查询: select *|Cols_Name|聚合函数 from Table_Name;#这是基本的语法 聚合函数: count(*|Cols_Name) 计算表的数量 max(*|Cols ...
- 用c++builder读取一个一行有多行变量的文件
文件内容如下: C DXDY.INP FILE, IN FREE FORMAT ACROSS COLUMNS for 83658 Active CellsC 2013-5-25 上午 10:43 ...
- android imageButton 点击按钮前中后,按钮颜色的变化
我们在开发的过程中,往往为了美化界面的需要,会修改按钮的默认外观,而因为Android中的按钮有三种状态—默认,被点击,被选中.所以,如果要改变按钮的外观,需要对这三种情况都做出修改,也许在以往,我们 ...
- c语言作业
- BLE-NRF51822教程16-BLE地址
本教程基于 sdk9+sd8.0 51822的 BLE的设备地址 可以通过如下函数函数来获得 地址的设置可以调用如下函数设置. 官方的demo工程中,都是没有主动调用过 sd_ble_gap_addr ...