Complément de configuration du cache de données de HCL Commerce

Pour affiner la configuration du cache de données HCL Commerce, ajoutez un élément <CrossTransactionCache> ou <LocalTransactionCache> à l'élément <InstanceProperties> du fichier de configuration HCL Commercewc-server.xml.

Note: Lorsque vous effectuez une migration de WebSphere Commerce version 7 ou 8 vers HCL Commerce version 9.x, vous devez supprimer la balise CrossTransactionCache ajoutée afin d'utiliser les valeurs par défaut. Si vous avez modifié certaines des valeurs, vérifiez la raison pour laquelle les valeurs par défaut ne sont pas utilisées et décidez si vous souhaitez conserver les valeurs personnalisées ou accepter celles par défaut. Il est toutefois recommandé d'utiliser les valeurs par défaut.

Elément <CrossTransactionCache>

Le cache inter-transactions contient des données qui persistent pour l'ensemble des transactions jusqu'à ce qu'elles arrivent à expiration du fait de DynaCache.

Le code suivant illustre la façon dont les éléments disponibles sont définis pour le cache inter-transactions. Les valeurs possibles pour un élément sont incluses, par exemple [seconds|172800]. La valeur de cet élément peut être n'importe quel nombre positif (en secondes). La valeur par défaut, qui figure en gras, est 172800.

<CrossTransactionCache enabled="[true|false]" commandCaching="[on|off|default]" maxInactivityTime="[seconds|86400]" maxTimeToLive="[seconds|172800]" maxTimeToLiveForAutoCacheEntries="[seconds|0]" autoCacheableTableNames="string" notAutoCacheableTableNames="string" defaultResultSizeThreshold="[number|8]" clearUserOnLogoff="[true|false]" clearUserDataCacheOnLogoff="[true|false]" maxInvalidationldsPerTransaction="[number|100000]" clearCacheOnMaxInvalidationIdsPerTransaction="[true|false]"reduceMemory="[true|false]"chunkSize="[number of rows|50]"delayAfterInvalidationMilliseconds="[milliseconds|0]"HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationPercentBuffer="[percent|-1]"HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationTuneIntervalSeconds="[seconds|60]"restCaching="[true|false]"reduceInvalidationIds="[true|false]"sizeable="[true|false]"CacheName="[disabled|DistributedMapName|commandCaching]" avoidConcurrentCacheMiss="[true|false]"> <DistributedMapName enabled="[true|false]" maxInactivityTime="seconds" maxTimeToLive="seconds" maxTimeToLiveForAutoCacheEntries="[seconds|0]"reduceMemory="[true|false]"delayAfterInvalidationMilliseconds="[milliseconds|0]"HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationPercentBuffer="[percent|-1]"HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationTuneIntervalSeconds="[seconds|60]"restCaching="[true|false]"chunkSize="[number of rows|50]" avoidConcurrentCacheMiss="[true|false]">/> <CacheName enabled="[true|false]" maxInactivityTime="seconds" maxTimeToLive="seconds" maxTimeToLiveForAutoCacheEntries="[seconds|0]"reduceMemory="[true|false]"delayAfterInvalidationMilliseconds="[milliseconds|0]"HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationPercentBuffer="[percent|-1]"HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationTuneIntervalSeconds="[seconds|60]"restCaching="[true|false]"chunkSize="[number of rows|50]" avoidConcurrentCacheMiss="[true|false]">/> </CrossTransactionCache>
Où :
Nom de d'élémentValeurs possibles (valeurs par défaut en gras)Utilisation
enabledtrue|falseIndiquez false pour désactiver toute mise en cache des données inter-transactions
commandCachingon|off|defaultIndiquez la valeur on pour obliger le cache des données inter-transactions à utiliser la mise en cache d'instructions dans le cache de base par défaut DistributedMap.

Indiquez la valeur off pour empêcher le cache des données inter-transactions d'utiliser la mise en cache d'instructions.

Le paramètre par défaut utilise la mise en cache DistributedMap lorsque le cache DistributedMap correspondant est trouvé à l'aide de son nom JNDI ; dans le cas contraire, il utilise la mise en cache d'instructions dans le cache DistributedMap par défaut.

maxInactivityTimeseconds|86400Indiquez le délai en secondes après lequel une entrée de cache inactive est supprimée du cache pour raison d'inactivité.

Ce paramètre n'a pas d'effet lorsque la mise en cache d'instructions est utilisée. Utilisez plutôt la balise <inactivity> dans le fichier cachespec.xml.

maxTimeToLiveseconds|172800|0Afin d'éviter d'éventuels problèmes dus à de légers retards dans la propagation des messages d'invalidation, la valeur par défaut maxTimeToLive pour les caches logiques suivants est zéro (désactivant efficacement la mise en cache) :
com.ibm.commerce.component.contextservice.commands.ContextDataSerValueCacheCmdImpl com.ibm.commerce.user.objects.MemberAccessBean com.ibm.commerce.user.objects.UserAccessBean com.ibm.commerce.user.objects.UserRegistryAccessBean com.ibm.commerce.membergroup.commands.ListMemberGroupsForUserCmdImpl com.ibm.commerce.marketing.promotion.runtime.PromotionArgumentSessionBeanPersistenceManager com.ibm.commerce.marketing.promotion.coupon.CouponSessionBeanPersistenceManager
La spécification d'une valeur maxTimeToLive positive remplace la valeur par défaut (réactivant efficacement la mise en cache). Si vous choisissez de le faire, envisagez également de spécifier une valeur pour le paramètre delayAfterInvalidationMilliseconds (une valeur différente peut être spécifiée pour chaque cache logique). Le paramètre delayAfterInvalidationMilliseconds peut être utilisé pour laisser le temps au traitement des messages d'invalidation de se terminer avant que l'exécution ne se poursuive après la modification des données mises en cache dans la base de données. Par exemple, vous pouvez commencer par une valeur de 500 millisecondes, puis essayer de trouver une valeur plus optimale.
autoCacheableTableNames

notAutoCacheableTableNames

chaîne

Les paramètres autoCacheableTableNames et notAutoCacheableTableNames sont définis uniquement au niveau global, et chacun est une liste de noms de table de base de données délimités par un espace blanc, où les espaces, les nouvelles lignes et les tabulations sont traités comme des espaces blancs. Si un nom de table apparaît dans les deux paramètres, le paramètre notAutoCacheableTableNames est prioritaire. Par défaut, le cache de données suppose que certains noms de table (comme USERS et ORDERS) disqualifient également une requête de mise en cache automatique, à moins que les noms apparaissent dans le paramètre autoCacheableTableNames.

Par défaut, ces valeurs de chaîne sont vides.

maxTimeToLiveForAutoCacheEntriesseconds|0Quand un nombre positif de secondes est spécifié, certains résultats de requête JDBC admissibles sont mis en cache à l'aide des caches logiques suivants :
  • com.ibm.commerce.base.objects.ServerJDBCHelperBean
  • com.ibm.commerce.foundation.internal.server.services.dataaccess.queryservice.XPathSQLProcessor
  • com.ibm.commerce.foundation.server.services.dataaccess.JDBCQueryService
  • com.ibm.commerce.foundation.internal.server.services.dataaccess.graphbuilderservice.jdbc.JDBCMediatorSupplyQuery

Pour se qualifier pour la mise en cache automatique, une requête JDBC doit référencer un ou plusieurs des noms de table inclus dans le paramètre autoCacheableTableNames, et ne doit pas faire référence à l'un des noms de table inclus dans le paramètre notAutoCacheableTableNames.

Utilisez IBM Extended Cache Monitor pour voir quelles requêtes sont mises en cache, et leurs identifiants de dépendance. Par défaut, les résultats de requête en cache automatique sont mis en cache dans le cache d'objets avec le nom JDNI services/cache/WCMiscDistributedMapCache.

Bien que la mise en cache automatique puisse améliorer les performances, utilisez cette fonction avec précaution. Sachez quelles requêtes sont mises en cache et veillez à ce qu'une technique d'invalidation du cache acceptable soit utilisée, comme une durée de vie courte ou des déclencheurs de base de données qui ajoutent des ID d'invalidation de cache appropriés à la table CACHEIVL dans la colonne DATAID.

defaultResultSizeThresholdnumber|8Lorsque la taille de la collecte d'objets à mettre en cache dans une entrée de cache dépasse la valeur de seuil spécifiée, des identificateurs de dépendance sont générés à l'aide des noms de table uniquement. Pour réduire le nombre d'identificateurs de dépendance générés pour l'entrée de cache, les noms de colonne et les valeurs ne sont pas utilisés.
clearUserOnLogofftrue|falseIndiquez la valeur false si les ID d'invalidation DC_userid:nnnn ne doivent pas être envoyés au cache de base lorsque l'utilisateur avec l'ID nnnn se déconnecte.
clearUserDataCacheOnLogofftrue|falseIndiquez la valeur true si les entrées du cache de données spécifiques à un utilisateur doivent être supprimées du cache lorsque cet utilisateur se déconnecte.
maxInvalidationldsPerTransactionnumber|100000Indique le nombre maximal d'opérations d'invalidation des données en mémoire cache inter-transactions pouvant être exécutées en une seule transaction.

La connaissance de chaque exécution d'opération d'invalidation doit être conservée au cours de la transaction en cours. Une transaction de longue durée qui exécute un nombre trop important d'opérations d'invalidation peut se trouver à court de mémoire.

Lorsque la limite indiquée est atteinte, aucun autre ID d'invalidation n'est gardé en mémoire pour le cache inter-transactions pendant la durée restante de la transaction en cours. Lorsque la transaction est terminée :
  • L'intégralité de la mémoire cache inter-transactions est effacée.
  • L'action définie par la configuration clearCacheOnMaxInvalidationIdsPerTransaction est réalisée.
clearCacheOnMaxInvalidationIdsPerTransactiontrue|falseIndique l'action à exécuter lorsque le nombre maximal d'opérations d'invalidation des données du cache inter-transactions, spécifié par l'élément maxInvalidationIdsPerTransaction, est dépassé.

Spécifiez la valeur true pour effacer l'intégralité du cache inter-transactions une fois la transaction en cours terminée.

Lorsque cet élément a la valeur false, les invalidations sont émises immédiatement et ne sont pas conservées jusqu'à la fin de la transaction en cours. Ce paramètre laisse une petite fenêtre de temps pendant laquelle les données périmées peuvent être placées dans le cache.

reduceMemorytrue|falseSpécifiez la valeur true pour réduire l'encombrement du cache inter-transactions.
chunkSizenumber of rows|50Certains requêtes de base de données peuvent renvoyer des centaines, voire des milliers de lignes. Les lignes renvoyées sont scindées en plusieurs entrées de cache pour gérer l'empreinte de mémoire cache et éviter les problèmes liés à un manque de mémoire. Ce paramètre spécifie le nombre de lignes qui doivent être mises en cache dans chaque entrée de cache.
delayAfterInvalidationMillisecondsmilliseconds|0Ce paramètre permet d'ajouter un bref délai avant l'envoi d'une réponse au navigateur client pour toute transaction impliquant une invalidation. Ce délai peut contribuer à empêcher le client d'effectuer une autre demande avant que l'invalidation soit complètement traitée sur le serveur.

HCL Commerce Version 9.1.7.0 or laterSi elle est activée par une valeur supérieure à 0, le délai utilisé par votre site est la plus grande valeur (un délai minimum) entre delayAfterInvalidationMilliseconds et la valeur calculée par delayAfterInvalidationPercentBuffer, si ce paramètre est activé par une valeur non négative.

HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationPercentBufferpercent|-1Ce paramètre définit une mémoire tampon de temps en pourcentage, la valeur pc, qui est ajoutée dans une valeur de délai calculée (variable).

Le délai utilisé par votre site est alors déterminé comme la plus grande valeur (un délai minimum) entre la valeur de délai set delayAfterInvalidationMilliseconds définie et la valeur de délai variable calculée à l'aide de delayAfterInvalidationPercentBuffer.

Le calcul est effectué en dérivant le délai réel entre la fin d'une transaction et l'émission d'ID d'invalidation, puis en ajoutant la mémoire tampon de temps en pourcentage spécifiée (pc).

La valeur du délai est calculée à chaque intervalle de période spécifié par delayAfterInvalidationTuneIntervalSeconds. A cet intervalle, un exemple du temps requis pour un message d'invalidation aller-retour (l'envoi et la réception d'un message d'invalidation unique) est pris en compte pour être utilisé dans le calcul.

Pour les valeurs positives de delayAfterInvalidationPercentBuffer, la valeur du délai est calculée comme rt + (rt*pc/100).

rt est l'exemple de durée d'aller-retour et pc est la valeur de pourcentage spécifiée.

Valeur acceptées :

  • Un nombre négatif (-1) est spécifié pour indiquer que delayAfterInvalidationMilliseconds reste le délai utilisé. Il s'agit de la valeur par défaut.
  • En spécifiant 0, l'exemple de durée aller-retour (rt), sans mémoire tampon ajoutée, est comparé à delayAfterInvalidationMilliseconds pour dériver le délai utilisé.
  • En spécifiant un nombre total positif (1 ou une valeur supérieure), l'exemple de durée d'aller-retour, avec la mémoire tampon de pourcentage ajoutée, est comparé à delayAfterInvalidationMilliseconds pour dériver le délai utilisé.
Note: Ce paramètre nécessite que delayAfterInvalidationMilliseconds soit défini sur une valeur supérieure à sa valeur par défaut de 0. Sinon, aucun délai n'est utilisé.
HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationTuneIntervalSecondsseconds|60Nombre de secondes entre les exemples de la durée d'envoi et de réception d'un message d'invalidation.

Cette valeur est utilisée pour dériver la mémoire tampon de délai variable pour delayAfterInvalidationPercentBuffer.

restCachingtrue|falseCe paramètre permet de désactiver la mise en cache pendant que les services REST sont en cours d'exécution.
reduceInvalidationIdstrue|falseSpécifiez la valeur true pour réduire le nombre de messages d'invalidation émis lors de modifications, dans la base de données, des données mises en cache. Les systèmes avec un grand nombre de machines virtuelles Java de serveur d'applications HCL Commerce peuvent bénéficier de ce paramètre. Une invalidation excessive peut cependant se produire. Vous devez donc mesurer l'impact global sur les performances avant de choisir ce paramètre pour un système de production.
sizeabletrue|falseSpécifiez la valeur true afin d'implémenter l'interface com.ibm.websphere.cache.Sizeable pour la plupart des entrées de cache utilisées par les caches d'objet HCL Commerce suivants :
  • services/cache/DM_Cache (cache marketing)
  • services/cache/DM_UserCache (cache du comportement utilisateur marketing)
  • dmap/IVCache (cache de disponibilité de stock externe)
  • dmap/PriceCache (cache de tarification externe)
  • dmap/PR_Cache (cache de la règle de tarification)
  • services/cache/WC*DistributedMapCache (toutes les instances de cache d'objet de cache de données)

Le fait de spécifier la valeur true permet également d'implémenter l'interface com.ibm.websphere.cache.Sizeable pour la plupart des instructions pouvant être mises en cache utilisées par défaut par HCL Commerce.

CacheName

Par exemple, com.ibm.commerce.user.objects.OrganizationAccessBean

disabled|DistributedMapName |commandCachingCacheName indique un cache logique utilisé par le cache de données de Commerce.

DistributedMapName est un nom comportant un préfixe services/cache/. DistributedMapName forme un nom JNDI servant à localiser un cache DistributedMap pouvant être utilisé pour contenir des données pour le cache logique spécifié.

Le cache DistributedMap réel utilisé correspond au premier des objets DistributedMap suivants détectés :
  • services/cache/CacheName
  • services/cache/DistributedMapName
  • services/cache/WCDistributedMapCache
  • le cache de base par défaut DistributedMap
Voir Noms des caches logiques et les DistributedMaps qu'ils utilisent par défaut.

Indiquez la valeur disabled pour empêcher la mise en cache pour le cache logique spécifié.

Indiquez la valeur commandCaching pour utiliser la mise en cache d'instructions dans le cache de base par défaut DistributedMap.

avoidConcurrentCacheMisstrue|falseSpécifiez la valeur true pour autoriser uniquement une unité d'exécution à la fois pour exécuter la même requête avec les mêmes paramètres.
<DistributedMapName/>

Par exemple, <WCUserDistributedMapCache enabled="false"/>

enabled="[true|false]"

maxInactivityTime="[seconds|86400]"

maxTimeToLive="[seconds|172800]"

maxTimeToLiveForAutoCacheEntries="[seconds|0]"

reduceMemory="[true|false]"

chunkSize="[number of rows|50]"

delayAfterInvalidationMilliseconds="[milliseconds|0]"

HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationPercentBuffer="[percent|-1]"

HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationTuneIntervalSeconds="[seconds|60]"

restCaching="[true|false]"

avoidConcurrentCacheMiss="[true|false]">

Indiquez la valeur enabled=false pour empêcher l'utilisation du cache DistributedMap dont le nom est services/cache/DistributedMapName.

Utilisez les paramètres maxInactivityTime, maxTimeToLive, reduceMemory, chunkSize, delayAfterInvalidationMilliseconds et restCaching pour redéfinir les paramètres globaux correspondants. Ils ne s'appliquent qu'aux entrées de cache du cache DistributedMap spécifié.

<CacheName/>

Par exemple, <com.ibm.commerce.user.objects.OrganizationAccessBean enabled="false"/>

enabled="[true|false]"

maxInactivityTime="[seconds|86400]"

maxTimeToLive="[seconds|172800]"

maxTimeToLiveForAutoCacheEntries="seconds|0"

reduceMemory="[true|false]"

chunkSize="[number of rows]|50"

delayAfterInvalidationMilliseconds="[milliseconds|0]"

HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationPercentBuffer="[percent|-1]"

HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationTuneIntervalSeconds="[seconds|60]"

restCaching="[true|false]"

avoidConcurrentCacheMiss="[true|false]">

Indiquez enabled=false pour empêcher la mise en cache pour le cache logique spécifié, sauf si commandCaching est indiqué explicitement pour ce cache logique.

Utilisez les paramètres maxInactivityTime, maxTimeToLive, reduceMemory, chunkSize, delayAfterInvalidationMilliseconds et restCaching pour redéfinir les paramètres globaux et DistributedMap correspondants. Ils ne s'appliquent qu'aux entrées de cache du cache logique spécifié.

Les paramètres maxInactivityTime et maxTimeToLive n'ont pas d'effet lorsque la mise en cache d'instructions est utilisée. Utilisez plutôt les balises <inactivity> et <timeout> dans le fichier cachespec.xml.

Considérations relatives à l'élément dimensionnable
  • Lorsque toutes vos entrées de cache pour une instance de cache implémentent l'interface com.ibm.websphere.cache.Sizeable, la mémoire cache dynamique peut contrôler l'encombrement de la mémoire cache. Pour plus d'informations, voir Dynamic cache service settings.
  • Une entrée de cache qui implémente l'interface com.ibm.websphere.cache.Sizeable fournit une estimation de son encombrement de mémoire dans la mémoire cache dynamique. Cette estimation permet à la mémoire cache dynamique de contrôler l'encombrement de mémoire global de chaque instance de mémoire cache. L'exactitude de cette estimation peut varier. Les estimations observées pour les caches d'objet suivants sont légèrement supérieures à l'encombrement de mémoire réel.
    • services/cache/DM_Cache (cache marketing)
    • services/cache/DM_UserCache (cache du comportement utilisateur marketing)
    • dmap/IVCache (cache de disponibilité de stock externe)
    • dmap/PriceCache (cache de tarification externe)
    • dmap/PR_Cache (cache de la règle de tarification)
    • services/cache/WC*DistributedMapCache (toutes les instances de cache d'objet de cache de données)
    La mémoire cache dynamique désactive cette fonction pour une instance de mémoire cache lorsqu'elle détecte une entrée de cache, dans cette instance, qui n'implémente pas l'interface com.ibm.websphere.cache.Sizeable dans une instance de mémoire cache. Par exemple, les instructions pouvant être mises en cache personnalisées dans la mémoire cache de base. Lorsque cette fonction est désactivée, un message tel que le suivant est consigné dans SystemOut.log :
    DYNA1067E: The cache size in MB feature is disabled because the cached object is not sizable.
  • Tandis que la mémoire cache dynamique implémente l'interface com.ibm.websphere.cache.Sizeable pour les entrées de cache de servlet (JSP), les tailles qui sont calculées pour ces entrées peuvent être sous-estimées. Par exemple, l'encombrement de mémoire réel du cache de servlet baseCache peut être supérieur à l'encombrement de mémoire calculé qui est signalé par l'application de moniteur de cache. En raison de la sous-estimation de la taille de mémoire requise, il n'est pas recommandé de spécifier la taille de mémoire en Mo pour les instances de cache servlet.
  • Le paramètre de taille maximale de mémoire cache normal permet également de limiter le nombre d'entrées de cache conservées en mémoire. Indiquez un paramètre de taille maximale suffisant pour chaque instance de mémoire cache afin de contrôler l'encombrement de mémoire et d'empêcher toute condition liée à une mémoire insuffisante.

Elément <LocalTransactionCache>

Le cache des transactions locales contient les entrées de cache en mémoire pendant la durée d'une transaction de base de données unique.

<LocalTransactionCache
       enabled="[true|false]"
       maxSize="[number|50000]"
       maxInvalidationldsPerTransaction="[number|50000]"
       CacheName="[disabled|enabled]"/>
Où :
Nom de d'élémentValeurs possibles (valeurs par défaut en gras)Utilisation
enabledtrue|falseIndiquez false pour désactiver la mise en cache des transactions locales.

Ne désactivez pas la mise en cache de transaction locale, sauf pour déterminer les problèmes.

Note: Ne désactivez jamais la mise en cache des transactions locales sans également désactiver la mise en cache inter-transactions.
maxSize
  • number|50000
Indiquez le nombre maximal d'entrées de cache pouvant être gardées en mémoire pendant la durée d'une transaction.

Chaque entrée de cache reste en mémoire jusqu'à ce que la transaction en cours soit terminée. Une transaction de longue durée qui crée un nombre trop important d'entrées de cache peut se trouver à court de mémoire.

Lorsque la limite indiquée est atteinte, le cache de transactions arrête de créer de nouvelles entrées de cache pendant la durée restante de la transaction en cours, afin d'empêcher une condition de mémoire insuffisante. L'utilisation du cache inter-transactions est suspendue pendant le reste de la transaction.

maxInvalidationldsPerTransaction
  • number|50000
Indique le nombre maximal d'opérations d'invalidation du cache pouvant être exécutées en une seule transaction.

La trace de chaque opération d'invalidation exécutée doit être conservée pendant la durée de la transaction en cours. Une transaction de longue durée qui exécute un nombre trop important d'opérations d'invalidation peut se trouver à court de mémoire.

Lorsque la limite indiquée est atteinte, l'intégralité du cache de transactions est effacée et toute trace des opérations d'invalidation individuelles est supprimée de la mémoire afin d'empêcher une condition de mémoire insuffisante. L'utilisation du cache inter-transactions est suspendue pendant le reste de la transaction. Toutes les entrées de cache sont considérées comme étant invalidées pendant le reste de la transaction. Toutes les entrées de cache sont considérées comme étant invalidées pendant le reste de la transaction.

CacheName

Par exemple : com.ibm.commerce.user.objects.OrganizationAccessBean

disabled|enabledCacheName indique le nom d'un cache logique.

Indiquez la valeur disabled pour empêcher la mise en cache dans le cache logique spécifié.

Ne désactivez pas la mise en cache de transaction locale, sauf pour déterminer les problèmes.

Note: Ne désactivez jamais la mise en cache des transactions locales pour un cache logique sans également désactiver la mise en cache inter-transactions pour le même cache logique.