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