Ich habe kürzlich ein Projekt übernommen und sie haben einen SQL-Job-Setup, der alle drei Stunden ausgeführt wird und die Indizes neu erstellt, die in den ASP.NET Membership-Datenbanktabellen gefunden werden.
Das scheint ziemlich hoch zu sein, um Indizes 8 Mal am Tag neu zu erstellen. Ich bekomme jeden Tag ungefähr 2000 neue Benutzer und insgesamt ungefähr 2 Millionen registrierte Benutzer.
Was würden Sie für einen korrekten Zeitplan für den Indexaufbau empfehlen?
Ihre Deadlocks können definitiv mit dem Neuaufbau der Indizes zusammenhängen. Es besteht auch kein Zweifel, dass diese Indizes nicht so häufig neu erstellt werden müssen. Sie sollten jedoch zumindest die Option ONLINE in Erwägung ziehen, wenn Sie verhindern können, dass der Index gelöscht wird, bevor er neu erstellt wird.
Hier ist eine Richtlinie, die wir verwenden:
Der Index sollte beim Index neu erstellt werden Fragmentierung ist größer als 40%. Index sollte beim Index reorganisiert werden Die Fragmentierung liegt zwischen 10% und 40%. Index Neuerstellungsprozess verwendet mehr CPU und es sperrt die Datenbankressourcen. SQL Server-Entwicklungsversion und Die Enterprise Version hat die Option ONLINE, was aktiviert werden kann, wenn Index ist wieder aufgebaut. ONLINE Option behält den Index verfügbar während des Umbaus.
Quelle: Ссылка
Eine gute Faustregel ist REBUILD, wenn über 30% fragmentiert, REORGANIZE zwischen 10% und 30%.
Kümmere dich nicht um Tabellen für weniger als 1000 Seiten, du wirst es nicht bemerken, und selbst nachdem du einen REBUILD für einen über 30% ausgeführt hast, bleibt er oft bei 30%.
Sie sollten wahrscheinlich versuchen, ziemlich selten, wöchentlich höchstens für eine durchschnittliche Datenbank zu reorganisieren. Wenn Sie die Indizes häufiger defragmentieren müssen, müssen Sie wahrscheinlich die Füllfaktoren und den Abstand neu berechnen.
Eine Ausnahme ist nach dem Laden von Massen-Daten, wo es üblich ist, die Indizes zu fragmentieren (manchmal ist es besser, den Index zu deaktivieren oder die Indizes zu löschen und sie neu aufzubauen, abhängig von den geladenen Daten).
Also zusammenfassend scheint 8 mal am Tag übertrieben.
Erfassen Sie das Deadlock-Diagramm, und Sie haben eine tatsächliche Antwort auf Deadlocking, im Gegensatz zu rate . Angesichts der Tatsache, dass ein Deadlock ein relativ seltenes Ereignis ist (oder zumindest sein sollte), kann man Profiler ziemlich sicher über eine lange Zeit anhängen und nur erfassen das Locks/Deadlock Graph -Ereignis.
Beeinträchtigt der Neuaufbau die Systemstabilität oder beansprucht zu viel Systemzeit?
Wenn Sie mit Nein antworten - berühren Sie es nicht:)
Tags und Links asp.net sql-server-2005 indexing asp.net-membership