2009-02-24 7 views
12

Erstellen alle SQL Server-Versionen Indizes automatisch neu oder haben ein Standard-Wiederherstellungskriterium? Ich verstehe, Statistiken werden automatisch neu erstellt, aber nicht sicher, ob Indizes auch das tun.Erstellen alle SQL Server-Versionen Indizes automatisch neu oder haben ein Standard-Wiederherstellungskriterium?

+0

Ich glaube nicht, Statistiken werden automatisch neu erstellt - sie neu erstellt werden, wenn der Index neu erstellt wird, oder durch spezifischen Befehl. Der Maintenance Wizard lässt Sie ein vernünftiges "Starter" -Datenbank-Wartungsprogramm einrichten, aber für größere/ausgelastete Datenbanken müssen Sie möglicherweise etwas anspruchsvollere erstellen – Kristen

+0

Siehe meine Antwort für Details, wie Statistiken in SQL Server funktionieren. –

Antwort

9

Der Neuaufbau von Indizes wird in jeder Version von Microsoft SQL Server nicht automatisch unterstützt. Der Grund dafür ist, dass der Neuaufbau von Indizes möglicherweise sehr kostspielige Operationen sein kann und daher eine sorgfältige Planung und Planung erfordert.

In vielen Umgebungen spezielle Skripte geschrieben werden, dies zu umgehen, zum Beispiel:

http://weblogs.sqlteam.com/tarad/archive/2008/09/03/Defragmenting-Indexes-in-SQL-Server-2005.aspx

Beachten Sie, dass während SQL automatisch Statistiken für Sie in vielen Fällen aktualisieren kann es ein Leistungsgewinn von zu haben ist diese auch sorgfältiger verwalten.

+0

Ich sehe, dass Ihre Antwort von 2009 ist, ist dies immer noch für neuere Versionen von SQL Server gültig? –

+0

AFAIK ist dies immer noch gültig, obwohl es möglicherweise bessere Optionen gibt, die Ihnen helfen, diese Art von Wartungsjob einzurichten. Vielleicht überprüfen Sie auf http://dba.stackexchange.com? – Chris

0

Es muss geplant und arrangiert werden.

Bei der Sortierung hängt es von der Größe der Tabellen und des Wartungsfensters ab.

Außerdem werden Statistiken automatisch neu erstellt, wenn die Indizes neu erstellt werden, sie können jedoch separat geplant werden.

Für eine schnelle Lösung, ein schönes langen Wartungsfensters und nicht zu groß (bis zu einigen 100 GBs) unter der Annahme, nur dieser Zeitplan:

EXEC sp_msforeachtable 'SET QUOTED_IDENTIFIER ON ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 90)' 

Edit: nur für> SQL 2005 dieses SQL

0

Wie @ Chris bemerkt, Indizes werden nicht automatisch in jeder SQL Server-Version neu erstellt. An Standorten ohne dedizierte DBA-Rolle fehlt häufig die korrekte Indexpflege, und oft werden Datenbanken einfach von der Entwicklung in die Produktion verschoben (zusammen mit der Transaktionsprotokollwartung).

SQL Server 2005+ bietet die Möglichkeit, Online-Indexreorganisationen und Offline-Neuanschaffungen durchzuführen.

7

Wie bereits erwähnt, werden Ihre Indizes nicht automatisch neu erstellt. Dies ist ein ziemlich großes Problem in SQL Server, da Ihre Indizes im Laufe der Zeit fragmentieren. Sie könnten feststellen, dass Ihre Indizes zu 95% plus fragmentiert sind, was sich negativ auf die Abfrageleistung auswirkt.

Hier ist eine einfache Abfrage Fragmentierung auf Ihrem vorhandenen Indizes zu überprüfen:

DECLARE @DBNAME VARCHAR(130); 
SET @DBNAME = 'MYDBNAME'; 

DECLARE @DBID INT; 
SET @DBID = DB_ID(@DBNAME); 

SELECT 
OBJECT_ID AS objectID 
, index_id AS indexID 
, avg_fragmentation_in_percent AS fragmentation 
, page_count 
INTO #indexDefragList 
FROM 
sys.dm_db_index_physical_stats 
(@DBID, NULL, NULL , NULL, N'Limited') 
WHERE 
index_id > 0 
OPTION (MaxDop 1); 

SELECT 
i.[name] as indexname, 
d.fragmentation, 
d.page_count 
FROM 
#indexDefragList d 
INNER JOIN sys.indexes i 
ON d.objectid = i.object_id 
ORDER BY 
d.fragmentation DESC 

DROP TABLE #indexDefragList 

Diese Liste aller Indizes in der aktuellen DB mit ihrer Zersplitterung in% zurück.

Sie können einfach ein Skript erstellen, um sie automatisch neu zu erstellen oder zu reorganisieren. Es gibt eine great article from SQLFool on this mit einem kompletten vorgefertigten Skript.

+0

danke für das Skript. Aber ich musste OBJECT_ID zu object_id und d.objectid zu d.objectID ersetzen. Ich vermute, das ist wegen der Groß-/Kleinschreibung von Kleinbuchstaben nach meiner aktuellen Kodierung. – Fer

1

auf zu erweitern, was Chris hat gesagt:

In Bezug auf Statistiken, Spalten werden nicht durch einen Index, die nicht von dem Wiederaufbau alle Indizes der Statistiken aktualisiert werden. Sie können regelmäßig von SQL Server aktualisiert werden, Sie müssen dies jedoch möglicherweise selbst mit der Anweisung UPDATE STATISTICS tun.

SQL Server 2005 legt fest, ob Statistiken automatisch basierend auf Änderungen an Spaltenänderungszählern (colmodctrs) aktualisiert werden.

Ein Statistik-Objekt ist nicht mehr aktuell in den folgenden Fällen in Betracht gezogen:

1. Die Tabellengröße von 0 auf> 0 Zeilen weg.

2.Die Anzahl der Zeilen in der Tabelle beim Erfassen der Statistik betrug 500 oder weniger, und das colmodctr der führenden Spalte des Statistikobjekts hat sich seither um mehr als 500 geändert.

3.The Tabelle hatte mehr als 500 Zeilen, wenn die Statistiken gesammelt wurden, und der Colmodctr der führenden Spalte des Statistikobjekts hat sich um mehr als 500 + 20% der Anzahl der Zeilen in der Tabelle bei der Statistik geändert

Sie wurden

gesammelt möglicherweise die folgende Referenz in Bezug auf Spiel Verwendung finden:

http://blogs.technet.com/rob/archive/2008/05/16/sql-server-statistics.aspx

hoffe, das hilft aber gerne weitere Fragen zu stellen.

Cheers, John