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.
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]"
delayAfterInvalidationPercentBuffer="[percent|-1]"
delayAfterInvalidationTuneIntervalSeconds="[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]"
delayAfterInvalidationPercentBuffer="[percent|-1]"
delayAfterInvalidationTuneIntervalSeconds="[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]"
delayAfterInvalidationPercentBuffer="[percent|-1]"
delayAfterInvalidationTuneIntervalSeconds="[seconds|60]"restCaching="[true|false]"chunkSize="[number of rows|50]" avoidConcurrentCacheMiss="[true|false]">/> </CrossTransactionCache>
| Nom de d'élément | Valeurs possibles (valeurs par défaut en gras) | Utilisation |
|---|---|---|
| enabled | true|false | Indiquez false pour désactiver toute mise en cache des données inter-transactions |
| commandCaching | on|off|default | Indiquez 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. |
| maxInactivityTime | seconds|86400 | Indiquez 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 |
| maxTimeToLive | seconds|172800|0 | Afin 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) :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. |
| maxTimeToLiveForAutoCacheEntries | seconds|0 | Quand 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 :
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. |
| defaultResultSizeThreshold | number|8 | Lorsque 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. |
| clearUserOnLogoff | true|false | Indiquez 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. |
| clearUserDataCacheOnLogoff | true|false | Indiquez 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. |
| maxInvalidationldsPerTransaction | number|100000 | Indique 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 :
|
| clearCacheOnMaxInvalidationIdsPerTransaction | true|false | Indique 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. |
| reduceMemory | true|false | Spécifiez la valeur true pour réduire l'encombrement du cache inter-transactions. |
| chunkSize | number of rows|50 | Certains 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. |
| delayAfterInvalidationMilliseconds | milliseconds|0 | Ce 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.
|
delayAfterInvalidationPercentBuffer | percent|-1 | Ce 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). Où rt est l'exemple de durée d'aller-retour et pc est la valeur de pourcentage spécifiée. Valeur acceptées :
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é. |
delayAfterInvalidationTuneIntervalSeconds | seconds|60 | Nombre 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. |
| restCaching | true|false | Ce paramètre permet de désactiver la mise en cache pendant que les services REST sont en cours d'exécution. |
| reduceInvalidationIds | true|false | Spé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. |
| sizeable | true|false | Spé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 :
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 |commandCaching | CacheName 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 : 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. |
| avoidConcurrentCacheMiss | true|false | Spé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]"
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]"
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 |
- 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)
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]"/>
| Nom de d'élément | Valeurs possibles (valeurs par défaut en gras) | Utilisation |
|---|---|---|
| enabled | true|false | Indiquez 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 |
| 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 |
| 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|enabled | CacheName 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. |