KORRIGERA: Icke-framställning av Schemaläggaren fel när du kör en lagrad procedur som använder en TVP i SQL Server 2012

PROGRAMFEL #: 187868 (Innehållsunderhåll)VSTS: 1340145

Microsoft distribuerar korrigeringsfiler för Microsoft SQL Server 2012 i en nedladdningsbar fil. Eftersom korrigeringar är kumulativa innehåller varje ny utgåva innehåller alla snabbkorrigeringar och alla säkerhetsuppdateringar som ingår i föregående SQL Server 2012 uppdaterar release.

Symptom

Föreställ dig följande:

  • Du skapar en lagrad procedur som använder tabellvärderade parametrar (TVP) i Microsoft SQL Server 2012.

  • Du använder Profiler för SQL eller SQL Server Extended händelser för att fånga de RPC: starta och RPC: slutförd händelser.

  • Du kör en fråga som använder TVP.

  • Frågan på grund av timeout.

I det här fallet en icke-framställning av Schemaläggaren fel uppstår och frågor som körs på samma Schemaläggaren körs långsamt. Dessutom skapas en mini dumpfilen i SQL Server-loggmapp.
När problemet uppstår visas ett felmeddelande av följande slag:

System.Data.SqlClient.SqlException (0x80131904): Tidsgränsen har överskridits. Tidsgränsen uppnåddes slutförs eller om servern svarar inte.
vid System.Data.SqlClient.SqlInternalConnection.OnError (SqlException-undantag, booleska breakConnection)
vid System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
vid System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject stateObj, UInt32 fel)
vid System.Data.SqlClient.TdsParserStateObject.ReadSni (DbAsyncResult asyncResult, TdsParserStateObject stateObj)
vid System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
vid System.Data.SqlClient.TdsParserStateObject.ReadByte()
vid System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand-cmdHandler, SqlDataReader dataström, BulkCopySimpleResultSet, bulkCopyHandler, TdsParserStateObject stateObj)
vid System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, sträng resetOptionsString)
vid System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, booleska returnStream, booleska asynkron)
vid System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, booleska returnStream, String metod, DbAsyncResult resultat)
vid System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (DbAsyncResult-resultat, methodName sträng, booleska sendToPipe)
vid System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
vid TVPApp.Program.Main (String [] args)


Icke-framställning av Schemaläggaren fel och ett felmeddelande av följande slag loggas i felloggen för SQL Server:

< Datum >< tid > Server med 'dbghelp.dll' version '4.0.5'
< Datum >< tid > Server *** det gick inte att läsa trådkontext för spid #
<Date><Time> Server * *******************************************************************************
< Datum >< tid > Server *
< Datum >< tid > Server * BÖRJA stackdump:
< Datum >< tid > Server * < datum >< tid > spid #
< Datum >< tid > Server *
< Datum >< tid > Server * icke-framställning av Schemaläggaren
< Datum >< tid > Server *
<Date><Time> Server * *******************************************************************************
< Datum >< tid > Server Stack signatur för dumpning är 0x000000000000002C
Koden < datum >< tid > Server externa dump process avkastning 0x20000001.
Externa dump process returnerade inga fel.
< Datum >< tid > serverprocessen 0:0:0 (0x1670) arbetare 0x0000000004EDE160 verkar vara icke-framställning om Scheduler 5. Tråden skapades: 13014210386757. Används ca tråd CPU: kernel 0 ms användaren 70106 fr. Process nyttjande 16%. System Idle 77%. Intervall: 70140 ms.
< Datum >< tid > serverprocessen 0:0:0 (0x1670) arbetare 0x0000000004EDE160 verkar vara icke-framställning om Scheduler 5. Tråden skapades:

Orsak

Det här problemet beror på ett fel i databasmotorn för SQL Server 2012. Textkolumner i TVP implementeras som infogar strängar eller buffertar och en ökning av antalet rader ökar antalet buffertar. Den process som frigör buffertar är dock tidskrävande. Därför ett icke-framställning av Schemaläggaren fel genereras när släpper och förminska åtgärder inträffar.

Obs! Ett liknande problem har åtgärdats i följande artikel i Microsoft Knowledge base. Det kumulativa uppdateringspaketet som beskrivs i artikeln är dock inte på en fråga timeout-problem.

2520808 KORRIGERA: icke-framställning av Schemaläggaren fel när du kör en fråga som använder en TVP i SQL Server 2008 R2 eller i SQL Server 2008 om du använder SQL-Profiler eller SQL Server Extended händelser

Lösning

Information om Kumulativ uppdatering

Kumulativt uppdateringspaket 5 för SQL Server 2012 Service Pack 1 (SP1)

Korrigeringsfil för problemet gavs först ut i den kumulativa uppdateringen 5. Mer information om hur du skaffar den kumulativa uppdateringspaket för SQL Server 2012 klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

2861107 kumulativ uppdateringspaket 5 för SQL Server 2012Obs! Eftersom byggen är kumulativa, så innehåller varje ny version av korrigeringsfilen alla snabbkorrigeringar och den rättar till alla säkerhetskorrigeringar som ingår i föregående SQL Server 2012 release. Vi rekommenderar att du använder den senaste utgåvan av korrigering som innehåller den här snabbkorrigeringen. För mer information klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

2772858 i SQL Server 2012 bygger som har getts ut efter SQL Server 2012 Service Pack 1

Temporär lösning

Undvik det här problemet genom att använda någon av följande metoder:

  • Använd inte SQL-Profiler eller SQL Server Extended händelser.

  • Avmarkera den RPC: starta och RPC: klar kryssrutor i trace-definition.

Mer Information

Den här korrigeringen gäller inte för SQL Server 2008 eller SQL Server 2008 R2 när denna KB publiceras. Om alla användare har samma problem i SQL Server 2008 eller SQL Server 2008 R2 även efter att användaren installerat paket som beskrivs i följande artikel, verifiera om det finns en timeout för frågan och avgör om timeout-värdet kan lösas. I annat fall skicka en begäran om att använda den här korrigeringsfilen för SQL Server 2008 eller SQL Server 2008 R2.

2520808 KORRIGERA: icke-framställning av Schemaläggaren fel när du kör en fråga som använder en TVP i SQL Server 2008 R2 eller i SQL Server 2008 om du använder SQL-Profiler eller SQL Server Extended händelser

Information för anropsstacken

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

Status

Microsoft har bekräftat att detta är ett problem i Microsoft-produkterna som nämns i avsnittet "Gäller".

Author: jannaw
Writer: v-yipli
Teknisk granskare: pradm; jannaw; hozhan
Editor: v-mordew

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×