Problembeschreibung
Angenommen, Sie haben Microsoft SQL Server 2012 Service Pack 2 (SP2) auf Ihrem Computer installiert. Sie rufen die CDC.fn_cdc_get_net_changes_<capture_instance> Change Data Capture (CDC)-Abfrage in der sp_executesql gespeicherten Prozedur auf, und Sie kann aus einer Anwendungsquelle wie SQL Server Management Studio Server (SSMS), CDC selbst oder den SQL Server Integration Services (SSIS)-Paketen stammen. In diesem Fall tritt eine schlechte Leistung in SQL Server 2012 auf.HinweisDer Leistungsrückgang kann beträchtlich sein. Eine Abfrage kann beispielsweise in SQL Server 2012 SP1 in wenigen Sekunden abgeschlossen werden. Die Ausführung der gleichen Abfrage kann jedoch mehrere Stunden in SQL Server 2012 SP2 dauern. Darüber hinaus hilft die Statistikaktualisierung nicht beim Problem.
Ursache
Dieses Problem tritt aufgrund eines Problems in der Kardinalitäts-Schätzung auf, das die Leistung der CDC.fn_cdc_get_net_changes_<capture_instance> Abfrage stark beeinträchtigt.
Fehlerbehebung
Das Problem wurde zuerst im folgenden kumulativen Update von SQL Server behoben.
Kumulatives Update 3 für SQL Server 2012 SP2 /en-us/help/3002049
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Schauen Sie sich die neuesten kumulativen Updates für SQL Server an:
Problemumgehung
Um dieses Problem zu umgehen, verwenden Sie den Abfragehinweis für die Option (neu kompilieren) in der Abfrage. Wenn die Abfrage von SSIS-CDC-Komponenten ausgelöst wird, kann der Option (neu kompilieren) -Hinweis durch Erstellen einer Planhinweisliste wie im folgenden Beispiel erzwungen werden: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)'; HinweisSie müssen die Beispielabfrage durch die Abfrage ersetzen, mit der Sie Probleme haben. Sie kann aus der Profiler -Ablaufverfolgung gepackt werden, sodass kein zusätzliches Zeichen versehentlich hinzugefügt wird. Stellen Sie außerdem sicher, dass die Auswahl Abfrage in eine einzelne Zeile gesetzt wird (beispielsweise sollte es keine Wagenrücklauf-oder Zeilenvorschübe geben), damit die Planhinweisliste erfolgreich funktionieren kann. Möglicherweise müssen Sie auch DBCC FREEPROCCACHE verwenden, um den alten Plan aus dem Cache abzuklopfen.
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.