FIX: La funzione fn_get_sql restituisce testo SQL per l'handle della tabella di sistema Sysprocesses

Traduzione articoli Traduzione articoli
Identificativo articolo: 325607 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Questo articolo viene descritto un hotfix funzionale per SQL Server 2000, che implementa le seguenti modifiche:
  • La correzione rapida crea una nuova fn_get_sql sistema con valori di tabella funzione.
  • L'aggiornamento rapido aggiunge queste tre nuove colonne alla fine del master sysprocesses tabella di sistema:
    • sql_handle (binario)
    • stmt_start (int)
    • stmt_end (int)

  • L'aggiornamento rapido consente di creare un nuovo flag di traccia, il flag di traccia 2861.

Risoluzione

Per risolvere il problema, ottenere il service pack pi¨ recente per Microsoft SQL Server 2000. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
290211Come ottenere il service pack pi¨ recente per SQL Server 2000
Nota La seguente correzione rapida Ŕ stata creata prima del rilascio di Microsoft SQL Server 2000 Service Pack 3.

File di hotfix

╚ un hotfix per SQL Server 2000 implementa la funzione fn_get_sql .

Contattare il servizio supporto tecnico clienti Microsoft per ottenere la correzione. La versione di lingua inglese di questo aggiornamento rapido (hotfix) presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Le date e le ore per questi file sono indicati in UTC (Coordinated Universal Time). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e l'ora locale, utilizzare la scheda fuso orario dello strumento Data e ora del Pannello di controllo.
   Date         Time      Version    Size              File name
   -----------------------------------------------------------------

   07/01/2002   4:50 PM   8.00.652   7,285 kilobytes   Sqlservr.exe
				
Nota A causa delle dipendenze fra i file, la funzionalitÓ che contiene i file o l'aggiornamento rapido (hotfix) pi¨ recente pu˛ contenere anche ulteriori file.

importante Se si desidera che la funzionalitÓ di questa correzione, Ŕ necessario applicare una build di sqlservr.exe successiva o uguale a 8.00.652 e, Ŕ necessario eseguire il Sp2_qfe_serv_uni.sql file incluso in questa correzione. Per ulteriori informazioni, vedere il file Readme.txt file incluso nei file di correzione.

Status

Microsoft ha confermato che questo problema riguarda i prodotti Microsoft elencati all'inizio di questo articolo.Questo problema Ŕ stato innanzitutto corretto in SQL Server 2000 Service Pack 3.

Informazioni

Di seguito Ŕ una definizione e la sintassi per la funzione fn_get_sql di sistema con valori di tabella.

fn_get_sql

Restituisce il testo SQL per l'handle specificato.

Sintassi

fn_get_sql ([@ SqlHandle =] SqlHandle )

Argomenti

[@ SqlHandle =] SqlHandle

Il valore di handle binario. SqlHandle Ŕ binary(20) con nessun valore predefinito.

Tabelle restituite

Riduci questa tabellaEspandi questa tabella
nome di colonna tipo di dati Descrizione
DBID smallint ID del database. NULL in caso di istruzioni SQL ad hoc.
objectID int ID dell'oggetto database. NULL in caso di SQL ad hoc di istruzioni.
numero smallint Numero di procedura raggruppamento se raggruppati. 0 per voci che non sono procedure. NULL in caso di istruzioni SQL ad hoc.
crittografato bit Indica se l'oggetto viene crittografato:
0 = Non crittografata
1 = Crittografia
testo testo Testo SQL. NULL in caso di oggetti crittografati.

Note

Fn_get_sql Ŕ una funzione con valori di tabella di sistema che restituisce il testo SQL per il SQLHANDLE specificato. ╚ possibile ottenere un SQLHANDLE valido dalla colonna sql_handle della tabella sysprocesses tabella di sistema.

Se si passa un handle che non esiste pi¨ nella cache, fn_get_sql restituisce un set di risultati vuoto. Se si passa un handle non valido, verrÓ interrotto il batch di ed Ŕ visualizzato il seguente messaggio di errore:
Server: Messaggio 569, livello 16, stato 1, procedure fn_get_sql, 12 righe l'handle passato a fn_get_sql non valido.
SQL Server non Ŕ possibile memorizzare nella cache alcune istruzioni di Transact-SQL, ad esempio le istruzioni di operazione di massa e le istruzioni con valori letterali stringa maggiore di 8 KB. Handle per le istruzioni non sono recuperabili tramite la funzione fn_get_sql .

La colonna di testo viene filtrata per il testo potrebbe contenere password. Esaminare l'argomento "Limitazione delle tracce" nella documentazione in linea di SQL Server per informazioni dettagliate sulle relative alla protezione stored procedure non vengono monitorate.

Autorizzazioni

Solo i membri del ruolo server fisso sysadmin Ŕ in possono di eseguire la funzione fn_get_sql .

Esempi

Le informazioni restituite dalla funzione fn_get_sql sono simile al comando DBCC INPUTBUFFER. Utilizzare la funzione fn_get_sql nelle situazioni in cui DBCC INPUTBUFFER Ŕ limitata, ad esempio:
  • Quando gli eventi hanno pi¨ di 255 caratteri.
  • Quando Ŕ necessario restituire il massimo livello di nidificazione corrente di una stored procedure. Ad esempio, Ŕ necessario che due stored procedure sono denominate sp_1 e sp_2 . Se il sp_1 memorizzato chiamate di procedura il sp_2 stored procedure ed ottenere l'handle dalla tabella di sistema sysprocesses mentre sp_2 Ŕ in esecuzione, Ŕ necessario che la funzione fn_get_sql restituirÓ informazioni su sp_2 . Inoltre, la funzione fn_get_sql restituisce l'intera stored procedure nel massimo livello di nidificazione corrente.
Gli amministratori di database il fn_get_sql funzione consente di diagnosticare il problema processi. Dopo che un amministratore identifica un problema server ID di processo (SPID), l'amministratore pu˛ recuperare il SQLHANDLE per tale SPID e quindi chiamare la funzione fn_get_sql con l'handle e utilizzare gli offset di inizio e di fine per determinare il testo SQL del problema SPID. Ad esempio:
DECLARE @Handle binary(20)
SELECT @Handle = sql_handle FROM sysprocesses WHERE spid = 52
SELECT * FROM ::fn_get_sql(@Handle) 
				
Ŕ possibile, inoltre, utilizzare la funzione fn_get_sql per monitorare continuamente il server. Ad esempio, uno strumento di client che recupera periodicamente il SQLHANDLE e l'inizio dell'istruzione e la fine offset dalla tabella di sistema sysprocesses . Lo strumento mantiene una cache di testo SQL, con l'handle SQL come chiave univoca e i risultati della funzione fn_get_sql come valore. Per ogni riga nel rowset tabella sysprocesses sistema, lo strumento di ricerca di cache basato su SQLHANDLE il testo. Se il testo non Ŕ nella cache dello strumento, lo strumento chiama quindi la funzione fn_get_sql per ottenere il testo e salvarlo nella propria cache.

2861 Flag di traccia

Flag di traccia 2861 indica a SQL Server per mantenere piani zero costo nella cache, che in genere SQL Server non sarebbe cache (ad esempio query ad hoc semplice, istruzioni set, transazione di commit e altri).
  • Se si Ŕ il flag di traccia 2861 Ŕ attivato, la funzione fn_get_sql possibile restituire il testo SQL per le attivitÓ che prevede zero costo. Se il flag di traccia 2861 Ŕ disattivato, la funzione fn_get_sql non pu˛ restituire il testo SQL per le attivitÓ con zero piani di costo.
  • Per impostazione predefinita, il flag di traccia 2861 Ŕ disattivato quando si applica questa correzione.

Note

Il numero di oggetti nella cache delle procedure aumenta se il flag di traccia 2861 Ŕ attivato. PoichÚ altri oggetti sono talmente piccoli, verrÓ visualizzato un piccolo aumento in memoria, cache delle procedure Ŕ occupato.

In SQL Server 2000 Ŕ un algoritmo efficiente per trovare qualsiasi piano di esecuzione esistenti per qualsiasi istruzione SQL specificata. Tuttavia, a causa del numero maggiore di oggetti memorizzati nella cache delle procedure, Ŕ possibile che il tempo che necessario per il motore relazionale eseguire la ricerca per un piano esistente pu˛ influire negativamente e pu˛ influire negativamente sulle prestazioni del sistema.

In genere, nei sistemi in cui le dimensioni del database sono molto pi¨ le dimensioni della memoria grande, il sistema Ŕ in alcuni pressione della memoria prevista. Se la pressione di memoria tale che la memoria Ŕ necessaria per altri oggetti, il processo lazywriter verrÓ liberare memoria dagli oggetti nella cache delle procedure di controllo. Questo verrÓ associata la dimensione della cache procedure e riduce al minimo gli effetti negativi potenziali di questa modifica.

Tuttavia, nei sistemi in cui le dimensioni di memoria sono superiori rispetto alla dimensione del database, il sistema in genere non Ŕ sotto pressione della memoria. Di conseguenza, gli oggetti non sono disallocati dalla cache delle procedure a causa di esigenze di memoria e pu˛ aumentare la dimensione della cache procedura a un punto in cui influirÓ negativamente sulle prestazioni.

Se si nota un effetto negativo sulle prestazioni del sistema, attenersi alla seguente procedura:
  1. Disattivare il flag di traccia 2861.
  2. Eseguire il comando DBCC FREEPROCCACHE da Query Analyzer. Non Ŕ necessario riavviare SQL Server.

ProprietÓ

Identificativo articolo: 325607 - Ultima modifica: martedý 27 settembre 2005 - Revisione: 5.3
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2000 Standard Edition
Chiavi:á
kbmt kbhotfixserver kbqfe kbsqlserv2000sp3fix kbfix kbinfo kbsqlserv2000presp3fix KB325607 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 325607
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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