Configuración adicional de la memoria caché de datos de HCL Commerce

Para refinar la configuración de la memoria caché de datos de HCL Commerce, añada un elemento <CrossTransactionCache> o un elemento <LocalTransactionCache> al elemento <InstanceProperties> del archivo de configuración de HCL Commercewc-server.xml.

Note: Durante el proceso de migración de WebSphere Commerce versión 7 u 8 a HCL Commerce versión 9.x, debe eliminar la etiqueta CrossTransactionCache añadida para que se usen los valores predeterminados. Si ha modificado alguno de estos valores, revise el motivo por el que no utiliza los valores predeterminados y decida si desea conservar los valores personalizados o aceptar los predeterminados. Sin embargo, se recomienda utilizar los valores predeterminados.

Elemento <CrossTransactionCache>

La memoria caché entre transacciones mantiene datos que persisten entre transacciones hasta que caducan con DynaCache.

El código siguiente muestra cómo se definen los elementos disponibles para la memoria caché entre transacciones. Se incluyen los valores posibles para un elemento, por ejemplo [seconds|172800]. El valor de este elemento puede ser cualquier número positivo (en segundos). El valor predeterminado, que está en negrita, es 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>
Donde:
Nombre del elementoValores posibles (valores predeterminados en negrita)Usage
habilitadotrue|falseEspecifique false para desactivar el almacenamiento en memoria caché entre transacciones
commandCachingon|off|valor predeterminadoEspecifique on para obligar a la memoria caché entre transacciones a utilizar el almacenamiento en memoria caché de mandatos en baseCache DistributedMap predeterminado.

Especifique off para impedir que la memoria caché entre transacciones utilice el almacenamiento en memoria caché de mandatos.

El valor predeterminado utiliza el almacenamiento en memoria caché DistributedMap cuando se encuentra DistributedMap correspondiente utilizando su nombre JNDI y, de lo contrario, utiliza el almacenamiento en memoria caché de mandato en DistributedMap predeterminado.

maxInactivityTimeseconds|86400Especifique el número de segundos tras el cual se elimina una entrada de la memoria caché inactiva de la memoria caché debido a la inactividad.

Este valor no tiene efecto cuando se utiliza el almacenamiento en memoria caché de mandatos. En su lugar, utilice el código <inactivity> en el archivo cachespec.xml.

maxTimeToLiveseconds|172800|0Para evitar posibles problemas debidos a ligeros retardos en la propagación de mensajes de invalidación, el valor predeterminado de maxTimeToLive para las siguientes memorias caché lógicas es cero (esto, en la práctica, inhabilita el almacenamiento en memoria caché):
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
Si se especifica un valor maxTimeToLive positivo, se anulará el valor predeterminado (esto, en la práctica, vuelve a habilitar el almacenamiento en memoria caché). Si decide hacerlo, considere también la posibilidad de especificar un valor para delayAfterInvalidationMilliseconds (se puede especificar un valor diferente para cada memoria caché lógica). El valor delayAfterInvalidationMilliseconds se puede utilizar para que el proceso de mensajes de invalidación tenga tiempo para completarse antes de que la ejecución continúe después de que los datos almacenados en memoria caché se modifiquen en la base de datos. Por ejemplo, puede empezar con un valor de 500 milisegundos y luego experimentar para encontrar un valor más óptimo.
autoCacheableTableNames

notAutoCacheableTableNames

string

Los valores autoCacheableTableNames y notAutoCacheableTableNames solo están definidos a nivel global y cada uno es una lista de nombres de tablas de base de datos delimitada por espacios en blanco, done los espacios, las líneas nuevas y los tabuladores se tratan como espacio en blanco. Si aparece un nombre de tabla en ambos valores, el valor notAutoCacheableTableNames tiene prioridad. De forma predeterminada, la memoria caché de datos presupone determinados nombres de tabla (tales como USERS y ORDERS) también descalifican una consulta para el almacenamiento en memoria caché automático, a menos que los nombres aparezcan en el valor autoCacheableTableNames.

De forma predeterminada, estos valores de serie están vacíos.

maxTimeToLiveForAutoCacheEntriesseconds|0Cuando se especifica un número positivo de segundos, determinados resultados de consulta JDBC que cumplen los requisitos se almacenan en la memoria caché utilizando las memorias caché lógicas siguientes:
  • 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

Para optar a la memoria caché automática, una consulta JDBC debe hacer referencia a una o más nombres de tablas incluidos en el valor autoCacheableTableNames y no debe hacer referencia a ninguno de los nombres de tabla incluidos en el valor notAutoCacheableTableNames.

Utilice IBM Extended Cache Monitor para ver las consultas que se están almacenando en memoria caché y sus ID de dependencia. De forma predeterminada, los resultados de la consulta almacenados automáticamente en la memoria caché se almacenan en la memoria caché de objeto con el nombre JNDI services/cache/WCMiscDistributedMapCache.

Si bien el almacenamiento automático en la memoria caché puede mejorar el rendimiento, utilice esta característica con cuidado. Conozca qué consultas se almacenan en la memoria caché y asegúrese de que se utiliza una técnica aceptable de invalidación de memoria caché como, por ejemplo, una vida breve o desencadenantes de base de datos que añaden ID de invalidación de memoria caché no válidos a la tabla CACHEIVL en la columna DATAID.

defaultResultSizeThresholdnumber|8Cuando el tamaño de la colección de objetos que se almacenan en memoria caché en una entrada de memoria caché excede el valor umbral especificado, los ID de dependencia se generan utilizando nombres de tabla. Para reducir el número de ID de dependencia generados para la entrada de memoria caché, no se utilizan nombres de columna y valores.
clearUserOnLogofftrue|falseEspecifique false si DC_userid:nnnn los ID de invalidación no se deben enviar a baseCache cuando el usuario con el ID de usuarionnnn cierra la sesión.
clearUserDataCacheOnLogofftrue|falseEspecifique true si las entradas de memoria caché específicas de un determinado usuario se eliminan de la memoria caché cuando el usuario cierra la sesión.
maxInvalidationldsPerTransactionnumber|100000Especifique el número máximo de operaciones de invalidación de memoria caché entre transacciones que se pueden ejecutar en una sola transacción.

El conocimiento de cada ejecución de operación de invalidación debe retenerse durante la transacción actual. Una transacción de larga ejecución que ejecuta demasiadas operaciones de invalidación puede quedarse sin memoria.

Cuando se alcanza el límite especificado, no se recuerdan más ID de invalidación para la memoria caché entre transacciones para el resto de la transacción actual. Cuando finaliza la transacción:
  • Toda la memoria caché entre transacciones se borra.
  • Se lleva a cabo la acción que ha especificado la configuración de clearCacheOnMaxInvalidationIdsPerTransaction.
clearCacheOnMaxInvalidationIdsPerTransactiontrue|falseEspecifica la acción cuando se ha superado el número máximo de operaciones de invalidación de memoria caché entre transacciones, especificado por el elemento maxInvalidationIdsPerTransaction.

Especifique true para borrar toda la memoria caché de transacciones cuando finalice la transacción actual.

Si este elemento se establece en false, las invalidaciones se emiten de forma inmediata y no se recuerdan hasta el final de la transacción actual. Este valor deja un corto margen de tiempo durante el cual los datos obsoletos pueden almacenarse en la memoria caché.

reduceMemorytrue|falseEspecifique true para reducir la huella de memoria de la memoria caché de transacciones.
chunkSizenumber of rows|50Algunas consultas de base de datos puede devolver cientos o incluso miles de filas. Las filas devueltas se dividen en varias entradas de memoria caché para mantener la ocupación de memoria caché y para ayudar a evitar problemas que están relacionados con la falta de memoria. Este parámetro especifica el número de filas que se almacenan en cada entrada de memoria caché.
delayAfterInvalidationMillisecondsmilliseconds|0Este parámetro permite que se añada un pequeño retraso antes de que se envíe una respuesta al navegador cliente para cualquier transacción que implique una invalidación. Este retraso puede ayudar a evitar que el cliente realice una solicitud posterior antes de que se procese completamente la invalidación en el servidor.

HCL Commerce Version 9.1.7.0 or laterSi se habilita con un valor mayor que 0, el retraso que utiliza su sitio es el valor mayor (un retraso mínimo) entre delayAfterInvalidationMilliseconds y el valor calculado por delayAfterInvalidationPercentBuffer, si ese parámetro está habilitado con un valor que no sea negativo.

HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationPercentBufferpercent|-1Este parámetro define un porcentaje de tiempo de almacenamiento intermedio, el valor pc, que se añade dentro de un valor de retraso calculado (variable).

A continuación, el retraso que utiliza su sitio se determina como el valor mayor (un retraso mínimo) entre el valor de retardo delayAfterInvalidationMilliseconds establecido y el valor de retardo variable que se calcula utilizando delayAfterInvalidationPercentBuffer.

El cálculo se realiza derivando el retraso real entre el momento en que una transacción ha finalizado y se han emitido los ID de invalidación y, a continuación, añadiendo el porcentaje de tiempo de almacenamiento intermedio especificado ( pc ).

El valor de retraso se calcula en cada intervalo de periodo especificado por delayAfterInvalidationTuneIntervalSeconds. En este intervalo, se toma una muestra del tiempo que se tarda en utilizar en el cálculo un mensaje de invalidación de ida y vuelta (el envío y la recepción de un mensaje de invalidación exclusivo).

Para valores positivos de delayAfterInvalidationPercentBuffer, el valor de retraso se calcula como rt + (rt*pc/100).

Si rt es la muestra de tiempo de ida y vuelta y pc es el valor de porcentaje especificado.

Valores aceptados:

  • Se ha especificado un número negativo (-1) para indicar que delayAfterInvalidationMilliseconds sigue siendo el retraso que se utiliza. Este es el valor predeterminado.
  • Al especificar 0, el ejemplo de tiempo de ida y vuelta (rt), sin un almacenamiento intermedio añadido, se compara con delayAfterInvalidationMilliseconds para derivar el retraso que se utiliza.
  • Al especificar un entero positivo (1 o superior), la muestra de tiempo de ida y vuelta, con el almacenamiento intermedio de porcentaje añadido, se compara con delayAfterInvalidationMilliseconds para derivar el retardo que se utiliza.
Note: Este parámetro requiere que delayAfterInvalidationMilliseconds se establezca en un valor mayor que su valor predeterminado de 0 . De lo contrario, no se utiliza ningún retraso.
HCL Commerce Version 9.1.7.0 or laterdelayAfterInvalidationTuneIntervalSecondsseconds|60El número de segundos entre muestras de cuánto tiempo se tarda en enviar y recibir un mensaje de invalidación.

Este valor se utiliza para derivar el almacenamiento intermedio de retardo variable para delayAfterInvalidationPercentBuffer.

restCachingtrue|falseEste parámetro le permite inhabilitar el almacenamiento en memoria caché mientras se ejecutan servicios REST.
reduceInvalidationIdstrue|falseEspecifique true para reducir el número de mensajes de invalidación emitidos cuando los datos en memoria caché cambian en la base de datos. Los sistemas que tienen muchas JVM de servidor de aplicaciones de HCL Commerce pueden beneficiarse de este valor. No obstante, se puede producir determinado exceso de invalidación. Mida el impacto general en el rendimiento antes de elegir este valor para un sistema de producción.
sizeabletrue|falseEspecifique verdadero (true) para implementar la interfaz com.ibm.websphere.cache.Sizeable para la mayoría de las entradas de memoria caché que utilizan las memorias caché de objetos de HCL Commerce siguientes:
  • services/cache/DM_Cache (Memoria caché de marketing)
  • services/cache/DM_UserCache (Memoria caché de comportamiento de usuario de marketing)
  • dmap/IVCache (Memoria caché de disponibilidad de inventario externo)
  • dmap/PriceCache (Memoria caché de precio externo)
  • dmap/PR_Cache (Memoria caché de las reglas de precios)
  • services/cache/WC*DistributedMapCache (todas las instancias de memoria caché de objetos de "memoria caché de datos")

Si se especifica verdadero (true) también se implementa la interfaz com.ibm.websphere.cache.Sizeable para la mayoría de mandatos almacenables en memoria caché utilizados de forma predeterminada por HCL Commerce.

CacheName

Por ejemplo, com.ibm.commerce.user.objects.OrganizationAccessBean

inhabilitado |DistributedMapName | commandCachingCon CacheName se especifica una memoria caché lógica que utiliza la memoria caché de datos de Commerce.

DistributedMapName es un nombre con el prefijo services/cache/. El DistributedMapName forma un nombre JNDI que se utiliza para localizar un DistributedMap que solía contener datos para la memoria caché lógica especificada.

El DistributedMap utilizado es el primero de los objetos DistributedMap siguientes encontrados que existe:
  • services/cache/CacheName
  • services/cache/DistributedMapName
  • services/cache/WCDistributedMapCache
  • Correlación distribuida de memoria caché base predeterminada
Consulte los nombres de memoria caché lógica y los DistributedMaps que utilizan de forma predeterminada.

Especifique disabled para impedir el almacenamiento en memoria caché para una memoria caché lógica especificada.

Especifique commandCaching para utilizar el almacenamiento en memoria caché de mandatos en el baseCache DistributedMap predeterminado.

avoidConcurrentCacheMisstrue|falseEspecifique true para permitir sólo una hebra a la vez para ejecutar la misma consulta con los mismos parámetros.true
<DistributedMapName/>

Por ejemplo, <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]">

Especifique enabled=false para impedir el uso del DistributedMap cuyo nombre es services/cache/DistributedMapName.

Utilice los valores maxInactivityTime, maxTimeToLive, reduceMemory, chunkSize, delayAfterInvalidationMilliseconds, y restCaching para sustituir los valores globales correspondientes. Únicamente se aplican a entradas de memoria caché en el DistributedMap especificado.

<CacheName/>

Por ejemplo, <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]">

Especifique enabled=false para impedir el almacenamiento en memoria caché de la memoria caché lógica especificada a menos que commandCaching esté especificado explícitamente para dicha memoria caché lógica.

Utilice los valores maxInactivityTime, maxTimeToLive, reduceMemory, chunkSize, delayAfterInvalidationMilliseconds, y restCaching para sustituir los valores globales y DistributedMap correspondientes. Únicamente se aplican a entradas de memoria caché para la memoria caché lógica especificada.

Los valores maxInactivityTime y maxTimeToLive no tienen ningún efecto cuando se utiliza el almacenamiento en memoria caché de mandatos. En su lugar, utilice las etiquetas <inactivity> y <timeout> en el archivo cachespec.xml.

Consideraciones para el elemento sizeable
  • Cuando todas las entradas de memoria caché para una instancia de memoria caché implementan la interfaz com.ibm.websphere.cache.Sizeable, DynaCache puede controlar la ocupación de memoria caché. Para obtener más información, consulte Dynamic cache service settings.
  • Una entrada de memoria caché que implementa la interfaz com.ibm.websphere.cache.Sizeable proporciona una estimación de la ocupación de memoria a DynaCache. Esta estimación permite que DynaCache controle la ocupación de memoria global de cada instancia de memoria caché. La precisión de esta estimación puede variar. Las estimaciones observadas para las siguientes memorias caché de objeto son ligeramente superiores a la ocupación de memoria real.
    • services/cache/DM_Cache (Memoria caché de marketing)
    • services/cache/DM_UserCache (Memoria caché de comportamiento de usuario de marketing)
    • dmap/IVCache (Memoria caché de disponibilidad de inventario externo)
    • dmap/PriceCache (Memoria caché de precio externo)
    • dmap/PR_Cache (Memoria caché de las reglas de precios)
    • services/cache/WC*DistributedMapCache (todas las instancias de memoria caché de objetos de "memoria caché de datos")
    DynaCache inhabilita esta posibilidad para una instancia de memoria caché cuando detecta, en dicha instancia, una entrada de memoria caché que no implementa la interfaz com.ibm.websphere.cache.Sizeable en una instancia de memoria caché. Por ejemplo, mandatos personalizados que se pueden almacenar en memoria caché en baseCache. Cuando se inhabilita esta posibilidad, se pone un mensaje como el siguiente en SystemOut.log:
    DYNA1067E: La característica de tamaño de memoria caché en MB está inhabilitada porque no se puede asignar ningún tamaño al objeto en la memoria caché.
  • Mientras que DynaCache implementa automáticamente la interfaz com.ibm.websphere.cache.Sizeable para entradas de memoria caché de servlet (JSP), los tamaños que se calculan para estas entradas pueden estar subestimados. Por ejemplo, la ocupación de memoria real de la memoria caché de servlet baseCache puede ser mayor que la ocupación de memoria calculada indicada por la aplicación de supervisor de memoria caché. Debido a esta subestimación del tamaño de memoria necesario, no se recomienda especificar el tamaño de memoria en MB para instancias de memoria caché de servlet.
  • El valor de tamaño máximo de memoria caché normal también se utiliza para limitar el número de entradas de memoria caché que se conservan en memoria. Especifique un valor de tamaño máximo suficiente para cada instancia de memoria caché, para controlar la ocupación de memoria y evitar condiciones potenciales de falta de memoria.

Elemento <LocalTransactionCache>

La memoria caché de transacciones local mantiene las entradas de memoria caché en la memoria durante el tiempo que dure una sola transacción de base de datos.

<LocalTransactionCache
       enabled="[true|false]"
       maxSize="[number|50000]"
       maxInvalidationldsPerTransaction="[number|50000]"
       CacheName="[disabled|enabled]"/>
Donde:
Nombre del elementoValores posibles (valor predeterminado en negrita)Usage
habilitadotrue|falseEspecifique false para desactivar el almacenamiento en memoria caché de transacción local.

No desactive el almacenamiento en memoria caché de transacciones local, excepto como parte de la determinación de problemas.

Note: No desactive nunca el almacenamiento en memoria caché de transacciones local sin desactivar también el almacenamiento en memoria caché entre transacciones.
maxSize
  • number|50 000
Especifique el número máximo de entradas de memoria caché que se pueden recordar mientras dura una transacción.

Cada entrada de memoria caché permanece en la memoria hasta que finaliza la transacción actual. Una transacción de larga ejecución que crea demasiadas entradas de memoria caché puede quedarse sin memoria.

Cuando se alcanza el límite especificado, la memoria caché de transacciones deja de crear entradas de memoria caché para el resto de la transacción actual. Este valor impide una condición de memoria agotada.

maxInvalidationldsPerTransaction
  • number|50 000
Especifique el número máximo de operaciones de invalidación que se pueden ejecutar en una sola transacción.

El conocimiento de cada operación de invalidación ejecutada debe retenerse durante el tiempo que dure la transacción actual. Una transacción de larga ejecución que ejecuta demasiadas operaciones de invalidación puede quedarse sin memoria.

Cuando se alcanza el límite especificado, se borra toda la memoria caché de la transacción y el conocimiento de las operaciones de invalidación individuales se elimina de la memoria. Este valor impide una condición de memoria agotada. El uso de la memoria caché entre transacciones queda suspendido para el resto de la transacción. Todas las entradas de memoria caché se consideran invalidadas durante el resto de la transacción.

CacheName

Por ejemplo: com.ibm.commerce.user.objects.OrganizationAccessBean

inhabilitado|habilitadoCacheName especifica el nombre de una memoria caché lógica.

Especifique disabled para impedir el almacenamiento en memoria caché en una memoria caché lógica especificada.

No desactive el almacenamiento en memoria caché de transacciones local, excepto como parte de la determinación de problemas.

Note: No desactive nunca el almacenamiento en memoria caché de transacciones local para una memoria caché lógica sin desactivar también el almacenamiento en memoria caché entre transacciones para la misma memoria caché lógica.