FIX: 的 fn_get_sql 函式傳回的控制代碼的 SQL 文字 Sysprocesses 系統資料表中

文章翻譯 文章翻譯
文章編號: 325607 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴實作下列變更的 SQL Server 2000 功能的 Hotfix:
  • 此 Hotfix 會建立一個新 fn_get_sql 系統資料表值函式。
  • Hotfix 會將這三個新資料行加入至 母片的結尾sysprocesses 系統資料表:
    • sql_handle(二進位)
    • stmt_start() int
    • stmt_end() int

  • 此 Hotfix 會建立新的追蹤旗標、 追蹤旗標 2861年。

解決方案

如果要解決這個問題,取得最新的 Service Pack,Microsoft SQL Server 2000。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
290211如何取得最新的 SQL Server 2000 Service Pack
附註Microsoft SQL Server 2000 Service Pack 3 發行之前建立下列的 Hotfix。

Hotfix 檔案

沒有實作 fn_get_sql 函式的 SQL Server 2000 的 Hotfix。

請連絡 Microsoft 產品支援服務以取得此修正程式。此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用 [中日期] 和 [時間] 工具,在 [控制台] 中的 [時區] 索引標籤]。
   Date         Time      Version    Size              File name
   -----------------------------------------------------------------

   07/01/2002   4:50 PM   8.00.652   7,285 kilobytes   Sqlservr.exe
				
附註由於檔案相依性最新版 Hotfix 或包含檔案的功能也可能包含其他檔案。

重要 如果您想此修正程式的功能,必須套用 Sqlservr.exe 組建晚於或等於 8.00.652,而您必須執行 [Sp2_qfe_serv_uni.sql 包含在此修正程式的檔案。如需詳細資訊,請參閱 [Readme.txt 包括在修正程式檔案的檔案。

狀況說明

Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的問題。這個問題,首先已經在 Microsoft SQL Server 2000 Service Pack 3 中獲得修正。

其他相關資訊

以下是一個定義和 fn_get_sql 系統資料表值函式的語法。

fn_get_sql

傳回為指定的控制代碼所參考的 SQL 文字。

語法

fn_get_sql ([@ SqlHandle =] SqlHandle)

引數

[@ SqlHandle =]SqlHandle

二進位的控制代碼值。SqlHandle 是 binary(20) 與沒有預設值。

傳回的資料表

摺疊此表格展開此表格
資料行名稱資料型別描述
dbidsmallint資料庫識別碼。在臨機操作的 SQL 陳述式的情況中有空值。
objectidint資料庫物件識別碼。NULL 在臨機操作 SQL 的情況下陳述式。
數字smallint群組若群組的程序中的數字。0 表示不是程序的項目。在臨機操作的 SQL 陳述式的情況中有空值。
加密位元指示是否物件加密:
0 = 不加密
1 = 已加密
文字文字SQL 文字。有空值加密物件的情況。

註解

Fn_get_sql 是系統資料表值函式為指定 SQLHANDLE 傳回 SQL 文字。您可以從 sysprocesses 系統資料表 sql_handle 資料行取得有效 SQLHANDLE。

如果您在快取中傳遞不存在的控制代碼,fn_get_sql 會傳回空的結果集。如果您傳遞無效的控制代碼,即將中止批次,並且您會收到下列錯誤訊息:
伺服器: 訊息 569,層級 16 狀態 1 程序 fn_get_sql 第 12 行傳遞至 fn_get_sql 之控制代碼無效。
SQL Server 無法快取某些 Transact-SQL 陳述式的如大量作業陳述式及陳述式使用字串常值大於 8 KB。 這些陳述式的控制代碼不會擷取透過 fn_get_sql 函數。

文字資料行篩選的文字可能包含密碼。檢閱詳細資料之安全性相關的預存程序不會被監視 「 限制追蹤主題 SQL Server 線上叢書 》 中。

權限

只有 系統管理員 (sysadmin) 固定的伺服器角色的成員可以執行 fn_get_sql 函數。

範例

fn_get_sql 函數所傳回的資訊很類似 DBCC INPUTBUFFER 命令。在 DBCC INPUTBUFFER 例如有限的情況中使用 fn_get_sql 函數:
  • 當事件有超過 255 個字元。
  • 當您需要將最高目前巢狀層次的預存程序。比方說您有兩個預存的程序,具名 sp_1sp_2。如果 sp_1 預存程序呼叫 sp_2 預存程序,並 sp_2 正在執行時,從 sysprocesses 系統資料表取得控制代碼,fn_get_sql 函數會傳回 sp_2 的相關資訊。此外,fn_get_sql 函式會傳回整個預存程序最高的目前巢狀層級。
資料庫系統管理員可以使用 fn_get_sql 函數,來協助診斷問題的處理程序。系統管理員識別問題伺服器處理序識別碼 (SPID) 之後系統管理員可以為該 SPID 擷取 [SQLHANDLE 和再呼叫 fn_get_sql 函式與控制代碼和使用開始和結束位移來判斷問題的 SPID 的 SQL 文字。例如:
DECLARE @Handle binary(20)
SELECT @Handle = sql_handle FROM sysprocesses WHERE spid = 52
SELECT * FROM ::fn_get_sql(@Handle) 
				
您也可以使用 fn_get_sql 函式持續監視伺服器。比方說,定期擷取 [SQLHANDLE 和陳述式開始和結束的用戶端工具位移 sysprocesses 系統資料表中。工具會維持與 SQL 控制代碼為唯一的索引鍵和 fn_get_sql 函式做為值的結果的 SQL 文字的快取。針對 sysprocesses 系統資料表的資料列集每一列,工具會查看它的根據快取 [SQLHANDLE 中文字。如果文字不是工具的快取,工具會再呼叫 fn_get_sql 函式,以取得文字,並將它儲存在其快取中。

追蹤旗標 2861

追蹤旗標 2861年指示 SQL Server,以保留零成本計劃中快取通常不快取 SQL Server 會 (如簡單的臨機操作查詢、 組陳述式、 認可交易和其他人)。
  • 如果追蹤旗標 2861年亮 fn_get_sql 函式可傳回 SQL 文字有零成本計劃的活動。如果追蹤旗標 2861年關閉 fn_get_sql 函式不能傳回具有零成本計劃活動的 SQL 文字。
  • 預設情況下,追蹤旗標 2861年已關閉當您套用此修正程式。

註解

在程序快取中的物件數目增加追蹤旗標 2861年處於開啟狀態時。因為額外的物件都這麼小,您將會看到小型增加程序快取所佔用的記憶體中。

SQL Server 2000 具有有效率的演算法,若要尋找任何現有的執行計劃的任何指定的 SQL 陳述式。不過,因為儲存在程序快取中的物件數量增加,就可能關聯式引擎來搜尋現有的計劃所花費的時間可能會降低,和可能會拖累系統效能。

通常,資料庫大小值遠大於記憶體大小的系統上系統是在一些預期的記憶體壓力之下。如果記憶體壓力是記憶體是必要的其他物件,延遲寫入器處理序將會解除配置程序快取中的物件。這將會繫結的程序快取大小,並減少潛在的負面影響這項變更。

不過,記憶體大小大於資料庫大小的系統上系統處於通常不在記憶體壓力之下。解除因此,物件未配置從程序快取因為的記憶體需求,而且程序快取大小可以增長到點,其中它將會對效能有不利的影響。

如果對系統效能的負面影響,您注意,請依照下列步驟執行:
  1. 關閉追蹤旗標 2861年。
  2. 從查詢分析器執行 DBCC FREEPROCCACHE 命令。 您沒有重新啟動 SQL Server。

屬性

文章編號: 325607 - 上次校閱: 2005年9月27日 - 版次: 5.3
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
關鍵字:?
kbmt kbhotfixserver kbqfe kbsqlserv2000sp3fix kbfix kbinfo kbsqlserv2000presp3fix KB325607 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:325607
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com