JetDefragment2-Funktion
Gilt für: Windows | Windows Server
JetDefragment2-Funktion
Die JetDefragment2-Funktion startet und beendet Datenbankdefragmentierungstasks, die die datenbasierte organization innerhalb einer Datenbank verbessern, wobei ein Rückrufparameter verfügbar ist, um den Fortschritt der Defragmentierung zu melden. Dies geschieht, um das Datenbankwachstum zu begrenzen, indem die vorhandene Datenträgerzuordnung effizienter innerhalb der Datenbank verwendet wird. Es kann auch den Arbeitssatz reduzieren, indem sichergestellt wird, dass die Daten enger gepackt werden. Schließlich kann es die Anwendungsleistung verbessern, indem allgemeine Vorgänge durch bessere Daten organization beschleunigt werden.
Windows XP:JetDefragment2 wird in Windows XP eingeführt.
JetDefragment2 enthält auch einen Rückruffunktionsparameter, der verwendet wird, um den Fortschritt des Defragmentierungsprozesses zu melden.
Die Datenbank-Defragmentierung ist ein Onlinevorgang und unterbricht keine reguläre Datenbankaktivität wie Abfragevorgänge oder Datenupdates. JetDefragment2 macht auch keine Kopie aller vorhandenen Daten. Stattdessen wird eine Datenbank defragmentiert. Schließlich stellt JetDefragment2 internen Datenbankspeicherplatz für die Wiederverwendung wieder her, gibt jedoch keinen überschüssigen Speicherplatz für das Betriebssystemdateisystem frei.
Das resultierende Format der Daten kann viel effizienter sein, ist aber im Allgemeinen nicht optimal. Die Defragmentierung ist auf das Freigeben von Datenbankseiten für die Wiederverwendung beschränkt, die Daten enthalten, die bereits logisch gelöscht wurden. Durch die Defragmentierung können Datenbankseiten in einigen Fällen auch wiederverwenden, indem Daten von zwei Seiten kombiniert werden, wenn sie auf eine einzelne Seite passen können.
Dieser Vorgang unterscheidet sich von JetCompact , bei dem eine Kopie einer schreibgeschützten Datenbank in eine höchst optimale Form umgewandelt wird.
JET_ERR JET_API JetDefragment2(
__in JET_SESID sesid,
__in JET_DBID dbid,
__in JET_PCSTR szTableName,
__out_opt unsigned long* pcPasses,
__out_opt unsigned long* pcSeconds,
__in JET_CALLBACK callback,
__in JET_GRBIT grbit
);
Parameter
sesid
Die Sitzung, die für diesen Aufruf verwendet werden soll.
dbid
Die zu defragmentierende Datenbank.
szTableName
Manchmal ist szTableName erforderlich, manchmal ist es verboten:
grbit | szTableName |
---|---|
JET_bitDefragmentBTreeBatch |
Muss NULL lauten. |
JET_bitDefragmentBTree |
Gibt den Namen der zu defragmentierenden Tabelle/BTree an. |
andere | Muss NULL lauten. |
Die Defragmentierung wird für die gesamte Datenbank durchgeführt, die durch die angegebene Datenbank-ID beschrieben wird.
pcPasses
Beim Starten einer Online-Defragmentierungstask legt dieser optionale Eingabeparameter die maximale Anzahl von Defragmentierungsdurchläufen fest. Beim Beenden eines Onlinedefragmentierungstasks wird dieser optionale Ausgabepuffer auf die Anzahl der ausgeführten Durchläufe festgelegt.
Wenn dieser Parameter auf NULL festgelegt ist, ist die Anzahl der Onlinedefragmentierungsdurchläufe unbegrenzt.
pcSeconds
Beim Starten eines Online-Defragmentierungstasks legt dieser optionale Eingabeparameter die maximale Defragmentierungszeit fest. Beim Beenden eines Onlinedefragmentierungstasks wird dieser optionale Ausgabepuffer auf die Dauer festgelegt, die für die Defragmentierung verwendet wird.
Wenn dieser Parameter auf NULL festgelegt ist oder pcSeconds auf einen negativen Wert verweist, ist die maximale Zeit für die Defragmentierung unbegrenzt.
Rückruf
Rückruffunktion, die die Defragmentierung regelmäßig aufruft, um den Fortschritt zu melden.
grbit | szTableName |
---|---|
JET_bitDefragmentBTreeBatch |
Muss NULL lauten. |
JET_bitDefragmentBTree |
Muss NULL lauten. |
andere | Optional. |
grbit
Eine Gruppe von Bits, die null oder mehr der folgenden Optionen angibt.
Wert |
Bedeutung |
---|---|
JET_bitDefragmentAvailSpaceTreesOnly |
Diese Option wird verwendet, um den verfügbaren Speicherplatzanteil der ESE-Datenbankplatzzuordnung zu defragmentieren. Der Datenbankspeicher ist in zwei Typen unterteilt: eigenen Speicherplatz und verfügbarer Speicherplatz. Der eigene Speicherplatz wird einer Tabelle oder einem Index zugewiesen, während der verfügbare Speicherplatz für die Verwendung in der Tabelle bzw. dem Index bereit ist. Der verfügbare Speicherplatz ist viel dynamischer im Verhalten und erfordert eine Onlinefragmentierung mehr als eigene Speicherplatz- oder Tabellen- oder Indexdaten. |
JET_bitDefragmentBatchStart |
Diese Option wird verwendet, um einen neuen Defragmentierungstask zu starten. |
JET_bitDefragmentBatchStop |
Diese Option wird verwendet, um einen vorhandenen gestarteten Defragmentierungstask zu beenden. |
JET_bitDefragmentBTree |
Diese Option wird verwendet, um eine durch szTableName angegebene B-Struktur zu defragmentieren. |
JET_bitDefragmentBTreeBatch |
Diese Option wird verwendet, um OLD2 für die gesamte Datenbank aufzurufen. |
Rückgabewert
Diese Funktion gibt den JET_ERR-Datentyp mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu möglichen ESE-Fehlern finden Sie unter Erweiterbare Speichermodulfehler und Fehlerbehandlungsparameter.
Rückgabecode |
Beschreibung |
---|---|
JET_errSuccess |
Der Vorgang wurde erfolgreich abgeschlossen. |
JET_errClientRequestToStopJetService |
Es ist nicht möglich, den Vorgang abzuschließen, da alle Aktivitäten auf dem instance, die der Sitzung zugeordnet sind, aufgrund eines Aufrufs von JetStopService beendet wurden. |
JET_errDatabaseFileReadOnly |
Die für die Defragmentierung ausgewählte Datenbank ist schreibgeschützt und kann in keiner Weise aktualisiert werden, einschließlich der Defragmentierung. |
JET_errDistributedTransactionAlreadyPreparedToCommit |
Die angegebene Sitzung befindet sich im Bereit für den Commitzustand und kann erst dann mit neuen Updates beginnen, wenn die aktuelle Transaktion committet oder ein Rollback ausgeführt wird. |
JET_errInstanceUnavailable |
Es ist nicht möglich, den Vorgang abzuschließen, da beim instance, der der Sitzung zugeordnet ist, ein schwerwiegender Fehler aufgetreten ist, der erfordert, dass der Zugriff auf alle Daten widerrufen wird, um die Integrität dieser Daten zu schützen. Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errInvalidDatabaseId |
Die angegebene Datenbank-ID stimmt nicht mit einer bekannten Datenbank im instance überein. |
JET_errNotInitialized |
Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete instance noch nicht initialisiert wurde. |
JET_errRestoreInProgress |
Es ist nicht möglich, den Vorgang abzuschließen, da auf dem der Sitzung zugeordneten instance ein Wiederherstellungsvorgang ausgeführt wird. |
JET_errSessionSharingViolation |
Dieselbe Sitzung kann nicht für mehrere Threads gleichzeitig verwendet werden. Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errTermInProgress |
Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete instance heruntergefahren wird. |
JET_errTransReadOnly |
Die angegebene Sitzung verfügt nur über schreibgeschützte Berechtigungen und kann keine Aufgabe starten, die möglicherweise ein Update ausführt, einschließlich Defragmentierung. |
JET_errVersionStoreOutOfMemory |
Dieser Fehler tritt auf, wenn die konfigurierte Größe des Versionsspeichers nicht ausreicht, um alle ausstehenden Updates aufzunehmen. |
JET_wrnDefragAlreadyRunning |
Die option JET_bitDefragmentBatchStart wurde übergeben, aber ein Defragmentierungstask führt bereits die Defragmentierung für die angegebene Datenbank aus. |
JET_wrnDefragNotRunning |
Die option JET_bitDefragmentBatchStop wurde übergeben, aber derzeit wird kein Defragmentierungstask ausgeführt. |
Bei Erfolg wird die angeforderte Aktion ausgeführt, entweder einen Defragmentierungstask für eine bestimmte Daten mit bestimmten Optionen zu starten, oder die Aktion zum Beenden eines vorhandenen Defragmentierungstasks wird ausgeführt.
Bei einem Fehler wird die angeforderte Aktion des Startens oder Beendens eines Online-Defragmentierungsauftrags nicht ausgeführt. Es treten keine weiteren Nebenwirkungen auf.
Bemerkungen
Die Onlinedefragmentierung wird sowohl durch eine Parametereinstellung als auch durch diese API gesteuert. Der Standardwert des Systemparameters ist JET_OnlineDefragAll. Dies bedeutet, dass die Defragmentierung für alle unterstützten Datenstrukturen aktiviert ist. Mit JetSetSystemParameter ist es jedoch möglich, die Onlinedefragmentierung zu deaktivieren oder selektiv nur für Datenbankraumstrukturen, nur Datenbanken, nur Streamingdateien oder eine beliebige Kombination dieser Optionen zu aktivieren. Wenn die Systemeinstellung für die Onlinedefragmentierung eine veraltete Einstellung ist, behandelt JetDefragment2 die Einstellung als JET_OnlineDefragAll.
Es kann höchstens eine Aufgabe für jede Datenbank ausgeführt werden. Der Task wird als Thread im Prozess ausgeführt, der ESE hostt.
Die Sitzung, die zum Starten des Onlinedefragmentierungstasks verwendet wird, kann anschließend für Datenbankvorgänge verwendet werden, während der Defragmentierungstask fortgesetzt wird, da der Defragmentierungstask eine eigene Sitzung zuweist. Die angegebene Sitzung wird nur verwendet, um die Berechtigungen zu überprüfen, die der Taskstartsitzung zugeordnet sind, und wird nicht tatsächlich für die Defragmentierungsvorgänge selbst verwendet.
Anforderungen
Anforderung | Wert |
---|---|
Client |
Erfordert Windows Vista oder Windows XP. |
Server |
Erfordert Windows Server 2008 oder Windows Server 2003. |
Kopfzeile |
Deklariert in Esent.h. |
Bibliothek |
Verwenden Sie ESENT.lib. |
DLL |
Erfordert ESENT.dll. |
Unicode |
Implementiert als JetDefragment2W (Unicode) und JetDefragment2A (ANSI). |
Weitere Informationen
JET_ERR
JET_SESID
JetCompact
JetDefragmentierung
JetSetSystemParameter
JetStopService