SQL SERVER 2012
Ich benutze Ich habe mein Auto Update Stats
ON in meiner Datenbank.
Über den folgenden Link habe ich erfahren, dass die Auto-Update-Statistiken für jede SQRT(1000 * Table rows)
Änderung in Tabellenzeilen ausgelöst werden.
https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/
Ich habe eine Tabelle mit 1000 Datensätzen erstellt
SELECT TOP 500 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
name
INTO stst
FROM sys.objects
Statistiken erstellen
CREATE STATISTICS rn
ON stst (rn)
CREATE STATISTICS name
ON stst (name)
Überprüfen der erstellten Statistiken
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
Nach der Formel
select SQRT(1000 * 500) -- 707.106781186548
Wenn ich also 707.106781186548
Datensätze in meiner Tabelle hinzufüge / ändere, sollte die automatische Aktualisierungsstatistik ausgelöst werden
Fügen Sie 1000
meiner Tabelle weitere Datensätze hinzu, die mehr als genug sein sollten, um ausgelöst zu werdenauto update stats
INSERT INTO stst(rn,name)
SELECT TOP 1000 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
a.name
FROM sys.objects a
Um die zu feuern auto update stats
Select * from stst
Überprüfen der Statistiken
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
Leider immer noch das Rows
ist 500
nur.
Selbst nach dem Einfügen von 1000
Datensätzen in meine Tabelle, was offensichtlich größer ist als 707.106781186548
beim Ausführen, SELECT
warum die Auto-Update-Statistiken nicht ausgelöst wurden. Was fehlt mir hier?
quelle
Antworten:
Die neue Berechnung wird nur verwendet, wenn das Ablaufverfolgungsflag 2371 aktiviert ist, außer unter SQL Server 2016, wenn die Kompatibilitätsstufe der Kontextdatenbank auf 130 festgelegt ist, wobei dies das Standardverhalten ist. Siehe Microsoft KB 2754171:
Steuern des Autostat-Verhaltens (AUTO_UPDATE_STATISTICS) in SQL Server
Statistiken werden nicht aktualisiert, wenn Daten geändert werden. Eine Statistikaktualisierung wird ausgelöst, wenn die kostenbasierte Optimierung feststellt, dass interessante Statistiken für die Abfrage veraltet sind.
Der Optimierer gibt keine kostenbasierte Optimierung für sehr einfache ("triviale") Abfragen ein, bei denen ein einzelner offensichtlicher Plan immer optimal ist. In diesem Szenario werden keine Statistikaktualisierungen durchgeführt.
Weitere Informationen finden Sie im Microsoft White Paper Plan Caching und Neukompilierung in SQL Server 2012 von Greg Low.
quelle