正确统计SQLServer的慢日志

简介:

作者:方波

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

 

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

 

下面是一个报表的例子:

 

t_1352046453

 

 

t_1353311742

 

t_1355029806

 

t_1356408529

 

 

我们需要得到某一个时间段的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大快照的一段记录:

 

t_1409019548

 

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

 

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 运维 监控
API明细日志及运维统计日志全面提升API可运维性
在数字化转型的大潮中,数据已成为企业最宝贵的资产之一。而数据服务API可快速为数据应用提供数据接口。面对越来越多的API以及越来越多的应用调用,如何快速查看API的服务情况、异常情况及影响范围,以及查看API的调用详情,进行API的性能优化、错误排查变得越来越重要,本文将介绍如何配置和开通API运维统计及明细日志,以及如何查看日志进行介绍。
880 0
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
378 0
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
388 3
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
1573 3
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
1019 13
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
704 9
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
410 6
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?