Funzione JetDefragment2
Si applica a: Windows | Windows Server
Funzione JetDefragment2
La funzione JetDefragment2 avvia e arresta le attività di deframmentazione del database che migliorano l'organizzazione dei dati all'interno di un database, con un parametro di callback disponibile per segnalare lo stato di avanzamento della deframmentazione. Questa operazione viene eseguita per limitare l'aumento della crescita del database usando l'allocazione del disco esistente in modo più efficiente all'interno del database. Può anche ridurre il working set assicurandosi che i dati siano più strettamente compressi. Infine, può migliorare le prestazioni dell'applicazione accelerando le operazioni comuni tramite un'organizzazione dei dati migliore.
Windows XP:JetDefragment2 è stato introdotto in Windows XP.
JetDefragment2 contiene anche un parametro di funzione di callback usato per segnalare lo stato di avanzamento del processo di deframmentazione.
La deframmentazione del database è un'operazione online e non interrompe attività regolari del database, ad esempio operazioni di query o aggiornamenti dei dati. JetDefragment2 non crea anche una copia di tutti i dati esistenti. Al contrario, deframmenta un database sul posto. Infine, JetDefragment2 recupera lo spazio interno del database per il riutilizzo, ma non rilascia spazio in eccesso nel file system del sistema operativo.
Il formato risultante dei dati può essere molto più efficiente, ma in genere non è ottimale. La deframmentazione è limitata al rilascio di pagine di database per il riutilizzo che contengono dati già eliminati logicamente. La deframmentazione rende disponibili anche le pagine di database per il riutilizzo in alcuni casi combinando i dati di due pagine quando possono essere incluse in una singola pagina.
Questa operazione è diversa da JetCompact , che crea una copia di un database di sola lettura in un formato estremamente ottimale.
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
);
Parametri
sesid
Sessione da utilizzare per questa chiamata.
dbid
Database da deframmentare.
szTableName
A volte szTableName è obbligatorio e talvolta è vietato:
grbit | szTableName |
---|---|
JET_bitDefragmentBTreeBatch |
Deve essere NULL . |
JET_bitDefragmentBTree |
Specifica il nome della tabella/BTree da deframmentare. |
Altro | Deve essere NULL . |
La deframmentazione viene eseguita per l'intero database descritto dall'ID del database specificato.
pcPasses
Quando si avvia un'attività di deframmentazione online, questo parametro di input facoltativo imposta il numero massimo di passaggi di deframmentazione. Quando si arresta un'attività di deframmentazione online, questo buffer di output facoltativo viene impostato sul numero di passaggi eseguiti.
Quando questo parametro è impostato su NULL, il numero di passaggi di deframmentazione online è illimitato.
pcSeconds
Quando si avvia un'attività di deframmentazione online, questo parametro di input facoltativo imposta il tempo massimo per la deframmentazione. Quando si arresta un'attività di deframmentazione online, questo buffer di output facoltativo viene impostato sul periodo di tempo utilizzato per la deframmentazione.
Quando questo parametro è impostato su NULL o se pcSeconds punta a un valore negativo, il tempo massimo per la deframmentazione è illimitato.
callback
Funzione di callback che effettua la deframmentazione chiama regolarmente per segnalare lo stato di avanzamento.
grbit | szTableName |
---|---|
JET_bitDefragmentBTreeBatch |
Deve essere NULL . |
JET_bitDefragmentBTree |
Deve essere NULL . |
Altro | Facoltativa. |
grbit
Un gruppo di bit che specifica zero o più delle opzioni seguenti.
Valore |
Significato |
---|---|
JET_bitDefragmentAvailSpaceTreesOnly |
Questa opzione viene usata per deframmentare la parte di spazio disponibile dell'allocazione dello spazio del database ESE. Lo spazio del database è suddiviso in due tipi, spazio di proprietà e spazio disponibile. Lo spazio di proprietà viene allocato a una tabella o a un indice, mentre lo spazio disponibile è pronto per l'uso rispettivamente all'interno della tabella o dell'indice. Lo spazio disponibile è molto più dinamico nel comportamento e richiede una deframmentazione online maggiore rispetto allo spazio di proprietà, alla tabella o ai dati dell'indice. |
JET_bitDefragmentBatchStart |
Questa opzione viene usata per avviare una nuova attività di deframmentazione. |
JET_bitDefragmentBatchStop |
Questa opzione viene usata per arrestare un'attività di deframmentazione avviata esistente. |
JET_bitDefragmentBTree |
Questa opzione viene usata per deframmentare un albero B, specificato da szTableName. |
JET_bitDefragmentBTreeBatch |
Questa opzione viene usata per chiamare OLD2 sull'intero database. |
Valore restituito
Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti seguenti. Per altre informazioni sui possibili errori ESE, vedere Errori del motore di archiviazione estendibile e parametri di gestione degli errori.
Codice restituito |
Descrizione |
---|---|
JET_errSuccess |
Operazione riuscita. |
JET_errClientRequestToStopJetService |
Non è possibile completare l'operazione perché tutte le attività sull'istanza associata alla sessione sono cessate a seguito di una chiamata a JetStopService. |
JET_errDatabaseFileReadOnly |
Il database scelto per la deframmentazione è di sola lettura e non può essere aggiornato in alcun modo, inclusa la deframmentazione. |
JET_errDistributedTransactionAlreadyPreparedToCommit |
La sessione specificata è pronta a eseguire il commit e non può iniziare nuovi aggiornamenti fino a quando non viene eseguito il commit o il rollback della transazione corrente. |
JET_errInstanceUnavailable |
Non è possibile completare l'operazione perché l'istanza associata alla sessione ha rilevato un errore irreversibile che richiede la revoca dell'accesso a tutti i dati per proteggere l'integrità dei dati. Questo errore verrà restituito solo da Windows XP e versioni successive. |
JET_errInvalidDatabaseId |
L'ID del database specificato non corrisponde a un database noto nell'istanza di . |
JET_errNotInitialized |
Non è possibile completare l'operazione perché l'istanza associata alla sessione non è ancora stata inizializzata. |
JET_errRestoreInProgress |
Non è possibile completare l'operazione perché è in corso un'operazione di ripristino nell'istanza associata alla sessione. |
JET_errSessionSharingViolation |
La stessa sessione non può essere usata contemporaneamente per più thread. Questo errore verrà restituito solo da Windows XP e versioni successive. |
JET_errTermInProgress |
Non è possibile completare l'operazione perché l'istanza associata alla sessione viene arrestata. |
JET_errTransReadOnly |
La sessione specificata ha privilegi di sola lettura e non può avviare un'attività che può eseguire un aggiornamento, inclusa la deframmentazione. |
JET_errVersionStoreOutOfMemory |
Questo errore si verifica quando le dimensioni configurate dell'archivio versioni non sono sufficienti per contenere tutti gli aggiornamenti in sospeso. |
JET_wrnDefragAlreadyRunning |
L'opzione JET_bitDefragmentBatchStart è stata passata, ma un'attività di deframmentazione è già in esecuzione nel database specificato. |
JET_wrnDefragNotRunning |
L'opzione JET_bitDefragmentBatchStop è stata passata, ma attualmente non è in esecuzione alcuna attività di deframmentazione. |
In caso di esito positivo, viene eseguita l'azione richiesta di avviare un'attività di deframmentazione per i dati specificati con le opzioni specificate oppure l'azione di arresto di un'attività di deframmentazione esistente.
In caso di errore, l'azione richiesta di avviare o arrestare un processo di deframmentazione online non viene eseguita. Non si verificano altri effetti collaterali.
Commenti
La deframmentazione online è controllata sia da un'impostazione di parametro che da questa API. Il valore del parametro di sistema predefinito è JET_OnlineDefragAll, il che significa che la deframmentazione è abilitata per tutte le strutture di dati supportate. Tuttavia, usando JetSetSystemParameter, è possibile disabilitare la deframmentazione online o abilitarla in modo selettivo solo per alberi dello spazio del database, solo database, solo file di streaming o qualsiasi combinazione di queste opzioni. Se l'impostazione di sistema per la deframmentazione on-line è un'impostazione obsoleta, JetDefragment2 considererà l'impostazione come JET_OnlineDefragAll.
È possibile eseguire al massimo un'attività per ogni database. L'attività viene eseguita come thread nel processo che ospita ESE.
La sessione utilizzata per avviare l'attività di deframmentazione online può essere usata successivamente per le operazioni di database mentre l'attività di deframmentazione continua, perché l'attività di deframmentazione alloca la propria sessione. La sessione specificata viene usata solo per controllare le autorizzazioni associate alla sessione di avvio dell'attività e non viene effettivamente usata per le operazioni di deframmentazione stesse.
Requisiti
Requisito | Valore |
---|---|
Client |
Richiede Windows Vista o Windows XP. |
Server |
Richiede Windows Server 2008 o Windows Server 2003. |
Intestazione |
Dichiarato in Esent.h. |
Libreria |
Usare ESENT.lib. |
DLL |
Richiede ESENT.dll. |
Unicode |
Implementato come JetDefragment2W (Unicode) e JetDefragment2A (ANSI). |
Vedere anche
JET_ERR
JET_SESID
JetCompact
JetDefragment
JetSetSystemParameter
JetStopService