NUSTATYTI: Nekaupiamosios planavimo klaida, kai vykdote Išsaugota procedūra, kuri naudoja su TVP "SQL Server 2012"

BUG #: 187868 (turinio priežiūra)VSTS: 1340145

"Microsoft" išleidžia Microsoft SQL Server 2012 nustato vieną atsisiunčiamą failą. Kadangi šie pataisymai yra kaupiamieji, kiekvienoje laidoje būna visos karštosios pataisos ir saugos naujinimus, kurios buvo įtrauktos į ankstesnę SQL Server 2012 naujinimo išleidimo.

Požymiai

Įsivaizduokite tokią situaciją:

  • Galite sukurti Išsaugota procedūra, kuri naudoja lentelės reikšmių parametro (TVP) "Microsoft SQL Server 2012".

  • Naudojate SQL Profiler "arba" SQL Server Išplėstinis įvykiai užfiksuoti ir RPC: pradedant ir RPC: baigtas įvykiai.

  • Paleidus užklausą, kuri naudoja toliau TVP.

  • Užklausos laikas baigėsi.

Tokiu atveju Nekaupiamosios planavimo klaida įvyksta ir užklausos, kurios veikia patį planavimo veikti lėtai. Be to, mini dump failas yra sukurtas SQL serverio žurnalo aplanke.
Iškilus šiai problemai, galite gauti klaidos pranešimą, panašų į šį:

System.Data.SqlClient.SqlException (0x80131904): Skirtasis laikas baigėsi. Skirtasis laikas praėjo prieš užbaigiant operaciją arba serveris neatsako.
į System.Data.SqlClient.SqlInternalConnection.OnError (SqlException išimtis, Boolean breakConnection)
į System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
į System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject stateObj, UInt32 klaidos)
į System.Data.SqlClient.TdsParserStateObject.ReadSni (DbAsyncResult asyncResult, TdsParserStateObject stateObj)
į System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
į System.Data.SqlClient.TdsParserStateObject.ReadByte()
į System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
į System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, eilutės 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, eilutės metodas, DbAsyncResult rezultatas)
į System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (DbAsyncResult rezultatas, eilutės methodName, Boolean sendToPipe)
į System.data.SqlClient.SqlCommand.ExecuteNonQuery()
į TVPApp.Program.Main (String [args)


SQL serverio klaidos žurnale užregistruojamas Nekaupiamosios planavimo klaida kartu su klaidos pranešimą, panašų į šį:

< Data >< laiko > serverio naudojant "dbghelp.dll" versija "4.0.5"
< Data >< laiko > Server *** nepavyko gauti gijos kontekstą spid #
<Date><Time> Server * *******************************************************************************
< Data >< laiko > serverio *
< Data >< laiko > serverio * Pradžia RIETUVĖS IŠKELTIS:
< Data >< laiko > Server * < data >< laiko > spid #
< Data >< laiko > serverio *
< Data >< laiko > serverio * ne duoda planavimo priemonė
< Data >< laiko > serverio *
<Date><Time> Server * *******************************************************************************
< Data >< laiko > serverio rietuvės parašo, kad iškelties yra 0x000000000000002C
< Data >< laiko > Server išorinių iškelties procesas grąžinimo kodas 0x20000001.
Išorės iškelties procesas grįžo be klaidų.
< Data >< laiko > serverio procesas 0:0:0 (0x1670) darbuotojas 0x0000000004EDE160 atrodo, kad Nekaupiamosios planavimo 5. Thread laiką: 13014210386757. Apie Thread CPU naudojama: branduolio 0 ms, ms. vartotojo 70106 proceso sąnaudos 16 %. Sistemos laukimo 77 %. Intervalas: 70140 ms.
< Data >< laiko > serverio procesas 0:0:0 (0x1670) darbuotojas 0x0000000004EDE160 atrodo, kad Nekaupiamosios planavimo 5. Thread laiką:

Priežastis

Ši problema kyla dėl klaidos SQL Server 2012 duomenų bazės modulis. Teksto stulpelių, kad TVP atliktų kaip įterpti eilutės arba buferio ir eilučių skaičius padidėja padidina buferių. Vis dėlto, laidas buferio procesas yra daug laiko. Todėl sukuriamas Nekaupiamosios planavimo klaida kai paleisti ir sumažinti operacijų kilti.

Pastaba. Panaši problema yra išspręsta šiame "Microsoft" žinių bazės straipsnyje. Tačiau kaupiamojo naujinimo paketą, aprašytą šiame straipsnyje nėra užklausa skirtojo laiko problema.

2520808 nustatyti: Nekaupiamosios planavimo klaida, kai vykdote užklausą, kuri naudoja TVP, SQL Server 2008 "arba" SQL Server 2008 R2, jei naudojama SQL Profiler "arba" SQL Server Išplėstinis įvykiai

Sprendimas

Kaupiamojo naujinimo informacija

Kaupiamųjų naujinimų paketas 5 SQL Server 2012 1 pakeitimų paketas (SP1)

Ši problema buvo pirmą kartą buvo išleistas Kaupiamasis naujinimas 5. Jei norite gauti daugiau informacijos apie tai, kaip gauti šį kaupiamųjų naujinimų paketas "SQL Server 2012", spustelėkite toliau straipsnio numerį ir peržiūrėkite straipsnį Microsoft žinių bazėje:

2861107 kaupiamojo naujinimo paketo 5 "SQL Server 2012"Pastaba. Kadangi komponavimo versijos yra kaupiamosios, kiekvienoje pataisų laidoje būna visos karštosios ir visus saugos pataisas, kurios buvo įtrauktos į ankstesnę SQL Server 2012 pataisymų laidą. Rekomenduojame, kad manote, kad pritaikyti pačios naujausios pataisų laidos, kuriame bus šios karštosios pataisos. Norėdami gauti daugiau informacijos, spustelėkite toliau pateiktą straipsnio numerį ir peržiūrėkite „Microsoft Knowledge Base“ žinių bazės straipsnį:

2772858 the SQL Server 2012 komponavimo versijos, išleistos po to, kai buvo išleistas SQL Server 2012 1 pakeitimų paketas

Sprendimas

Norėdami išspręsti šią problemą, naudokite vieną iš toliau nurodytų būdų:

  • Negalima naudoti SQL Profiler "arba" SQL Server Išplėstinis įvykiai.

  • Spustelėkite Norėdami išvalyti, RPC: pradedant ir RPC: baigtas žymės langelius, esančius sekimo aprašą.

Daugiau informacijos

Šios pataisos netaikomas SQL Server 2008 "arba" SQL Server 2008 R2, kai yra paskelbta šiame žinių bazės. Jei visi vartotojai susiduria su ta pačia problema sistemoje "SQL Server 2008" arba "SQL Server 2008 R2 net tada, kai vartotojų taikykite paketą, aprašytą šiame straipsnyje, patikrinti, ar užklausos skirtasis laikas ir nustatyti, ar galima nustatyti skirtojo laiko. Kitu atveju pateikti prašymą taikyti šį pakeitimą į SQL Server 2008 "arba" SQL Server 2008 R2.

2520808 nustatyti: Nekaupiamosios planavimo klaida, kai vykdote užklausą, kuri naudoja TVP, SQL Server 2008 "arba" SQL Server 2008 R2, jei naudojama SQL Profiler "arba" SQL Server Išplėstinis įvykiai

Iškvietimų sąrašo informacija

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

Būsena

„Microsoft“ patvirtino, kad tai yra „Microsoft“ produktų, išvardytų skyriuje „Taikoma“, problema.

Author: jannaw
Writer: v-yipli
Techninis redaktorius: pradm; jannaw; hozhan
Editor: v-mordew

Reikia daugiau pagalbos?

Tobulinkite savo įgūdžius
Ieškoti mokymo
Pirmiausia gaukite naujų funkcijų
Prisijungti prie "Microsoft Insider"

Ar ši informacija buvo naudinga?

Ar esate patenkinti vertimo kokybe?

Kas turėjo įtakos jūsų patirčiai?

Turite daugiau atsiliepimų? (Pasirinktinai)

Dėkojame už jūsų atsiliepimus!

×