正确统计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重点对这些慢日志进行分析,提供了缺失索引推荐服务。

 

目前,众多的中小网站越来越认可RDS的服务,越来越多在阿里云平台上跑的应用选择将数据库布署在RDS。RDS正在追求更多的个性化服务,为中小网站的开发者提供更多的帮助。

时间: 2024-11-16 12:44:15

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

数据-sqlserver 触发器做日志

问题描述 sqlserver 触发器做日志 sqlserver2008数据库,有ST表有 ID Name type Company 等20多个字段,有STLOG表字段,用触发器做日志,将ST表的数据变化记录到STLOG表,记录登录名,时间,操作,被变更数据的字段和新旧值.字段中没改的不记录.例如 Ht , 2015-04-12, update, type 3至4,Company 1至2. 解决方案 http://content.edu-edu.com.cn/info/2010/07/21/000

设置SQLSERVER的错误日志数量与查找SQLSERVER安装错误日志

查找SQLSERVER安装错误的日志 如果我们能够把把日志贴到论坛上那么问题应该很快就能解决,下面说一下SQLSERVER安装日志存放的地方 我的SQLSERVER安装在C盘: C:Program FilesMicrosoft SQL Server90Setup BootstrapLOGFiles 大家的路径可能跟我的不一样 这个文件夹下包含了SQLSERVER安装过程中各个模块组件的详细安装日志情况 如果在安装的某个过程中卡住了,那么你可以点击某一个项,SQL就会弹出相应的日志文件,实际上那个

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

原文:SQLSERVER手动增长日志文件和数据文件 SQLSERVER手动增长日志文件和数据文件 手动增长日志文件,实际上就是修改日志文件的大小  size 的单位是MB 下面设置日志文件大小是2048MB ALTER DATABASE [GPOSDB] MODIFY FILE(name=GPOSDB_Log,size=2048) EXEC sys.[sp_helpdb] @dbname = [GPOSDB] -- sysname --收缩日志文件 USE [GPOSDB] GO ALTER D

如何正确统计中文字数?

统计|中文 PHP代码:--------------------------------------------------------------------------------function ccStrLen($str) #计算中英文混合字符串的长度 { $ccLen=0; $ascLen=strlen($str); $ind=0; $hasCC=ereg("[xA1-xFE]",$str); #判断是否有汉字 $hasAsc=ereg("[x01-xA0]&quo

命令行下Apache日志统计举例

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chenguang.blog.51cto.com/350944/1414820 Apache日志统计举例 加些来了解一下如何统计Apache的访问日志,一般可以用tail命令来实时查看日志文件变化,但是各种的应用系统中的日志会非常复杂,一堆长度超过你浏览极限的日志出现在你眼前时,你会觉得非常无奈,怎么办呢?这时可以用grep.sed.awk和sort等筛选工具帮助你解决这个问题.

多服务器的日志合并统计(1)

服务器|统计 本文介绍了一种将apache日志的cronolog轮循和webalizer合并统计的方法. 关键词:你完全不必耐心地看完下面的所有内容,因为结论无非以下2点: 1 用 cronolog 干净,安全地轮循apache"日"志: 2 用 sort -m 合并排序多个日志: 根据个人的使用经历: 1) 先介绍apache日志的合并方法: 2) 然后根据由此引出的问题说明日志轮循的必要性和解决方法,介绍如何通过cronolog对apache日志进行轮循: 中间有很多在设计日志合并

日志数据的关键字统计与报警实践指南

目的 统计业务日志中关键字的数量,并在统计数量达到一定条件时报警是业务日志的常见需求之一.本教程的目的是通过一个具体案例介绍如何对存储在日志服务产品中的数据进行关键字统计和报警.参照本教程的介绍,您可以快速走通日志的关键字统计.查询图表可视化和设置报警流程. 实战案例 使用前提 首先需要您将本地日志收集到日志服务(Log Service)中,如果您未使用过阿里云日志服务产品,可查看日志服务快速入门了解产品. 需要确保主账号的AccessKey是激活状态.AccessKey保持激活状态后您才能授权

深入SQLServer日志收缩

问题背景 SQLServer的日志是DB级别的这点和MySQL不同,多个DB就需要维护多个日志文件并且每个DB的日志文件可以有多个,所以从空间资源的角度来说这给云上的用户带来一些困扰,毕竟在云上磁盘空间是要收费的,除了性能他们也非常关心这些日志何时截断重用.何时收缩 问题探讨 事务日志 在理解事务日志基本概念的基础上我们来做个有关收缩的测试: --1. 构建测试用的日志 -- tpcc是我的测试DB,ITEM表是之前生成的一个测试表,这里不需要关心表内容 USE [tpcc] GO DECLAR

SqlServer中tempdb的日志机制原理解析及示例分享_MsSql

测试用例 我们分别在用户数据库(testpage),tempdb中创建相似对象t1,#t1,并在tempdb中创建创建非临时表,然后执行相应的insert脚本(用以产生日志),并记录执行时间用以比较用以比较说明tempdb"快" Code 用户数据库testpage use testpage go create table t1 ( id int identity(1,1) not null, str1 char(8000) ) declare @t datetime2=sysutcd