Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Abfrageoptimierer verwendet Statistiken zu Spalten zum Erstellen von Abfrageplänen, die die Abfrageleistung verbessern. Die Statistiken werden aus den Tabellen in der Datenbank gesammelt und in den Datenbankmetadaten gespeichert.
Statistiken werden automatisch erstellt, sie können jedoch auch manuell erstellt werden. Beispielsweise werden Statistiken automatisch für Indexschlüsselspalten erstellt, wenn der Index erstellt wird. Weitere Informationen zum Erstellen von Statistiken finden Sie unter Statistics.
Tabellendaten ändern sich normalerweise mit der Zeit, wenn Zeilen eingefügt, aktualisiert und gelöscht werden. Dies bedeutet, dass Statistiken regelmäßig aktualisiert werden müssen. Standardmäßig werden Statistiken zu datenträgerbasierten Tabellen automatisch aktualisiert, wenn sie vom Abfrageoptimierer als möglicherweise veraltet eingestuft werden.
Statistiken für speicheroptimierte Tabellen werden nicht standardmäßig aktualisiert. Stattdessen müssen Sie diese manuell aktualisieren. Verwenden Sie UPDATE STATISTICS (Transact-SQL) für einzelne Spalten, Indizes oder Tabellen. Verwenden Sie sp_updatestats (Transact-SQL), um Statistiken für alle Benutzer- und internen Tabellen in der Datenbank zu aktualisieren.
Wenn Sie CREATE STATISTICS (Transact-SQL) oder UPDATE STATISTICS (Transact-SQL) verwenden, müssen Sie angeben NORECOMPUTE
, dass die automatische Statistikaktualisierung für speicheroptimierte Tabellen deaktiviert werden soll. Bei datenträgerbasierten Tabellen aktualisiert sp_updatestats (Transact-SQL) Statistiken nur, wenn die Tabelle seit der letzten sp_updatestats (Transact-SQL) geändert wurde. Bei speicheroptimierten Tabellen generiert sp_updatestats (Transact-SQL) immer aktualisierte Statistiken. sp_updatestats (Transact-SQL) ist eine gute Option für speicheroptimierte Tabellen. Andernfalls müssen Sie wissen, welche Tabellen erhebliche Änderungen aufweisen, damit Sie Statistiken einzeln aktualisieren können.
Statistiken können entweder generiert werden, indem Datenstichproben entnommen werden oder ein vollständiger Scan ausgeführt wird. Bei Statistiken aus Stichproben wird die Datenverteilung nur anhand einer Stichprobe der Tabellendaten geschätzt. Bei Statistiken auf Grundlage eines vollständigen Scans wird die gesamte Tabelle überprüft, um die Datenverteilung zu bestimmen. Während Statistiken, die auf einem vollständigen Scan basieren, normalerweise genauer sind, dauert die Berechnung länger. Aus Stichproben gewonnene Statistiken können schneller gesammelt werden.
Für datenträgerbasierte Tabellen werden standardmäßig auf Stichproben beruhende Statistiken verwendet. Speicheroptimierte Tabellen unterstützen nur Statistiken auf Grundlage vollständiger Scans. Wenn Sie CREATE STATISTICS (Transact-SQL) oder UPDATE STATISTICS (Transact-SQL) verwenden, müssen Sie die FULLSCAN
Option für speicheroptimierte Tabellen angeben.
Zusätzliche Überlegungen zu Statistiken für speicheroptimierte Tabellen:
Indizes für speicheroptimierten Tabellen werden mit der Tabelle erstellt. Die Statistiken zu den Indexschlüsselspalten werden erstellt, wenn die Tabelle leer ist. Daher müssen diese Statistiken aktualisiert werden, nachdem Daten in die Tabelle geladen wurden.
Für systemintern kompilierte gespeicherte Prozeduren werden Ausführungspläne für Abfragen in der Prozedur optimiert, wenn die Prozedur kompiliert wird. Dies geschieht nur beim Erstellen der Prozedur und beim Neustart des Servers, nicht beim Aktualisieren der Statistiken. Daher müssen die Tabellen eine repräsentative Menge von Daten enthalten, und die Statistiken müssen auf dem aktuellen Stand sein, bevor die Prozeduren erstellt werden. (Systemintern kompilierte gespeicherte Prozeduren werden neu kompiliert, wenn die Datenbank offline und anschließend wieder online geschaltet oder der Server neu gestartet wird.)
Richtlinien für Statistiken beim Bereitstellen speicheroptimierter Tabellen
Um sicherzustellen, dass der Abfrageoptimierer beim Erstellen von Abfrageplänen über aktuelle Statistiken verfügt, führen Sie die folgenden fünf Schritte aus, um speicheroptimierte Tabellen bereitzustellen:
Erstellen Sie Tabellen und Indizes. Indizes werden inline in den
CREATE TABLE
-Anweisungen angegeben.Laden Sie Daten in die Tabellen.
Aktualisieren Sie die Statistik zu den Tabellen.
Erstellen Sie gespeicherte Prozeduren, die auf die Tabellen zugreifen.
Führen Sie die Workload aus, die eine Mischung aus nativ kompilierten und interpretierten gespeicherten Transact-SQL-Prozeduren sowie Ad-hoc-Batches enthalten kann.
Indem Sie systemintern kompilierte gespeicherten Prozeduren erstellen, nachdem die Daten geladen und Statistiken aktualisiert wurden, wird sichergestellt, dass der Abfrageoptimierer über die für die speicheroptimierten Tabellen erforderlichen Statistiken verfügt. Damit liegen effiziente Abfragepläne vor, wenn die Prozedur kompiliert wird.
Richtlinien zum Pflegen von Statistiken für speicheroptimierte Tabellen
Um die Statistiken auf dem aktuellen Stand zu halten, aktualisieren Sie die Statistiken für speicheroptimierte Tabellen regelmäßig.
Wenn sich Daten häufig ändern, sollten Sie auch die Statistik häufig aktualisieren. Aktualisieren Sie die Tabellenstatistik beispielsweise nach einem Batchupdate. Löschen Sie nach dem Aktualisieren der Statistiken systemintern kompilierte gespeicherte Prozeduren, und erstellen Sie sie neu, sodass sie von den aktualisierten Statistiken profitieren.
.
Aktualisieren Sie Statistiken nicht während der maximalen Arbeitsauslastung.
So aktualisieren Sie Statistiken:
Verwenden von SQL Server Management Studio zum Erstellen eines Wartungsplans mit einem Aktualisierungstask
Oder aktualisieren Sie Statistiken über ein Transact-SQL-Skript, wie unten erläutert.
So aktualisieren Sie die Statistiken für eine einzelne speicheroptimierte Tabelle (myschema. Mytable) führen Sie das folgende Skript aus:
UPDATE STATISTICS myschema.Mytable WITH FULLSCAN, NORECOMPUTE
Führen Sie zum Aktualisieren der Statistiken für alle speicheroptimierten Tabellen in der aktuellen Datenbank das folgende Skript aus:
DECLARE @sql NVARCHAR(MAX) = N''
SELECT @sql += N'
UPDATE STATISTICS ' + quotename(schema_name(schema_id)) + N'.' + quotename(name) + N' WITH FULLSCAN, NORECOMPUTE'
FROM sys.tables WHERE is_memory_optimized=1
EXEC sp_executesql @sql
Führen Sie zum Aktualisieren der Statistiken für alle Tabellen in der Datenbank sp_updatestats (Transact-SQL) aus.
Im folgenden Beispiel wird ausgegeben, wann die Statistiken für speicheroptimierte Tabellen zuletzt aktualisiert wurden. Anhand dieser Informationen können Sie entscheiden, ob die Statistiken aktualisiert werden müssen.
select t.object_id, t.name, sp.last_updated as 'stats_last_updated'
from sys.tables t join sys.stats s on t.object_id=s.object_id cross apply sys.dm_db_stats_properties(t.object_id, s.stats_id) sp
where t.is_memory_optimized=1