Simptome
Să presupunem că ați aplicat Microsoft SQL Server 2012 Service Pack 2 (SP2) pe computer. Apelați interogarea cdc.fn_cdc_get_net_changes_<capture_instance> schimbare date (cdc) în procedura sp_executesql stocată și poate fi provenită de la o sursă de aplicație, cum ar fi SQL Server Management Studio Server (SSMS), CDC însuși sau pachetele SQL Server Integration Services (SSIS). În această situație, întâmpinați performanțe slabe în SQL Server 2012.Notă Scăderea performanței poate fi mare. De exemplu, o interogare poate să se termine în câteva secunde în SQL Server 2012 SP1. Cu toate acestea, aceeași interogare poate dura mai multe ore pentru a se executa în SQL Server 2012 SP2. În plus, actualizarea de statistici nu ajută la problemă.
Cauză
Această problemă se produce din cauza unei probleme din estimarea Cardinalității care afectează grav performanța cdc.fn_cdc_get_net_changes_<capture_instance> interogare.
Rezolvare
Problema a fost remediată pentru prima dată în următoarea actualizare cumulativă de SQL Server.
Actualizarea cumulativă 3 pentru SQL Server 2012 SP2 /en-us/help/3002049
Fiecare nouă actualizare cumulativă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în actualizarea cumulativă anterioară. Consultați cele mai recente actualizări cumulative pentru SQL Server:
Soluție de evitare
Pentru a rezolva această problemă, utilizați sugestie de interogare (RECOMPILARE) din interogare. În cazul în care interogarea este declanșată de la componentele SSIS CDC, opțiunea sugestie (RECOMPILARE) poate fi impusă prin crearea unui ghid de planificare ca în exemplul următor:Exec sp_create_plan_guide @name = N'CDC_Query1_PlanGuide', @stmt = N'select [__$start_lsn],[__$operation],[__$update_mask],[Column1],[Column2],[Column3] from [cdc].[fn_cdc_get_net_changes_dbo_Table1](CONVERT(binary(10), @cs, 1), CONVERT(binary(10), @ce, 1), @mode)',@type = N'SQL',@module_or_batch = NULL, @params = N'@ce nvarchar(22),@mode nvarchar(14),@cs nvarchar(22)', @hints = N'OPTION (RECOMPILE)'; Notă Trebuie să înlocuiți interogarea exemplu cu interogarea cu care se confruntă problema. Acesta poate fi luat de la urmărirea Profiler , astfel încât niciun caracter suplimentar să nu fie adăugat din greșeală. În plus, asigurați-vă că interogarea de Selectare este plasată într-o singură linie (de exemplu, nu trebuie să aibă niciun flux de retur sau de linie), astfel încât Ghidul de planificare să poată funcționa cu succes. De asemenea, poate fi necesar să utilizați DBCC FREEPROCCACHE pentru a închide planul vechi din cache.
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.