Sintomi
Si supponga di avere applicato Microsoft SQL Server 2012 Service Pack 2 (SP2) nel computer. Si chiama la cdc.fn_cdc_get_net_changes_<capture_instance> modificare la query di acquisizione dati (CDC) nella stored procedure sp_executesql e può provenire da un'origine applicazione, ad esempio SQL Server Management Studio Server (SSMS), CDC stessa o i pacchetti di SQL Server Integration Services (SSIS). In questa situazione si verificano prestazioni scarse in SQL Server 2012.Nota La riduzione delle prestazioni potrebbe essere di grandi dimensioni. Una query, ad esempio, può terminare in pochi secondi in SQL Server 2012 SP1. Tuttavia, la stessa query può richiedere diverse ore per l'esecuzione in SQL Server 2012 SP2. Inoltre, l'aggiornamento delle statistiche non aiuta il problema.
Causa
Questo problema si verifica a causa di un problema di stima della cardinalità che influisce gravemente sulle prestazioni della cdc.fn_cdc_get_net_changes_<capture_instance> query.
Risoluzione
Il problema è stato risolto per la prima volta nel seguente aggiornamento cumulativo di SQL Server.
Aggiornamento cumulativo 3 per SQL Server 2012 SP2 /en-us/help/3002049
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. Vedere gli ultimi aggiornamenti cumulativi per SQL Server:
Soluzione alternativa
Per risolvere il problema, usare l'hint per la query Option (ricompilare) nella query. Nel caso in cui la query venga attivata da componenti CDC di SSIS, l'hint Option (RECOMPILE) può essere forzato creando una guida di piano come nell'esempio seguente: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)'; Nota È necessario sostituire la query di esempio con la query con cui si sta affrontando il problema. Può essere afferrato dalla traccia del Profiler , quindi nessun carattere aggiuntivo viene aggiunto accidentalmente. Verificare inoltre che la query di selezione venga inserita in una singola riga, ad esempio non deve avere un ritorno a capo o un avanzamento riga, in modo che la Guida di piano possa funzionare correttamente. Potrebbe essere necessario usare anche DBCC FREEPROCCACHE per staccare il vecchio piano dalla cache.
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".