监视HASH Warning

Hash Warning 事件类可用于监视在哈希操作过程中何时发生哈希递归或哈希终止(哈希释放)。

当生成输入无法装入可用内存时,会发生哈希递归,这将导致输入分割成单独处理的多个分区。  如果这些分区中任何一个仍然大于可用内存,则该分区再拆分成子分区分别进行处理。 此拆分过程将一直持续到每个分区都小于可用内存,或达到最大递归级数(显示在 IntegerData 数据列中)。

当哈希操作达到其最大递归级数并转换到替换计划以处理剩余的分区数据时发生哈希释放。  哈希释放通常是由于倾斜数据造成的。哈希递归和哈希释放会导致服务器的性能降低。

若要消除或降低哈希递归和哈希释放的频率,请执行下列操作之一:

确保正在联接或分组的列上存在统计信息。

如果这些列上存在统计信息,请更新它们。

使用其他类型的联接。  例如,使用 MERGE 或 LOOP 联接(如果适合)。

增加计算机上的可用内存。  当没有足够的内存就地处理查询,因此这些查询需要溢出到磁盘时,会发生哈希递归或哈希释放。

创建或更新联接涉及的列上的统计信息是减少发生哈希递归或哈希释放次数最有效的方法。

结合默认跟踪,收集Hash Warning发生的次数:

DECLARE @Str NVARCHAR(MAX);

SELECT @Str = CONVERT(NVARCHAR(MAX), Value)

FROM :: FN_TRACE_GETINFO(DEFAULT) AS Tab

WHERE Tab.Property = 2

AND Traceid = 1;

SELECT COUNT(*) AS Cnt

FROM FN_TRACE_GETTABLE(@Str, DEFAULT) AS trace

INNER JOIN sys.trace_events te

ON te.trace_event_id = trace.EventClass

WHERE te.name LIKE ‘Hash Warning‘

AND trace.StartTime >= DATEADD(hh, -1, GETDATE());

时间: 2024-10-10 00:47:33

监视HASH Warning的相关文章

带您理解SQLSERVER是如何执行一个查询的

原文地址:http://www.cnblogs.com/lyhabc/p/3367274.html 看这篇文章之前,阁下可以先看一下下面的文章 SQLSERVER独特的任务调度算法"SQLOS" SQL Server SQLOS 的任务调度[转] 翻译自: http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/ http://www.codeproject.com/Articles/6303

SQL Profiler工具简介

SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收集查询信息: 分析性能: 诊断像死锁之类的问题: 调试T-SQL语句: 模拟重放SQL Server活动: 也可以使用SQL Profiler捕捉在SQL Server实例上执行的活动.这样的活动被称为Profiler跟踪. 1.Profiler跟踪 从开始=>所有程序=>Microsoft SQL Server 2008=>性能工具打开Profiler工具,也可以打开S

[网站性能3]SqlServer中Profiler的使用

原文链接:http://www.cnblogs.com/caishuhua226/p/3838060.html   http://www.cnblogs.com/lyhabc/articles/2946938.html http://www.cnblogs.com/lipeng0824/p/4417581.html(还需要学习) 1)菜单路径:开始--程序--Microsoft SQL Server 2008--性能工具--SQL Server Profiler 或者在SSMS里打开,工具--S

SQL Server Profiler工具

一.SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收集查询信息: 分析性能: 诊断像死锁之类的问题: 调试T-SQL语句: 模拟重放SQL Server活动: 也可以使用SQL Profiler捕捉在SQL Server实例上执行的活动.这样的活动被称为Profiler跟踪. 1.Profiler跟踪 从开始=>所有程序=>Microsoft SQL Server 2008=>性能工具

SQL Server Profiler(转载)

SQL Server Profiler工具 一.SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收集查询信息: 分析性能: 诊断像死锁之类的问题: 调试T-SQL语句: 模拟重放SQL Server活动: 也可以使用SQL Profiler捕捉在SQL Server实例上执行的活动.这样的活动被称为Profiler跟踪. 1.Profiler跟踪 从开始=>所有程序=>Microsoft SQ

SQL Server Profiler工具【转】

一.SQL Profiler工具简介 转自:http://www.cnblogs.com/kissdodog/p/3398523.html SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收集查询信息: 分析性能: 诊断像死锁之类的问题: 调试T-SQL语句: 模拟重放SQL Server活动: 也可以使用SQL Profiler捕捉在SQL Server实例上执行的活动.这样的活动被称为Profiler跟踪. 1.Profil

SQL Server中关于跟踪(Trace)那点事

前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简单的举几个应用场景: 在线生产库为何突然宕机?数百张数据表为何不翼而飞?刚打好补丁的系统为何屡遭黑手?新添加的信息表为何频频丢失?某张表字段的突然更改,究竟为何人所为?这些个匿名的访问背后,究竟是人是鬼?突然增加的增量数据,究竟是对是错?数百兆的日志爆炸式的增长背后又隐藏着什么?这一且的背后,是应用

SQL Server 默认跟踪 -- 捕获事件详解

SQL Server 默认跟踪 -- 捕获事件详解 哪些具体事件默认跟踪文件能够捕获到? --returns full list of events SELECT * FROM sys.trace_events --returns a full list of categories SELECT * FROM sys.trace_categories --returns a full list of subclass values SELECT * FROM sys.trace_subclass

查询内存溢出

首先我们来看一个带排序的查询,点击工具栏的显示包含实际的执行计划. 1 SELECT * FROM AdventureWorks2008R2.Person.Person WHERE FirstName LIKE 'w%' ORDER BY 1 从执行计划里可以看出,SELECT运算符包含了内存授予(Memory Grant)信息(一般情况下不会出现,这里是因为我们的语句包含排序操作).内存授予是KB为单位,是当执行计划中的一些运算符(像Sort/Hash等运算符)的执行,需要使用内存来完成——因