Hash Warning 事件類別

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

Hash Warning 事件類別可用來監視雜湊遞迴或雜湊作業期間發生雜湊停止的時間。

當組建輸入不符合可用記憶體時,就會發生雜湊遞迴,導致將輸入分割成多個個別處理的分割區。 如果其中任何一個分割區仍然無法放入可用的記憶體中,則會分割成個別處理的子分割區。 此分割程式會繼續執行,直到每個分割區符合可用記憶體,或直到達到最大遞迴層級為止(顯示在 IntegerData 資料行中)。

當雜湊作業達到最大遞迴等級時會發生 Hash Bailout,且切換到其他計畫以處理其他的分割資料。 雜湊救助通常是因為扭曲的資料而發生。

雜湊遞迴和雜湊救助會導致伺服器效能降低。 若要消除或減少雜湊遞迴和救助的頻率,請執行下列其中一項動作:

  • 請確定已聯結或分組之資料行上有統計資料。

  • 如果資料行上有統計資料,請加以更新。

  • 使用不同類型的聯結。 例如,如果適當,請改用 MERGE 或 LOOP 聯結。

  • 增加電腦上的可用記憶體。 雜湊遞迴或救助發生于沒有足夠的記憶體可以就地處理查詢,而且需要溢出到磁片時。

建立或更新聯結中涉及之資料行的統計資料,是減少發生之雜湊遞迴或救助次數的最有效方式。

注意

條件 寬限雜湊聯結 遞迴雜湊聯 結也用來描述雜湊救助。

重要

若要判斷查詢最佳化工具產生執行計畫時發生雜湊警告事件的位置,您也應該在追蹤中收集 Showplan 事件類別。 您可以選擇任何 Showplan 事件類別,但 Showplan Text 和 Showplan Text (Unencoded) 事件類別除外,不會傳回節點識別碼。 Showplan 中的節點識別碼會識別查詢最佳化工具在產生查詢執行計畫時執行的每個作業。 這些作業稱為 運算子 ,而 Showplan 中的每個運算子都有節點識別碼。 雜湊警告事件的 ObjectID 資料行會對應至 Showplans 中的節點識別碼,讓您可以判斷哪一個運算子或作業會造成錯誤。

雜湊警告事件類別資料行

資料行名稱 資料類型 描述 資料行識別碼 可篩選
ApplicationName nvarchar 建立 SQL Server 實例之連線的用戶端應用程式名稱。 此資料行會填入應用程式所傳遞的值,而不是以程式顯示的名稱填入。 10 Yes
ClientProcessID int 主機電腦指派給執行用戶端應用程式的進程識別碼。 如果用戶端提供用戶端進程識別碼,就會填入此資料行。 9 Yes
DatabaseID int 如果指定的實例未發出 USE database 語句,則為 USE database 語句或預設資料庫所指定的資料庫識別碼。 如果在追蹤中擷取到 ServerName 資料行且伺服器可用,SQL Server Profiler 便會顯示資料庫的名稱。 請使用 DB_ID 函數判斷資料庫的值。 3 Yes
DatabaseName nvarchar 使用者語句執行所在的資料庫名稱。 35 Yes
EventClass int 事件種類 = 55。 27 No
EventSequence int 要求內指定事件的順序。 51 No
EventSubClass int 事件子類別的類型。

0=遞迴

1=救助
21 Yes
GroupID int SQL 追蹤事件引發之工作負載群組的識別碼。 66 Yes
HostName nvarchar 用戶端執行所在的電腦名稱稱。 如果用戶端提供主機名稱,則會填入此資料行。 若要判斷主機名稱,請使用 HOST_NAME 函數。 8 Yes
IntegerData int 遞迴層級(僅限雜湊遞迴)。 25 Yes
IsSystem int 指出事件發生在系統進程或使用者進程上。 1 = 系統,0 = 使用者。 60 Yes
LoginName nvarchar 使用者登入的名稱(SQL Server 安全性登入或網域 > \ < 使用者名稱 > 形式的 < Windows 登入認證)。 11 Yes
LoginSid image 已登入使用者的安全性識別碼(SID)。 您可以在sys.server_principals目錄檢視中找到此資訊。 每一個 SID 對於伺服器中的每個登入而言都是唯一的。 41 Yes
NTDomainName nvarchar 使用者所屬的 Windows 網域。 7 Yes
NTUserName nvarchar Windows 使用者名稱。 6 Yes
ObjectID int 與重新分割相關的雜湊小組根目錄節點識別碼。 會對應至 Showplans 中的節點識別碼。 22 Yes
要求識別碼 int 包含陳述式之要求的識別碼。 49 Yes
ServerName nvarchar 正在追蹤之 SQL Server 實例的名稱。 26
SessionLoginName nvarchar 產生會話之使用者的登入名稱。 例如,如果您使用 Login1 連接到 SQL Server,並以 Login2 的形式執行語句,SessionLoginName 會顯示 Login1,而 LoginName 會顯示 Login2。 此資料行會顯示 SQL Server 和 Windows 登入。 64 Yes
SPID int 事件發生所在之工作階段的識別碼。 12 Yes
StartTime datetime 如果有的話,事件開始的時間。 14 Yes
TransactionID bigint 交易的系統指派識別碼。 4 Yes
XactSequence bigint 描述目前交易的權杖。 50 Yes

另請參閱

sp_trace_setevent (Transact-SQL)
聯結