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, um Abfragepläne zu erstellen, die die Abfrageleistung verbessern. Statistiken werden aus den Tabellen in der Datenbank gesammelt und in den Datenbankmetadaten gespeichert.
Statistiken werden automatisch erstellt, können aber 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 in der Regel im Laufe 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 der Optimierer bestimmt, dass sie nicht mehr aktuell sind.
Statistiken zu speicheroptimierten Tabellen werden standardmäßig nicht aktualisiert. Stattdessen müssen Sie sie 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 wird. Bei datenträgerbasierten Tabellen aktualisiert sp_updatestats (Transact-SQL) nur Statistiken, wenn die Tabelle seit dem letzten sp_updatestats (Transact-SQL) geändert wurde. Für speicheroptimierte 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 durch das Sampling der Daten oder durch einen vollständigen Scan generiert werden. Stichprobenstatistiken verwenden nur eine Stichprobe der Tabellendaten, um die Datenverteilung zu schätzen. Fullscan-Statistiken scannen die gesamte Tabelle, um die Datenverteilung zu ermitteln. Fullscan-Statistiken sind in der Regel genauer, benötigen jedoch länger die Berechnung. Stichprobenstatistiken können schneller gesammelt werden.
Datenträgerbasierte Tabellen verwenden standardmäßig beispielbasierte Statistiken. Speicheroptimierte Tabellen unterstützen nur Vollscan-Statistiken. 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 für Statistiken zu speicheroptimierten Tabellen:
Indizes für speicheroptimierte 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 nativ kompilierte gespeicherte Prozeduren werden Ausführungspläne für Abfragen in der Prozedur optimiert, wenn die Prozedur kompiliert wird. Dies geschieht nur, wenn die Prozedur erstellt wird und wenn der Server neu gestartet wird, nicht wenn Statistiken aktualisiert werden. Daher müssen die Tabellen einen repräsentativen Satz von Daten enthalten und die Statistiken müssen up-to-aktuell sein, bevor die Verfahren erstellt werden. (Nativ kompilierte gespeicherte Prozeduren werden neu kompiliert, wenn die Datenbank offline geschaltet und wieder online gebracht wird oder ein Serverneustart vorhanden ist.)
Richtlinien für Statistiken beim Bereitstellen von Memory-Optimized Tabellen
Um sicherzustellen, dass der Abfrageoptimierer beim Erstellen von Abfrageplänen up-to-Datumsstatistiken aufweist, stellen Sie mithilfe der folgenden fünf Schritte speicheroptimierte Tabellen bereit:
Erstellen Sie Tabellen und Indizes. Indizes werden inline in den
CREATE TABLE
Anweisungen angegeben.Laden Sie Daten in die Tabellen.
Aktualisieren Sie Statistiken 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 Transact-SQL gespeicherten Prozeduren sowie Ad-hoc-Batches enthalten kann.
Durch das Erstellen nativ kompilierter gespeicherter Prozeduren nach dem Laden der Daten und der Aktualisierung der Statistiken wird sichergestellt, dass der Optimierer Statistiken für die speicheroptimierten Tabellen zur Verfügung stellt. Effiziente Abfragepläne werden sichergestellt, wenn die Prozedur kompiliert wird.
Richtlinien für die Pflege von Statistiken zu Memory-Optimized Tabellen
Um Statistiken up-toauf dem aktuellen Stand zu halten, aktualisieren Sie regelmäßig die Statistiken zu speicheroptimierten Tabellen.
Wenn sich Daten häufig ändern, sollten Sie Statistiken häufig aktualisieren. Aktualisieren Sie beispielsweise Tabellenstatistiken nach einer Batchaktualisierung. Nachdem Sie die Statistiken aktualisiert haben, lassen Sie nativ kompilierte gespeicherte Prozeduren fallen und erstellen Sie sie neu, damit sie von den aktualisierten Statistiken profitieren können.
.
Aktualisieren Sie keine Statistiken während der Spitzenauslastung.
So aktualisieren Sie Statistiken:
Verwenden von SQL Server Management Studio zum Erstellen eines Wartungsplans mit einer Aktualisierungsstatistikaufgabe
Oder aktualisieren Sie Statistiken über ein Transact-SQL Skript, wie unten beschrieben.
So aktualisieren Sie die Statistiken für eine einzelne speicheroptimierte Tabelle (myschema). Führen Sie das folgende Skript aus:
UPDATE STATISTICS myschema.Mytable WITH FULLSCAN, NORECOMPUTE
Führen Sie das folgende Skript aus, um Statistiken für alle speicheroptimierten Tabellen in der aktuellen Datenbank zu aktualisieren:
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
Um Statistiken für alle Tabellen in der Datenbank zu aktualisieren, führen Sie sp_updatestats (Transact-SQL) aus.
Im folgenden Beispiel wird berichtet, wann die Statistiken zu speicheroptimierten Tabellen zuletzt aktualisiert wurden. Anhand dieser Informationen können Sie entscheiden, ob Sie die Statistiken aktualisieren 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