N° de bogue : 187868 (Maintenance du contenu)VSTS : 1340145
Microsoft distribue les correctifs de Microsoft SQL Server 2012 dans un fichier téléchargeable. Les correctifs étant cumulatifs, chaque nouvelle version contient tous les correctifs et les mises à jour de sécurité inclus dans la précédente 2012 de SQL Server mise à jour de version.
Symptômes
Considérez le scénario suivant :
-
Vous créez une procédure stockée qui utilise un paramètre table (TVP) dans Microsoft SQL Server 2012.
-
Vous utilisez le Générateur de profils SQL ou des événements d’étendue de SQL Server pour capturer les RPC : démarrage et RPC : terminé événements.
-
Vous exécutez une requête qui utilise la TVP.
-
La requête est arrivée à expiration.
Dans ce scénario, une erreur de planificateur dalle se produit, et les requêtes qui sont exécutent sur le même planificateur s’exécuter lentement. En outre, un fichier de minividage est généré dans le dossier du journal de SQL Server.
Lorsque ce problème se produit, vous recevez un message d’erreur semblable au suivant :(0x80131904) de System.Data.SqlClient.SqlException : Délai expiré. Le délai d’attente écoulée avant l’achèvement de l’opération ou le serveur ne répond pas.
à System.Data.SqlClient.SqlInternalConnection.OnError (SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() à System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject stateObj, UInt32 erreur) à System.Data.SqlClient.TdsParserStateObject.ReadSni (asyncResult de DbAsyncResult, TdsParserStateObject stateObj) à System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() à System.Data.SqlClient.TdsParserStateObject.ReadByte() à System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) à System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) à System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) à System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, méthode de chaîne, le résultat de DbAsyncResult) à System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (résultat de la DbAsyncResult, String methodName, Boolean sendToPipe) à System.Data.SqlClient.SqlCommand.ExecuteNonQuery() à TVPApp.Program.Main (String [] args)L’erreur de planificateur dalle avec un message d’erreur semblable au suivant est enregistré dans le journal des erreurs SQL Server :
< Date >< heure > serveur à l’aide de 'dbghelp.dll' version '4.0.5'
< Date >< heure > serveur *** Impossible d’obtenir le contexte de thread pour le spid # <Date><Time> Server * ******************************************************************************* < Date >< heure > Server * < Date >< heure > Server * début DUMP de la pile : Serveur de < date >< heure > * < Date >< heure > spid # < Date >< heure > Server * < Date >< heure > Server * dalle du planificateur < Date >< heure > Server * <Date><Time> Server * ******************************************************************************* Signature de pile < date >< heure > serveur pour le vidage est 0x000000000000002C Code < date >< heure > serveur externe retour de processus de vidage 0 x 20000001. External dump process returned no errors. Processus de serveur < date >< heure > 0:0:0 (0x1670) 0x0000000004EDE160 de travail semble dalle sur 5 du planificateur. Heure de création de thread : 13014210386757. Environ Thread CPU utilisé (s) : noyau 0 ms, Mme de l’utilisateur 70106 l’utilisation des processus de 16 %. 77 % inactif du système. Intervalle : de ms 70140. Processus de serveur < date >< heure > 0:0:0 (0x1670) 0x0000000004EDE160 de travail semble dalle sur 5 du planificateur. Heure de création de thread :Cause
Ce problème se produit en raison d’une erreur dans le moteur de base de données de SQL Server 2012. Les colonnes de texte dans la TVP sont implémentées comme insérer des chaînes ou des mémoires tampons et d’augmenter le nombre de lignes augmente le nombre de mémoires tampons. Toutefois, le processus qui libère la mémoire tampon est beaucoup de temps. Par conséquent, une erreur de planificateur dalle est générée lorsque la mise à jour et réduire les opérations de se produire.
Remarque Un problème similaire a été résolu dans l’article suivant de la base de connaissances Microsoft. Toutefois, le package de mise à jour cumulative décrite dans l’article n’est pas pour un problème de dépassement de délai de requête.CORRIGER des 2520808 : erreur de planificateur dalle lorsque vous exécutez une requête qui utilise un TVP dans SQL Server 2008 ou dans SQL Server 2008 R2 si le Générateur de profils SQL ou des événements d’étendue de SQL Server est utilisées.
Résolution
Informations de mise à jour cumulative
Package de mise à jour cumulative 5 pour SQL Server 2012 avec le Service Pack 1 (SP1)
Le correctif de ce problème a été publié dans les 5 mise à jour Cumulative. Pour plus d’informations sur l’obtention de ce package de mise à jour cumulative pour SQL Server 2012, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
2861107 Cumulative mise à jour 5 pour SQL Server 2012Remarque Les versions étant cumulatives, chaque nouvelle version de correctif contient tous les correctifs et correctifs de sécurité inclus dans la précédente 2012 de SQL Server version du correctif. Nous vous recommandons l’application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2772858 2012 de SQL Server les builds qui ont été publiées après la publication du Service Pack 1 de SQL Server 2012
Solution de contournement
Pour contourner ce problème, appliquez l’une des méthodes suivantes :
-
N’utilisez pas de générateur de profils SQL ou des événements d’étendue de SQL Server.
-
Cliquez pour effacer le RPC : démarrage et RPC : terminé cases à cocher dans la définition de trace.
Plus d'informations
Ce correctif ne s’applique pas à SQL Server 2008 ou SQL Server 2008 R2 lorsque cette base de connaissances est publié. Si les utilisateurs rencontrent le même problème dans SQL Server 2008 ou SQL Server 2008 R2 même après que les utilisateurs s’appliquent le package qui est décrit dans l’article suivant, valider s’il y a un délai d’expiration de la requête et déterminer si le délai d’attente peut être résolu. Dans le cas contraire, soumettre une demande d’application de ce correctif pour SQL Server 2008 ou SQL Server 2008 R2.
CORRIGER des 2520808 : erreur de planificateur dalle lorsque vous exécutez une requête qui utilise un TVP dans SQL Server 2008 ou dans SQL Server 2008 R2 si le Générateur de profils SQL ou des événements d’étendue de SQL Server est utilisées.
Informations de pile d’appels
sqlmin!CLinkedMap<__int64,CCheckReadersAndWriters::CCounts>::FLookup+0x29sqlmin!CCheckReadersAndWriters::Release+0x69
sqlmin!CMainIlb::{dtor}+0x3d sqlmin!CMainIlb::`scalar deleting destructor'+0x3d sqlmin!CBlobHandleFactoryMain::ReleaseILockBytes+0x13 sqlmin!CMainIlb::Release+0xf0 sqllang!CTraceRpcBinaryStream::~CTraceRpcBinaryStream+0x80 sqllang!CTraceTvpData::{dtor}+0x14 sqllang!CTraceTvpData::`scalar deleting destructor'+0x1e sqllang!CRpcTraceHelper::CleanUpTraceTvpData+0x33 sqllang!CRpcTraceHelper::~CRpcTraceHelper+0x70 sqllang!CRPCExecEnv::~CRPCExecEnv+0x2ab sqllang!CRPCExecEnv::`scalar deleting destructor'+0x14 sqllang!process_request+0x10b1 sqllang!process_commands+0x51c sqldk!SOS_Task::Param::Execute+0x21e sqldk!SOS_Scheduler::RunTask+0xa8 sqldk!SOS_Scheduler::ProcessTasks+0x299 sqldk!SchedulerManager::WorkerEntryPoint+0x261 sqldk!SystemThread::RunWorker+0x8f sqldk!SystemThreadDispatcher::ProcessWorker+0x3c8 sqldk!SchedulerManager::ThreadEntryPoint+0x236 kernel32!BaseThreadInitThunk+0xd ntdll!RtlUserThreadStart+0x1d
sqlmin!CLinkedMap<__int64,CCheckReadersAndWriters::CCounts>::FDelete+0x34sqlmin!CCheckReadersAndWriters::Release+0xfb
sqlmin!CMainIlb::{dtor}+0x3d sqlmin!CMainIlb::`scalar deleting destructor'+0x3d sqlmin!CBlobHandleFactoryMain::ReleaseILockBytes+0x13 sqlmin!CMainIlb::Release+0xf0 sqllang!CTraceRpcBinaryStream::~CTraceRpcBinaryStream+0x80 sqllang!CTraceTvpData::{dtor}+0x11 sqllang!CRpcTraceHelper::CleanUpTraceTvpData+0x55 sqllang!CRpcTraceHelper::TracePostExec+0x1bf sqllang!CRPCExecEnv::OnExecFinish+0xaa sqllang!CProtocolHeaderInfo::{dtor}+0xffffffff`ffb158e2 sqllang!process_request+0x764 sqllang!process_commands+0x51c sqldk!SOS_Task::Param::Execute+0x21e sqldk!SOS_Scheduler::RunTask+0xa8 sqldk!SOS_Scheduler::ProcessTasks+0x29a sqldk!SchedulerManager::WorkerEntryPoint+0x261 sqldk!SystemThread::RunWorker+0x8f sqldk!SystemThreadDispatcher::ProcessWorker+0x3c8 sqldk!SchedulerManager::ThreadEntryPoint+0x236 kernel32!BaseThreadInitThunk+0x1a ntdll!RtlUserThreadStart+0x1d
État
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».
Author: jannaw
Writer: v-yipli Réviseur technique : pradm ; jannaw ; hozhan Editor: v-mordew