CORRECTIF : la fonction fn_get_sql renvoie texte SQL pour pointeur dans la table système sysprocesses

Traductions disponibles Traductions disponibles
Numéro d'article: 325607 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article décrit un correctif fonctionnel pour SQL Server 2000 qui implémente les changements suivants :
  • Le correctif crée une nouvelle table fonction fn_get_sql système.
  • Le correctif logiciel ajoute ces trois nouvelles colonnes à la fin de la forme de base sysprocesses table système :
    • sql_handle (binaire)
    • stmt_start (int)
    • stmt_end (int)

  • Le correctif logiciel crée un nouvel indicateur de suivi, l'indicateur de suivi 2861.

Résolution

Pour résoudre ce problème, procurez-vous le dernier service pack Microsoft SQL Server 2000. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
290211 Comment obtenir le dernier pack de service SQL Server 2000
note Le correctif suivant a été créé avant la publication de Microsoft SQL Server 2000 Service Pack 3.

Fichier de correctif

Est un correctif pour SQL Server 2000 qui implémente la fonction fn_get_sql .

Contactez le support technique Microsoft pour obtenir le correctif. La version anglaise de ce correctif dispose les attributs de fichier (ou attributs de fichier version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont exprimées en temps universel coordonné (UTC). Lorsque vous affichez les informations de fichier, il est convertie en heure locale. Pour connaître le décalage entre l'heure UTC et l'heure locale, utilisez l'onglet Fuseau horaire dans l'outil Date et heure du Panneau de configuration.
   Date         Time      Version    Size              File name
   -----------------------------------------------------------------

   07/01/2002   4:50 PM   8.00.652   7,285 kilobytes   Sqlservr.exe
				
note En raison des dépendances de fichiers, la fonctionnalité qui contient les fichiers ou correctif plus récent peut également contenir des fichiers supplémentaires.

important Si vous souhaitez que les fonctionnalités de ce correctif, vous devez appliquer une version sqlservr.exe postérieure à ou égale à 8.00.652 et, vous devez exécuter le Sp2_qfe_serv_uni.sql fichier qui est inclus dans ce correctif. Pour plus d'informations, voir Lisezmoi.txt le fichier qui est inclus dans les fichiers du correctif.

Statut

Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés au début de cet article.Ce problème a été corrigé dans Microsoft SQL Server 2000 Service Pack 3.

Plus d'informations

Voici une définition et la syntaxe de la fonction de table système fn_get_sql .

fn_get_sql

Renvoie le texte SQL référencé pour le pointeur spécifié.

Syntaxe

fn_get_sql ([@SqlHandle =] SqlHandle )

Arguments

[@SqlHandle =] SqlHandle

La valeur binaire poignée. SqlHandle est binary(20) avec aucune valeur par défaut.

Tables renvoyés

Réduire ce tableauAgrandir ce tableau
nom de colonne type de données Description
dbid smallint Code de base de données. NULL dans le cas des instructions SQL ad hoc.
ObjectID int ID de l'objet de base de données. NULL dans le cas de SQL ad-hoc instructions.
nombre smallint Nombre dans une procédure regroupement Si regroupées. 0 pour les écritures ne sont pas des procédures. NULL dans le cas des instructions SQL ad hoc.
chiffré bits Indique si l'objet est chiffré :
0 = Non chiffré
1 = Chiffré
texte texte Texte SQL. NULL dans le cas des objets chiffrés.

Remarques

Fn_get_sql est une fonction de table système qui renvoie le texte SQL pour la SQLHANDLE spécifié. Vous pouvez obtenir un SQLHANDLE valide de la colonne sql_handle de la table système sysprocesses .

Si vous transmettez un handle qui n'existe plus dans le cache, fn_get_sql renvoie un jeu de résultats vide. Si vous transmettez un handle non valide, le lot s'interrompre et s'afficher le message d'erreur suivantes :
Serveur: Msg 569, Niveau 16, État 1, procédure fn_get_sql, ligne 12 le handle de passé à fn_get_sql non valide.
SQL Server ne peut pas mettre en cache des instructions Transact-SQL, telles que des instructions d'opération en bloc et d'instructions avec des littéraux de chaîne supérieure à 8 Ko. Poignées pour ces instructions ne sont pas extrait par la fonction fn_get_sql .

La colonne de texte est filtrée pour texte qui peut contenir des mots de passe. Consultez la rubrique « limitation traces » dans la documentation en ligne de SQL Server de pour détails sur les procédures stockées liées à la sécurité qui ne sont pas analysés.

Autorisations

Seuls les membres du rôle de serveur fixe sysadmin peuvent exécuter la fonction fn_get_sql .

Exemples

Les informations renvoyées par la fonction fn_get_sql équivaut à la commande DBCC INPUTBUFFER. Utilisez la fonction fn_get_sql dans les cas où DBCC INPUTBUFFER est limitée, telles que :
  • Lorsque les événements ont plus de 255 caractères.
  • Lorsque vous devez renvoyer le niveau le plus élevé des imbrication en cours d'une procédure stockée. Par exemple, vous avez deux procédures stockées qui sont nommées sp_1 et sp_2 . Si le sp_1 stocké des appels de procédure le sp_2 une procédure stockée, et obtenir le descripteur de la table système sysprocesses pendant l'exécution sp_2 , la fonction fn_get_sql renvoie sp_2 d'informations. En outre, la fonction fn_get_sql renvoie la procédure stockée tout au niveau imbrication en cours le plus élevé.
Les administrateurs de base de données peuvent utiliser la fonction fn_get_sql pour diagnostiquer les processus de problème. Après qu'un administrateur identifie un processus serveur problème ID (SPID), l'administrateur peut récupérer le SQLHANDLE pour ce SPID, puis appeler la fonction fn_get_sql avec la poignée et les décalages de début et de fin permet de déterminer le texte SQL du problème SPID. Par exemple :
DECLARE @Handle binary(20)
SELECT @Handle = sql_handle FROM sysprocesses WHERE spid = 52
SELECT * FROM ::fn_get_sql(@Handle) 
				
vous pouvez également utiliser la fonction fn_get_sql pour surveiller en permanence le serveur. Par exemple, un outil de clients qui régulièrement extrait le SQLHANDLE et l'instruction début et la fin décale à partir de la table système sysprocesses . L'outil maintient un cache de texte SQL, avec la poignée de SQL comme la clé unique et les résultats de la fonction fn_get_sql en tant que valeur. Pour chaque ligne dans le jeu de lignes sysprocesses système table, l'outil recherche le texte dans son cache selon le SQLHANDLE. Si le texte n'est pas dans le cache de l'outil, l'outil appelle ensuite la fonction fn_get_sql pour récupérer le texte et enregistrez-le dans le cache.

Indicateur 2861 de suivi

Indicateur de suivi 2861 ordonne à SQL Server pour conserver zéro plans de coût dans cache, SQL Server est généralement pas mettre en cache (tels que requêtes ad-hoc simple, instructions ensemble, transaction de validation et autres).
  • Si l'indicateur de suivi 2861 est activé, la fonction fn_get_sql peut renvoyer le texte SQL pour les activités ayant zéro plans de coût. Si l'indicateur de suivi 2861 est désactivée, la fonction fn_get_sql ne peut pas renvoyer le texte SQL pour les activités avec des zéro plans de coût.
  • Par défaut, l'indicateur de suivi 2861 est activée désactiver lorsque vous appliquez ce correctif.

Remarques

Le nombre d'objets dans le cache de procédure augmente lorsque l'indicateur de suivi 2861 est activé. Étant donné que les autres objets sont donc petites, vous voyez une augmentation petite en mémoire, qui est occupé par le cache de procédure.

SQL Server 2000 présente un algorithme efficace pour trouver n'importe quel plan d'exécution existant pour toute instruction SQL spécifiée. Toutefois, en raison du nombre une augmentation des objets stockés dans le cache de procédure, il est possible que le temps que nécessaire pour le moteur relationnel effectuer une recherche pour un plan existant peut nuire aux et peut nuire aux performances de votre système.

En général, sur les systèmes où la taille de la base de données est bien supérieure à la taille de la mémoire, le système est sous une pression de mémoire attendu. Si la pression de mémoire est telle que mémoire est requis pour les autres objets, le processus lazywriter désallouer objets dans le cache de procédure. Cette va lier la taille du cache procédure et va réduire l'impact négatif potentiel de cette modification.

Toutefois, sur les systèmes où la taille de mémoire est supérieure à la taille de la base de données, le système est généralement pas sous pression de mémoire. Par conséquent, objets sont deallocated pas à partir du cache de procédure en raison de besoins de mémoire et la taille du cache de procédure peut croître à un point où cela affectera affecter performances.

Si vous notez un impact négatif sur les performances du système, procédez comme suit :
  1. Désactiver indicateur de suivi 2861.
  2. Exécutez la commande DBCC FREEPROCCACHE à partir de l'Analyseur de requêtes. Vous devez redémarrer SQL Server.

Propriétés

Numéro d'article: 325607 - Dernière mise à jour: mardi 27 septembre 2005 - Version: 5.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2000 Standard
Mots-clés : 
kbmt kbhotfixserver kbqfe kbsqlserv2000sp3fix kbfix kbinfo kbsqlserv2000presp3fix KB325607 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 325607
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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