Fonction JetDefragment

S’applique à : Windows | Windows Server

Fonction JetDefragment

La fonction JetDefragment démarre et arrête les tâches de défragmentation de base de données qui améliorent la organization des données au sein d’une base de données. Cela permet de limiter la croissance de la base de données en utilisant l’allocation de disque existante plus efficacement au sein de la base de données. Il peut également réduire le jeu de travail en veillant à ce que les données soient plus étroitement compressées. Enfin, il peut améliorer les performances des applications en accélérant les opérations courantes grâce à une meilleure organization des données.

La défragmentation de base de données est une opération en ligne qui n’interrompt pas l’activité régulière de la base de données, telle que les opérations de requête ou les mises à jour de données. JetDefragment ne fait pas non plus une copie de toutes les données existantes. Au lieu de cela, il défragmente une base de données en place. Enfin, JetDefragment récupère l’espace de base de données interne pour la réutilisation, mais ne libère pas d’espace excédentaire pour le système de fichiers du système d’exploitation.

Le format résultant des données peut être beaucoup plus efficace, mais n’est généralement pas optimal. La défragmentation se limite à la libération des pages de base de données à réutiliser qui contiennent des données qui ont déjà été supprimées logiquement. La défragmentation rend également les pages de base de données disponibles pour une réutilisation dans certains cas en combinant les données de deux pages lorsqu’elles peuvent tenir sur une seule page.

Cette opération est différente de JetCompact qui transforme une copie d’une base de données en lecture seule dans une forme hautement optimale.

    JET_ERR JET_API JetDefragment(
      __in          JET_SESID sesid,
      __in          JET_DBID dbid,
      __in          JET_PCSTR szTableName,
      __out_opt     unsigned long* pcPasses,
      __out_opt     unsigned long* pcSeconds,
      __in          JET_GRBIT grbit
    );

Paramètres

sesid

Session à utiliser pour cet appel.

dbid

Base de données qui sera défragmentée.

szTableName

Paramètre inutilisé. La défragmentation est effectuée pour la base de données entière décrite par l’ID de base de données donné.

pcPasses

Lors du démarrage d’une tâche de défragmentation en ligne, ce paramètre d’entrée définit le nombre maximal de passes de défragmentation. Lors de l’arrêt d’une tâche de défragmentation en ligne, cette mémoire tampon de sortie est définie sur le nombre de passes effectuées.

Lorsque ce paramètre est défini sur NULL, le nombre de passes de défragmentation en ligne est illimité.

pcSeconds

Lors du démarrage d’une tâche de défragmentation en ligne, ce paramètre d’entrée définit la durée maximale de défragmentation. Lors de l’arrêt d’une tâche de défragmentation en ligne, cette mémoire tampon de sortie est définie sur la durée utilisée pour la défragmentation.

Lorsque ce paramètre est défini sur NULL ou si pcSeconds pointe vers une valeur négative, la durée maximale de défragmentation est illimitée.

grbit

Groupe de bits spécifiant zéro ou plusieurs des options suivantes.

Valeur

Signification

JET_bitDefragmentAvailSpaceTreesOnly

Défragmente la partie d’espace disponible de l’allocation d’espace de base de données ESE. L’espace de base de données est divisé en deux types : l’espace détenu et l’espace disponible. L’espace détenu est alloué à une table ou à un index, tandis que l’espace disponible est prêt à être utilisé dans la table ou l’index, respectivement. L’espace disponible est beaucoup plus dynamique dans le comportement et nécessite une défragmentation en ligne plus que les données d’espace ou de table ou d’index détenues.

JET_bitDefragmentBatchStart

Démarre une nouvelle tâche de défragmentation.

JET_bitDefragmentBatchStop

Arrête une tâche de défragmentation.

Valeur renvoyée

Cette fonction retourne le type de données JET_ERR avec l’un des codes de retour suivants. Pour plus d’informations sur les erreurs ESE possibles, consultez Erreurs du moteur de stockage extensible et Paramètres de gestion des erreurs.

Code de retour

Description

JET_errSuccess

L’opération s’est terminée avec succès.

JET_errClientRequestToStopJetService

Il n’est pas possible d’effectuer l’opération, car toutes les activités sur le instance associée à la session ont cessé à la suite d’un appel à JetStopService.

JET_errDatabaseFileReadOnly

La base de données choisie pour la défragmentation est en lecture seule et ne peut en aucun cas être mise à jour, y compris la défragmentation.

JET_errDistributedTransactionAlreadyPreparedToCommit

La session donnée est à l’état prêt à valider et ne peut pas commencer de nouvelles mises à jour tant que la transaction actuelle n’est pas validée ou restaurée.

JET_errInstanceUnavailable

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session a rencontré une erreur irrécupérable qui nécessite que l’accès à toutes les données soit révoqué pour protéger l’intégrité de ces données. Cette erreur sera retournée uniquement par Windows XP et les versions ultérieures.

JET_errInvalidDatabaseId

L’ID de base de données donné ne correspond pas à une base de données connue dans le instance.

JET_errNotInitialized

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session n’a pas encore été initialisé.

JET_errRestoreInProgress

Il n’est pas possible d’effectuer l’opération, car une opération de restauration est en cours sur le instance associé à la session.

JET_errSessionSharingViolation

La même session ne peut pas être utilisée pour plusieurs threads en même temps. Cette erreur sera retournée uniquement par Windows XP et les versions ultérieures.

JET_errTermInProgress

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session est en cours d’arrêt.

JET_errTransReadOnly

La session donnée dispose de privilèges en lecture seule et ne peut pas démarrer une tâche susceptible d’effectuer une mise à jour, y compris la défragmentation.

JET_errVersionStoreOutOfMemory

Cette erreur se produit lorsque la taille configurée du magasin de versions est insuffisante pour contenir toutes les mises à jour en attente.

JET_wrnDefragAlreadyRunning

L’option JET_bitDefragmentBatchStart a été passée, mais une tâche de défragmentation est déjà en cours d’exécution sur la base de données donnée.

JET_wrnDefragNotRunning

L’option JET_bitDefragmentBatchStop a été passée, mais aucune tâche de défragmentation n’est en cours d’exécution.

En cas de réussite, l’action demandée de démarrage d’une tâche de défragmentation pour une donnée avec des options données est effectuée, ou l’action d’arrêt d’une tâche de défragmentation existante est effectuée.

En cas d’échec, l’action demandée de démarrage ou d’arrêt d’un travail de défragmentation en ligne n’est pas effectuée. Aucun autre effet secondaire ne se produit.

Notes

La défragmentation en ligne est contrôlée à la fois par un paramètre et par cette API. La valeur du paramètre système par défaut est JET_OnlineDefragAll, ce qui signifie que la défragmentation est activée pour toutes les structures de données prises en charge. Toutefois, à l’aide de JetSetSystemParameter, il est possible de désactiver la défragmentation en ligne ou de l’activer de manière sélective pour les arborescences d’espace de base de données uniquement, les bases de données uniquement, les fichiers de streaming uniquement ou toute combinaison de ces options. Si le paramètre système pour la défragmentation en ligne est défini sur un paramètre obsolète, JetDefragment traite le paramètre comme JET_OnlineDefragAll.

Il peut y avoir au maximum une tâche en cours d’exécution pour chaque base de données. La tâche s’exécute en tant que thread dans le processus hébergeant ESE.

La session utilisée pour démarrer la tâche de défragmentation en ligne peut ensuite être utilisée pour les opérations de base de données pendant que la tâche de défragmentation se poursuit, car la tâche de défragmentation alloue sa propre session. La session donnée est utilisée uniquement pour case activée les autorisations associées à la session de démarrage de la tâche et n’est pas réellement utilisée pour les opérations de défragmentation elles-mêmes.

Spécifications

Condition requise Valeur

Client

Nécessite Windows Vista, Windows XP ou Windows 2000 Professionnel.

Serveur

Nécessite Windows Server 2008, Windows Server 2003 ou Windows 2000 Server.

En-tête

Déclaré dans Esent.h.

Bibliothèque

Utilisez ESENT.lib.

DLL

Nécessite ESENT.dll.

Unicode

Implémenté en tant que JetDefragmentW (Unicode) et JetDefragmentA (ANSI).

Voir aussi

JET_ERR
JET_SESID
JetCompact
JetDefragment2
JetSetSystemParameter
JetStopService