Pour pouvoir utiliser la recherche de procédure mémorisée, vous devez spécifier les options de la mémoire cache pendant la commande CREATE INDEX. Ceci permet d'obtenir de hautes performances, en déplaçant toutes les données spécifiées dans la mémoire principale.
Cependant, avant la première mise à jour de l'index pour la recherche, vérifiez que votre table contient des documents pour éviter la mise à jour d'un index sur une table vide. Ceci permet d'obtenir de meilleures performances d'indexation et une solide estimation de la configuration requise pour la mémoire cache.
La recherche de procédure mémorisée vous permet de renvoyer rapidement des données prédéfinies, associées à un document. Utilisez l'option 'cache table' pour définir cela dans la commande CREATE INDEX. La commande ACTIVATE CACHE déplace alors les données spécifiées dans une mémoire cache.
Remarque |
---|
Les fonctions de recherche scalaires SQL peuvent également utiliser cet index de texte, s'il n'a pas été créé sur une vue. Dans un environnement DB2 réparti, vous devez spécifier un espace table pour les tables d'administration sur un seul noeud pour la procédure mémorisée et émettre un appel sur ce noeud de manière explicite. Pour être sûr que vous vous connectez au bon noeud, utilisez la variable d'environnement DB2NODE. |
Lors de la création d'un index de texte pour la recherche de procédure mémorisée, vous devez déterminer et calculer les paramètres suivants :
Les types de mémoire cache suivants sont disponibles :
Les méthodes de mise à jour de l'index de texte suivantes sont disponibles :
Cette opération est également connue sous le nom de mise à jour incrémentielle.
Utilisez cette option si vous pensez insérer plus de 50% de vos documents après l'activation initiale de l'index.
L'Extension Net Search fournit deux fonctions SQL vous permettant de déterminer les paramètres de la mémoire CREATE INDEX : MAXIMUM CACHE SIZE et PCTFREE.
DB2EXT.MAXIMUM_CACHE_SIZE(maximumNumberDocs INTEGER, averageRowLength INTEGER, numberOfCacheColumns INTEGER)
La commande suivante renvoie le paramètre de longueur moyenne d'une ligne de votre table :
SELECT AVG(LENGTH(cache column_1) + ... + LENGTH(cache column_n))
Notez que la moyenne peut changer considérablement si d'autres documents sont insérés dans la table. Le nombre de colonnes en mémoire cache fait référence au nombre d'expressions de colonne utilisées dans la clause CACHE TABLE de la commande DB2TEXT CREATE INDEX.
Pour plus d'informations, reportez-vous à l'Annexe B, Utilisation de grandes quantités de mémoire.
DB2EXT.PCTFREE(actualNumberDocs INTEGER, maximumNumberDocs INTEGER)
Le nombre réel de documents correspond au nombre de lignes de la table au moment de la première commande ACTIVATE CACHE qui crée la mémoire cache.
Le nombre maximal de documents est une estimation du nombre maximal de documents contenus dans la table avant que la commande DB2TEXT ACTIVATE suivante (dans le cas d'une mémoire cache temporaire) ou DB2TEXT ACTIVATE CACHE RECREATE (dans le cas d'une mémoire cache persistante) ne soit exécutée.
Si l'index est recréé à chaque mise à jour, définissez la valeur de PCTFREE à 0.
Exemples |
---|
Présumez que votre table comporte 10 000 lignes et que vous ne pensez pas qu'elle en dépassera 20 000. Utilisez l'appel suivant pour calculer la valeur de PCTFREE requise : db2 "values DB2EXT.PCTFREE(10000,20000) " Présumez que la taille maximale de ligne est 20 000 et que vous disposez de deux lignes dans la mémoire cache avec une taille moyenne de 76. Utilisez l'appel suivant pour renvoyer la taille : db2 " values DB2EXT.MAXIMUM_CACHE_SIZE(20000,76,2) " |
Une fois les paramètres adéquats déterminés, vous pouvez créer votre index et la table de mémoire cache à l'aide de l'appel suivant :
db2text CREATE INDEX db2ext.comment FOR TEXT ON db2ext.texttab (comment) CACHE TABLE (docid) PCTFREE 10 MAXIMUM CACHE SIZE 5
Dans cet exemple, la colonne docid est constituée en plus de l'index, utilisant la mémoire principale pour un renvoi rapide de la table de résultats. 10% de la mémoire cache sont réservés aux futurs documents et la mémoire cache est limitée à 5 Mo maximum.
Pour rechercher dans cet index, vous devez le mettre à jour, puis l'activer. Cette opération copie l'expression 'cache table' spécifiée de la base de données dans la mémoire.
Si pendant les opérations ACTIVATE ou UPDATE, les valeurs de MAXIMUM CACHE SIZE ou MAXIMUM NUMBER OF DOCUMENTS sont dépassées, il est recommandé de procéder comme suit :
Si vous attendez de fréquentes mises à jour des documents, envisagez l'utilisation de types de données de taille fixe pour les expressions de la colonne de mémoire cache dans la clause CACHE TABLE. L'exemple suivant montre comment utiliser la même mémoire cache pendant les opérations de mise à jour.
CACHE TABLE(cast(C1 as char(20)), cast(substr(C2,1,10) as char(10))....
Avant l'activation de la mémoire cache, effectuez toutes les mises à jour incrémentielles en attente afin d'éviter un mauvais calcul de la valeur de PCTFREE.
Pour activer l'index de texte, utilisez la commande suivante :
db2text ACTIVATE CACHE FOR INDEX db2ext.comment FOR TEXT
Cette commande extrait les données de la table de la mémoire cache spécifiée hors de la la base de données et les stocke en mémoire. La durée requise dépend de la taille de la table.
Remarque |
---|
Si vous appelez update index lorsqu'un index est activé, les tables de la mémoire cache seront également mises à jour. Les documents supprimés occupant des emplacements en mémoire cache, veillez à définir une valeur suffisante pour PCTFREE. |
L'appel ACTIVATE CACHE doit être réitéré chaque fois que vous arrêtez votre système. Si vous utilisez la mémoire cache persistante, la nouvelle activation sera plus rapide.
Remarque |
---|
Si une mise à jour a lieu lorsque la mémoire cache persistante n'est pas activée, cette dernière est supprimée et recréée lors de l'appel d'activation. |
Pour économiser les ressources, vous devez également désactiver les index qui ne sont pas couramment requis.
Pour vérifier la quantité de mémoire restante, utilisez l'appel suivant :
db2text control show cache status for database cte index db2ext.comment
Ceci indique si l'index a été activé et la quantité d'espace restant dans la mémoire cache spécifiée.