一、簡介
Microsoft SQL Server 2005 使其查詢執行計劃(又稱作 Showplan)可以采用 XML 格式。而且可以使用任何一種 XML 技術(例如 XPath、XQuery 或 XSLT)來處理 XML Showplan。本文描述從其 XML Showplan 中提取查詢的估計執行成本的應用程序。Transact-SQL 所提取的成本可用於 Transact-SQL 窗口。使用該技術,用戶只能將那些成本低於預定阈值的查詢提交到運行 SQL Server 的服務器。這確保該服務器不會由於成本高、長時間運行的查詢而超載。
二、目標和受眾
本文的目標是 SQL Server 開發人員和數據庫管理員 (DBA)。它向數據庫管理員簡要介紹了 SQLCLR(公共語言運行庫)。用於提取 Showplan 的應用程序使用兩個 Microsoft Visual C# .Net 小程序,本文還詳細闡述 SQL Server 如何調用通過編譯這些程序生成的 DLL。該應用程序還使用了可用於查詢和提取 XML 數據中信息的 XPath 和 XQuery 技術。SQL Server 2005 為這兩種查詢語言提供內置支持。本文演示這兩種語言如何與 Transact-SQL 進行無縫地交互操作。
三、問題聲明SQL Server DBA 有時會遇到這種情況,即用戶在工作高峰期向服務器提交長時間運行的查詢,因而降低了服務器的響應速度。有兩種方法可以防止這一情況的發生:
1.
DBA 可使用 sp_configure 將 query governor cost limit 選項設置為特定阈值。(這是一個高級選項。)該阈值在整個服務器內是有效的。
2.
要影響連接的阈值,DBA 可以使用 SET QUERY_GOVERNOR_COST_LIMIT 語句。
可以想像一下需要更細粒度控制的情況。例如,用戶可能有三個等效但語法結構不同的查詢,並希望以執行速度盡可能最快的形式自動提交該查詢。此外,用戶還可能希望不執行任何估計執行成本超過特定阈值的查詢。以編程方式訪問查詢成本,將允許用戶通過控制基於估計執行成本的查詢提交過程來構建服務器友好的應用程序。
本文中描述的技術允許使用 SQLCLR 用戶定義的過程、XPath、XQuery 以及 Visual C# 技術,以編程方式訪問查詢的估計執行成本。如本文所述,通過用戶定義的過程使用 SQLCLR 來訪問 SQL Server 2005 的基本技術也可用於其他應用程序。
在 SQL Server 2005 中,可以使用 .NET Framework 中可用的任何編程語言(例如 Microsoft Visual Basic .Net 或 Visual C#)來定義用戶定義的類型、函數、過程以及聚合。從概念上講,在定義了用戶定義的實體後,就可以在 SQL Server 中使用該實體,就像是由 SQL Server 本身提供的實體一樣。例如,定義用戶定義的 T 類型之後,還可以定義帶有一列 T 類型的關系型表。定義了用戶定義的 P 過程後,就可以使用 EXEC P 調用該過程,就像 Transact-SQL 過程一樣。
四、解決方案 1:使用 CLR 存儲過程和進程內數據訪問提取查詢成本實現該解決方案
1.
使用 .Net Framework 語言(本文中使用 Visual C#)定義存儲過程,該過程將從給定查詢的 XML Showplan 中獲得查詢成本。
2.
使用正在運行 SQL Server 的服務器注冊此過程。此操作需要兩個子步驟:
1.
在 SQL Server 中注冊該程序集。
2.
創建一個引用外部 CLR 方法的存儲過程。