Nettoyage d'index asynchrone
Le nettoyage d'index asynchrone (AIC) est le nettoyage différé des index suite à des opérations d'invalidation des entrées d'index. Selon le type d'index, les entrées peuvent être des identificateurs d'enregistrement (RID) ou des identificateurs de bloc (BID). Les entrées d'index non valides sont supprimées par les rafraîchisseurs d'index, qui fonctionnent de manière asynchrone en arrière-plan.
AIC accélère le processus de déconnexion d'une partition de données d'une table partitionnée et est lancé si la table partitionnée contient un ou plusieurs index non partitionnés. Dans ce cas, AIC supprime toutes les entrées d'index non partitionnées qui font référence à la partition de données détachée, ainsi que toutes les entrées pseudo-supprimées. Une fois tous les index nettoyés, l'identificateur associé à la partition de données déconnectée est supprimé du catalogue système. Dans Db2® version 9.7 Fix Pack 1 et versions ultérieures, AIC est lancé par une tâche de déconnexion de partition asynchrone.
Avant Db2 Version 9.7 Fix Pack 1, si la table partitionnée comporte des tables de requêtes matérialisées (MQT) dépendantes, l'AIC n'est lancé qu'après l'exécution d'une instruction SET INTEGRITY.
L'accès à la table normale est maintenu pendant que l'AIC est en cours. Les requêtes accédant aux index ignorent les entrées non valides qui n'ont pas encore été nettoyées.
Dans la plupart des cas, un programme de nettoyage est démarré pour chaque index non partitionné associé à la table partitionnée. Un démon interne de distribution des tâches est chargé de distribuer les tâches AIC aux partitions de table appropriées et d'affecter des agents de base de données. Le démon de distribution et les agents de nettoyage sont des applications système internes qui apparaissent dans la sortie de la commande LIST APPLICATIONS avec les noms d'application db2taskd et db2aic, respectivement. Pour éviter les interruptions accidentelles, les applications système ne peuvent pas être forcées. Le démon de distribution reste en ligne tant que la base de données est active. Les nettoyeurs restent actifs jusqu'à ce que le nettoyage soit terminé. Si la base de données est désactivée alors que le nettoyage est en cours, l'AIC reprend lorsque vous réactivez la base de données.
Impact de l'AIC sur les performances
L'AIC a un impact minimal sur les performances.
Un test de verrouillage de ligne instantané est requis pour déterminer si une entrée pseudo-supprimée a été validée. Cependant, comme le verrou n'est jamais acquis, l'accès concurrent n'est pas affecté.
Chaque nettoyeur acquiert un verrou d'espace table minimal (IX) et un verrou de table (IS). Ces verrous sont libérés si un programme de nettoyage détermine que d'autres applications attendent des verrous. Dans ce cas, le nettoyeur interrompt le traitement pendant 5 minutes.
Les nettoyeurs sont intégrés à la fonction de régulation de l'utilitaire. Par défaut, chaque nettoyeur a une priorité d'impact utilitaire de 50. Vous pouvez modifier la priorité à l'aide de la commande SET UTIL_IMPACT_PRIORITY ou de l'API db2UtilityControl .
AIC de surveillance
ID = 2
Type = ASYNCHRONOUS INDEX CLEANUP
Database Name = WSDB
Partition Number = 0
Description = Table: USER1.SALES, Index: USER1.I2
Start Time = 12/15/2005 11:15:01.967939
State = Executing
Invocation Type = Automatic
Throttling:
Priority = 50
Progress Monitoring:
Total Work = 5 pages
Completed Work = 0 pages
Start Time = 12/15/2005 11:15:01.979033
ID = 1
Type = ASYNCHRONOUS INDEX CLEANUP
Database Name = WSDB
Partition Number = 0
Description = Table: USER1.SALES, Index: USER1.I1
Start Time = 12/15/2005 11:15:01.978554
State = Executing
Invocation Type = Automatic
Throttling:
Priority = 50
Progress Monitoring:
Total Work = 5 pages
Completed Work = 0 pages
Start Time = 12/15/2005 11:15:01.980524Dans ce cas, deux nettoyeurs fonctionnent sur la table USERS1.SALES . Un nettoyeur traite l'index I1et l'autre traite l'index I2. La section de surveillance de la progression indique le nombre total estimé de pages d'index qui doivent être nettoyées et le nombre actuel de pages d'index nettoyées.
La zone State indique l'état en cours d'un nettoyeur. L'état normal est Exécution, mais le nettoyeur peut être à l'état En attente s'il est en attente d'affectation à un agent de base de données disponible ou s'il est temporairement suspendu en raison d'un conflit d'accès.
Notez que différentes tâches sur différentes partitions de base de données peuvent avoir le même ID utilitaire, car chaque partition de base de données affecte des ID aux tâches qui s'exécutent sur cette partition de base de données uniquement.