Startet den Datenbankaufräumvorgang und setzt die maximale Dauer für seine Ausführung
sa_clean_database( [ Dauer ] )
Dauer Die Anzahl der Sekunden, die der Aufräumvorgang dauern kann. Wenn kein Argument oder "0" angegeben ist, läuft der Datenbankaufräumvorgang, bis alle Seiten in allen DBSpaces bereinigt sind.
Der Datenbankaufräumvorgang ist eine interne Aufgabe, die nach einem Standardzeitplan ausgeführt wird. Sie können diese Systemprozedur verwenden, um den Datenbankaufräumvorgang dazu zu veranlassen, sofort auszuführen, und um anzugeben, wie lange der Aufräumvorgang bei jedem Aufruf dauern kann. Wenn Sie diese Systemprozedur verwenden, um den Datenbankaufräumvorgang während einer Datenbankvalidierung zu starten, wird der Datenbankaufräumvorgang erst nach Abschluss der Validierung ausgeführt.
Manche Datenbankaufgaben, wie die Verarbeitung von Snapshot-Isolationstransaktionen, Indexwartung und das Löschen von Zeilen, können effizienter ausgeführt werden, wenn einige Teile der Anforderung auf einen späteren Zeitpunkt verschoben werden. Diese verschiebbaren Aktivitäten betreffen üblicherweise Aufräumvorgänge, bei denen gelöschte, veraltete und andere nicht mehr benötigte Einträge von Datenbankseiten entfernt oder Datenbankseiten für einen effizienteren Zugriff reorganisiert werden.
Das Verschieben einiger dieser Aktivitäten ermöglicht nicht nur einen schnelleren Abschluss der aktuellen Anforderung, sondern auch das Ausführen des Aufräumvorgangs zu einem Zeitpunkt, an dem der Datenbankserver weniger aktiv ist. Diese nicht mehr benötigten Einträge werden so gekennzeichnet, dass sie für andere Transaktionen nicht sichtbar sind. Sie beanspruchen jedoch Platz auf der Seite und müssen früher oder später entfernt werden.
Der Datenbankaufräumvorgang führt alle verschobenen Bereinigungsaktivitäten durch. Sein Zeitplan sieht vor, dass er alle 20 Sekunden läuft. Wenn er aufgerufen wird, durchsucht der Datenbankaufräumvorgang sequenziell die DBSpaces der Datenbank und überprüft bzw. bereinigt jede entsprechende Seite, bevor er zur nächsten geht. Wenn er automatisch vom Datenbankserver aufgerufen wird, ist der Datenbankaufräumvorgang ein selbstoptimierender Prozess. Die Anzahl der Aufgaben, die der Datenbankaufräumvorgang durchführt, und die Dauer seiner Ausführung hängen von mehreren Faktoren ab, wie vom Prozentsatz von zu bereinigenden Seiten in einem DBSpace, vom aktuellen Aktivitätsumfang im Datenbankserver und von der Zeit, die der Datenbankaufräumvorgang bereits läuft. Wenn der Aufräumvorgang, nachdem er 0,5 Sekunden gelaufen ist, eine aktive Anforderung im Server feststellt, stoppt er und erstellt einen neuen Zeitplan, um zu seinem regelmäßigen Intervall auszuführen. Der Datenbankaufräumvorgang versucht, Seiten zu verarbeiten, wenn keine anderen Anforderungen im Server ausgeführt werden, und nutzt daher die Perioden der Inaktivität des Servers.
Datenbankaufräumvorgangs-Statistiken sind über vier Datenbankeigenschaften verfügbar:
CleanablePagesAdded Gibt die Anzahl der Seiten zurück, die bereinigt werden müssen
CleanablePagesCleaned Gibt die Anzahl der Seiten zurück, die bereits bereinigt sind
CleanableRowsAdded Gibt die Anzahl der Zeilen zurück, die bereinigt werden müssen
CleanabledRowsCleaned Gibt die Anzahl der Zeilen zurück, die bereits bereinigt sind
Die Differenz zwischen den Werten von CleanablePagesAdded und CleanablePagesCleaned gibt an, wie viele Datenbankseiten noch bereinigt werden müssen.
Sie können die Systemprozedur sa_clean_database verwenden, um den Datenbankaufräumvorgang so zu konfigurieren, dass er läuft, bis alle Seiten in einer Datenbank bereinigt sind, oder um eine maximale Dauer für die Ausführung des Datenbankaufräumvorgangs festzulegen.
Um das Verhalten des Datenbankaufräumvorgangs weiter anzupassen, können Sie ein Ereignis bestimmen, das den Datenbankaufräumvorgang startet, wenn die Anzahl der zu bereinigenden Seiten oder Zeilen einen angegebenen Schwellenwert überschreitet. Siehe CREATE EVENT-Anweisung.
DBA-Berechtigung
Keine
Das folgende Beispiel setzt die Dauer des Datenbankaufräumvorgangs auf 10 Sekunden:
CALL sa_clean_database( 10 ); |
Das folgende Beispiel erstellt ein geplantes Ereignis, das täglich ausgeführt wird, um es dem Datenbankaufräumvorgang zu ermöglichen, so lange auszuführen, bis alle Seiten in der Datenbank bereinigt sind:
CREATE EVENT DailyDatabaseCleanup SCHEDULE START TIME '6:00 pm' ON ( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday' ) HANDLER BEGIN CALL sa_clean_database( ); END; |
Das folgende Beispiel erzwingt die Ausführung des Datenbankaufräumvorgangs, wenn 20 % oder mehr der Seiten in der Datenbank bereinigt werden müssen:
CREATE EVENT PERIODIC_CLEANER SCHEDULE BETWEEN '9:00 am' and '5:00 pm' EVERY 1 HOURS HANDLER BEGIN DECLARE @num_db_pages INTEGER; DECLARE @num_dirty_pages INTEGER; -- Get the number of database pages SELECT (SUM( DB_EXTENDED_PROPERTY( 'FileSize', t.dbspace_id ) - DB_EXTENDED_PROPERTY( 'FreePages', t.dbspace_id ) )) INTO @num_db_pages FROM (SELECT dbspace_id FROM SYSDBSPACE) AS t; -- Get the number of dirty pages to be cleaned SELECT (DB_PROPERTY( 'CleanablePagesAdded' ) - DB_PROPERTY( 'CleanablePagesCleaned' )) INTO @num_dirty_pages; -- Check whether the number of dirty pages exceeds 20% of -- the size of the database IF @num_dirty_pages > @num_db_pages * 0.20 THEN -- Start cleaning the database for a maximum of 60 seconds CALL sa_clean_database( 60 ); END IF; END; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |