Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Systemobjekte » Systemprozeduren » Alphabetische Liste der Systemprozeduren

 

sa_clean_database-Systemprozedur

Startet den Datenbankaufräumvorgang und setzt die maximale Dauer für seine Ausführung

Syntax
sa_clean_database( [ Dauer ] )
Argumente
  • 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.

Bemerkungen

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.

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. Weitere Hinweise finden Sie unter CREATE EVENT-Anweisung.

Berechtigungen

DBA-Berechtigung erforderlich

Nebenwirkungen

Keine

Siehe auch
Beispiel

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;