Исправление: Функция fn_get_sql возвращает SQL-текст для дескриптора в системной таблице Sysprocesses

Переводы статьи Переводы статьи
Код статьи: 325607 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описаны функциональные исправление для SQL Server 2000, который реализует следующие изменения:
  • Создание нового исправленияfn_get_sqlТабличная функция системы.
  • Данное исправление добавляет этих трех новых столбцов в конецmaster..sysprocessesСистемная таблица:
    • sql_handle(двоичный)
    • stmt_start(int)
    • stmt_end(int)

  • Данное исправление создает нового флага трассировки, флаг трассировки 2861.

Решение

Чтобы решить эту проблему, получите последний пакет обновления для Microsoft SQL Server 2000. Для получения дополнительных сведений обратитесь к следующей статье Базы Знаний Майкрософт::
290211Как получить последний пакет обновления для SQL Server 2000
Примечание.Рассмотренное ниже обновление было разработано после выпуска пакета обновления 3 (SP3) для SQL Server 2000..

Исправление файлов

Это исправление для SQL Server 2000, который реализуетfn_get_sqlfunction:.

Обратитесь в службу технической поддержки корпорации Майкрософт для получения исправления.Английская версия исправления содержит версии файлов, приведенные в следующей таблице (или более поздние).. Дата и время для файлов указаны во всеобщем скоординированном времени (UTC).. При просмотре сведений о файле, время изменяется на местное.. Чтобы узнать разницу между временем по Гринвичу и местным временем,Часовой поясвкладки в окне «Дата и время» панели управления.
   Date         Time      Version    Size              File name
   -----------------------------------------------------------------

   07/01/2002   4:50 PM   8.00.652   7,285 kilobytes   Sqlservr.exe
				
Примечание.Из-за зависимостей между файлами последние исправления или функция, которая содержит файлы могут содержать дополнительные файлы.

Существенный:Если требуется функциональность данного исправления, необходимо применить построения файла Sqlservr.exe, больше или равно 8.00.652, необходимо запустить Sp2_qfe_serv_uni.sql файлов, включенные в исправление. Для получения дополнительных сведений см. файл Readme.txt файлов, включенные в исправление файлах.

Статус

Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в начале данной статьи..Во-первых, этой проблемы появилось в SQL Server 2000 с пакетом обновления 3.

Дополнительная информация

Ниже приводится описание и синтаксисfn_get_sqlТабличная функция системы.

fn_get_sql

Возвращает текст SQL, который ссылается заданный дескриптор.

Синтаксис:

fn_get_sql ([@SqlHandle= ]SqlHandle)

Arguments

[@SqlHandle= ]SqlHandle

The binary handle value. SqlHandle isbinary(20)with no default.

Tables returned

Свернуть эту таблицуРазвернуть эту таблицу
Column nameData TypeОписание:
DBIDsmallintDatabase ID. NULL in the case of ad-hoc SQL statements.
objectidЦелоеID of the database object. NULL in the case of ad-hoc SQL statements.
НомерsmallintNumber in procedure grouping if grouped.0for entries that are not procedures. NULL in the case of ad-hoc SQL statements.
encryptedбитIndicates if the object is encrypted:
0 = Not encrypted
1 = Encrypted
TextTextSQL Text. NULL in the case of encrypted objects.

Remarks

Fn_get_sqlis a system table-valued function that returns the SQL text for the specified SQLHANDLE. You can obtain a valid SQLHANDLE from thesql_handleстолбецsysprocessesСистемная таблица.

If you pass a handle that no longer exists in cache,fn_get_sqlwill return an empty result set. If you pass an invalid handle, the batch will abort, and you receive the following error message:
Server: Msg 569, Level 16, State 1, Procedure fn_get_sql, Line 12 The handle passed to fn_get_sql was invalid.
SQL Server cannot cache some Transact-SQL statements, such as bulk operation statements and statements with string literals larger than 8 KB. Handles to those statements are not retrievable through thefn_get_sqlfunction:.

The text column is filtered for text that may contain passwords. Review the "Limiting Traces" topic in SQL Server Books Online for details about the security-related stored procedures that are not monitored.

Разрешения:

Only members of thesysadminfixed server role can run thefn_get_sqlfunction:.

ПРИМЕРЫ

The information returned by thefn_get_sqlfunction is similar to the DBCC INPUTBUFFER command. Если данный пользователь является членом домена, то при вводе имени пользователя используйте форматfn_get_sqlfunction in situations where DBCC INPUTBUFFER is limited, such as:
  • When events have more than 255 characters.
  • When you have to return the highest current nesting level of a stored procedure. For example, you have two stored procedures that are namedsp_1иsp_2. Еслиsp_1stored procedure calls thesp_2stored procedure, and you get the handle from thesysprocessessystem table whilesp_2is running, thefn_get_sqlfunction will return information aboutsp_2. Кроме тогоfn_get_sqlfunction returns the whole stored procedure at the highest current nesting level.
Database administrators can use thefn_get_sqlfunction to help diagnose problem processes. After an administrator identifies a problem server process ID (SPID), the administrator can retrieve the SQLHANDLE for that SPID, and then call thefn_get_sqlfunction with the handle and use the start and end offsets to determine the SQL text of the problem SPID. Например,:
DECLARE @Handle binary(20)
SELECT @Handle = sql_handle FROM sysprocesses WHERE spid = 52
SELECT * FROM ::fn_get_sql(@Handle) 
				
Можно также использоватьfn_get_sqlfunction to continuously monitor the server. For example, a client tool that periodically retrieves the SQLHANDLE and the statement start and end offsets from thesysprocessesСистемная таблица. The tool maintains a cache of SQL text, with the SQL handle as the unique key and the results of thefn_get_sqlfunction as the value. For each row in thesysprocessessystem table rowset, the tool looks up the text in it's cache based on the SQLHANDLE. If the text is not in the tool's cache, the tool then calls thefn_get_sqlfunction to get the text and save it in its cache.

Trace flag 2861

Trace flag 2861 instructs SQL Server to keep zero cost plans in cache, which SQL Server would typically not cache (such as simple ad-hoc queries, set statements, commit transaction and others).
  • If trace flag 2861 is turned on, thefn_get_sqlfunction can return the SQL text for activities that have zero cost plans. If trace flag 2861 is turned off, thefn_get_sqlfunction cannot return the SQL text for the activities with zero cost plans.
  • By default, trace flag 2861 is turned off when you apply this fix.

Remarks

The number of objects in the procedure cache increase when trace flag 2861 is turned on. Because the additional objects are so small, you will see a small increase in memory, which is taken up by the procedure cache.

SQL Server 2000 has an efficient algorithm to find any existing execution plan for any specified SQL statement. However, because of the increased number of objects stored in the procedure cache, it is possible that the time it takes for the relational engine to search for an existing plan may degrade and may adversely affect the performance of your system.

В системах, где размер базы данных — гораздо больше, чем размер памяти, система обычно некоторые недостатке свободной памяти ожидаемой. В случае нехватки памяти, память для других объектов в процессе отложенной записи будет освобождения объектов в кэше процедур. Это будет привязать размер кэша процедур и сведет к минимуму потенциального отрицательного влияния это изменение.

Однако в системах, где объем памяти больше, чем размер базы данных, система не обычно недостатке свободной памяти. Таким образом объекты не становятся недоступны из кэша процедуры из-за потребности в памяти и размера кэша процедур могут увеличиваться до точки, где он будет существенно повлиять на производительность.

Обратите внимание, негативно влияет на производительность системы, выполните следующие действия:
  1. Выключите флаг трассировки 2861.
  2. Выполните команду DBCC FREEPROCCACHE с помощью анализатора запросов. Необходимо перезапустить SQL Server.

Свойства

Код статьи: 325607 - Последний отзыв: 24 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2000 Standard Edition
Ключевые слова: 
kbhotfixserver kbqfe kbsqlserv2000sp3fix kbfix kbinfo kbsqlserv2000presp3fix kbmt KB325607 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:325607

Отправить отзыв

 

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