Mantener y limpiar los datos acumulados en proyectos SAP Commerce Cloud a gran escala es crucial para garantizar un alto rendimiento y escalabilidad del sistema. Con el tiempo, el crecimiento de los datos provenientes de transacciones de clientes, catálogos de productos y registros del sistema puede ralentizar las operaciones si no se gestiona. Esta acumulación de datos conducirá a un menor rendimiento, mayores costos de almacenamiento y una mayor pérdida de tiempo por parte de los desarrolladores y especialistas de soporte. Por lo tanto, mantener una instancia limpia de SAP hybris le permitirá ahorrar dinero, por lo que solucionarlo debería ser una obviedad para cualquier equipo de SAP Commerce.
Este artículo describe las mejores prácticas y estrategias de limpieza clave para optimizar sus entornos SAP Commerce Cloud.
La plataforma ofrece dos formas de limpiar los datos no utilizados:
- Marco de mantenimiento: Este enfoque más antiguo requiere un esfuerzo de implementación significativo. Los desarrolladores deben crear estrategias personalizadas para buscar y procesar elementos y escribir código para definir la lógica para la limpieza de datos.
- Marco de retención de datos: una solución más nueva y optimizada que aborda la mayoría de los casos de uso únicamente mediante la configuración. Le permite definir reglas de retención que especifican la lógica para recuperar y eliminar elementos mediante consultas y acciones de eliminación estándar. Además, admite la inyección de lógica personalizada para procesar elementos cuando sea necesario.
Las siguientes secciones se centrarán en ejemplos que utilizan el Marco de retención de datos.

Áreas y estrategias clave de limpieza
Cronjobs
Los Cronjobs automatizan tareas esenciales pero, con el tiempo, pueden inflar el sistema. La eliminación periódica de registros de cronjob obsoletos garantiza un funcionamiento fluido. Los tipos de trabajos más comunes incluyen:
- Importación/Exportación ImpEx
- Sincronización de catálogos
- Empleos de Solr
Para limpiar estas instancias de cronjob, puede configurar un trabajo de retención usando ImpEx a continuación:
$twoWeeks = 1209600
INSERT_UPDATE FlexibleSearchRetentionRule; code[unique = true]; searchQuery; retentionTimeSeconds; actionReference;
; cronjobCleanupRule ; "SELECT {c.pk}, {c.itemType}
FROM {CronJob as c join ComposedType as t on {c.itemtype} = {t.pk} LEFT JOIN Trigger AS trg ON {trg.cronjob} = {c.pk} }
WHERE
{trg.pk} IS NULL AND
{c.code} LIKE '00______%' AND
{t.code} IN ( 'ImpExImportCronJob', 'CatalogVersionSyncCronJob', 'SolrIndexerCronJob' ) AND
{c.endTime} < ?CALC_RETIREMENT_TIME" ; $twoWeeks ; basicRemoveCleanupAction ;
INSERT_UPDATE RetentionJob; code[unique = true]; retentionRule(code); batchSize
; cronjobRetentionJob ; cronjobCleanupRule ; 1000
INSERT_UPDATE CronJob; code[unique = true]; job(code); sessionLanguage(isoCode)[default = en]
; cronjobRetentionCronJob ; cronjobRetentionJob ;
NOTA: Otro método para eliminar estos Cronjobs es utilizar el LimpiezaCronJobEstrategia del marco de mantenimiento heredado. Sin embargo, este enfoque requiere personalización para ajustar la selección de Cronjobs que maneja.
Cronjob Logs
A medida que pasa el tiempo, los registros de cronjob también se acumularán. Para limpiar archivos de registro de cronjob antiguos, debe configurar un cronjob y un activador específico para la eliminación de registros.
Es importante tener en cuenta que la plataforma no elimina automáticamente los archivos de registro antiguos.
INSERT_UPDATE CronJob; code[unique = true]; job(code); sessionLanguage(isoCode)[default = en]
; cronjobLogCleanupCronjob ; cleanUpLogsJobPerformable ;
INSERT_UPDATE Trigger; cronJob(code)[unique = true]; cronExpression
# every hour
; cronjobLogCleanupCronjob ; 0 0 0/1 * * ?
Si tiene Cronjobs que se ejecutan con frecuencia, se recomienda programar limpiezas de archivos de registro con más frecuencia. Esto ayuda a evitar una acumulación excesiva de archivos de registro que deban eliminarse más adelante.
Historias de Cronjobs
Al igual que los registros de cronjob, los historiales de cronjob se pueden acumular para trabajos que se ejecutan con mucha frecuencia. SAP Commerce viene con cronJobHistoryRetentionCronJob, que limita el número de CronJobHistory entradas por cronjob. Este cronjob está habilitado de forma predeterminada; solo necesita asegurarse de que esté habilitado y configurar un activador.
ImpEx Import/Export Media
Cada ImpEx importación o exportación da como resultado la creación de al menos un objeto ImpexMedia. Estos archivos multimedia permanecen en el sistema incluso después de que se eliminen los trabajos ImpEx asociados, ya que la plataforma no los elimina automáticamente. Se puede crear un trabajo de retención para limpiar medios antiguos.
$twoWeeks = 1209600
INSERT_UPDATE FlexibleSearchRetentionRule; code[unique = true]; searchQuery; retentionTimeSeconds; actionReference;
; impexMediaCleanupRule ; "SELECT {i.pk}, {i.itemtype}
FROM {ImpexMedia as i}
WHERE
{i.code} LIKE '00______' AND
{i.modifiedTime} < ?CALC_RETIREMENT_TIME" ; $twoWeeks ; basicRemoveCleanupAction ;
INSERT_UPDATE RetentionJob; code[unique = true]; retentionRule(code); batchSize
; impexMediaCleanupJob ; impexMediaCleanupRule ; 1000
INSERT_UPDATE CronJob; code[unique = true]; job(code); sessionLanguage(isoCode)[default = en]
; impexMediaCleanupCronJob ; impexMediaCleanupJob ;
INSERT_UPDATE Trigger; cronJob(code)[unique = true]; cronExpression
; impexMediaCleanupCronJob ; 0 0 0 * * ?
Valores guardados
El Backoffice utiliza valores guardados para monitorear los cambios realizados en los elementos por los usuarios comerciales, que se muestran en «Últimos cambios» en la pestaña Administración. Si su proyecto ha estado ejecutándose durante un período prolongado o ha pasado por múltiples actualizaciones, es probable que su base de datos haya acumulado millones de SavedValues y SavedValueEntry archivos.
Puede configurar cuántas entradas por artículo se almacenan utilizando la siguiente propiedad:
hmc.storing.modifiedvalues.size=10
Siempre se muestra el último cambio (si está disponible). Además, para liberar espacio en la base de datos, podemos configurar reglas de retención para eliminar entradas antiguas:
INSERT_UPDATE FlexibleSearchRetentionRule; code[unique = true]; searchQuery; retentionTimeSeconds; actionReference;
; savedValuesDeleteRule ; "SELECT {s.pk}, {s.itemtype}
FROM {SavedValues as s}
WHERE {s.modifiedItem} IS NULL AND {s.modifiedtime} < ?CALC_RETIREMENT_TIME" ; $twoWeeks ; basicRemoveCleanupAction ;
; savedValueEntryRule ; "SELECT {e.pk}, {e.itemtype}
FROM {SavedValueEntry AS e LEFT JOIN SavedValues AS s ON {e.parent} = {s.pk} }
WHERE {s.pk} IS NULL" ; 0 ; basicRemoveCleanupAction ;
INSERT_UPDATE RetentionJob; code[unique = true]; retentionRule(code); batchSize
; savedValuesDeleteCleanupJob ; savedValuesDeleteRule ; 1000
; savedValueEntryCleanupJob ; savedValueEntryRule ; 1000
INSERT_UPDATE CronJob; code[unique = true]; job(code); sessionLanguage(isoCode)[default = en]
; savedValuesDeleteCleanupCronJob ; savedValuesDeleteCleanupJob ;
; savedValueEntryCleanupCronJob ; savedValueEntryCleanupJob ;
Para hacerlo más conveniente, podemos crear una instancia de CompositeCronJob para que ambos Cronjobs se ejecuten en el orden deseado al tener que ejecutar solo un cronjob.
INSERT_UPDATE CompositeCronJob; code[unique = true]; job(code); sessionLanguage(isoCode)[default = en]
; savedValuesCleanupCompositeCronJob ; compositeJobPerformable ;
INSERT Trigger; cronJob(code)[unique = true]; cronExpression
; savedValuesCleanupCompositeCronJob ; 0 0 0 * * ?
INSERT_UPDATE CompositeEntry; code[unique = true]; executableCronJob(code); compositeCronJob(code)[default = 'savedValuesCleanupCompositeCronJob']
; savedValuesDeleteCleanupCronJobEntry ; savedValuesDeleteCleanupCronJob ;
; savedValueEntryCleanupCronJobEntry ; savedValueEntryCleanupCronJob ;
UPDATE CompositeCronJob; code[unique = true]; compositeEntries(code)
; savedValuesCleanupCompositeCronJob ; savedValuesDeleteCleanupCronJobEntry,savedValueEntryCleanupCronJobEntry
Sesiones HTTP
Para los storefronts basados en Accelerator, las sesiones HTTP se pueden almacenar en la base de datos utilizando el Conmutación por error de sesión HTTP característica. Para evitar problemas de rendimiento, es fundamental limpiar las sesiones obsoletas. Puede lograr esto configurando otra regla de retención:
$oneDay = 86400
INSERT_UPDATE FlexibleSearchRetentionRule;code[unique=true];searchQuery;retentionTimeSeconds;actionReference;
;storedSessionRule;"SELECT {s.pk}, {s.itemtype}
FROM {StoredHttpSession AS s}
WHERE
{s.modifiedTime} < ?CALC_RETIREMENT_TIME"; $oneDay; basicRemoveCleanupAction;
INSERT_UPDATE RetentionJob;code[unique=true];retentionRule(code);batchSize
; storedSessionCleanupJob; storedSessionRule; 1000
INSERT_UPDATE CronJob;code[unique=true];job(code);sessionLanguage(isoCode)[default=en]
; storedSessionCleanupCronJob; storedSessionCleanupJob;
INSERT_UPDATE Trigger; cronJob(code)[unique = true] ; cronExpression
# every 30 minutes
; storedSessionCleanupCronJob ; 0 0/30 * * * ?
Datos transaccionales
Estos son los datos que SAP hybris crea cuando los clientes utilizan el storefront. Para acelerar las cosas, algunos de estos datos no utilizados se pueden eliminar. Examinémoslo con más detalle.
Carros
Para eliminar carritos viejos abandonados, SAP Commerce proporciona el siguiente trabajo cronológico listo para usar: Eliminar carros viejos con Cronjob
Sólo necesitamos configurarlo cuando lo necesitemos, ya que es bastante sencillo.
Procesos de negocio
La mayoría de las acciones de los usuarios en el Acelerador inician procesos comerciales, como restablecer contraseñas, realizar pedidos y gestionar el cumplimiento de pedidos. Estos procesos se acumulan con el tiempo y deben eliminarse periódicamente para mantener la eficiencia del sistema.
$twoWeeks = 1209600
INSERT_UPDATE FlexibleSearchRetentionRule;code[unique=true];searchQuery;retentionTimeSeconds;actionReference;
;businessProcessRule;"SELECT {p:pk}, {p:itemtype}
FROM {BusinessProcess AS p JOIN ProcessState AS s ON {p:state} = {s:pk} }
WHERE
{s:code} in ('SUCCEEDED') AND
{p:modifiedTime} < ?CALC_RETIREMENT_TIME"; $twoWeeks; basicRemoveCleanupAction;
INSERT_UPDATE RetentionJob;code[unique=true];retentionRule(code);batchSize
; businessProcessCleanupJob; businessProcessRule; 1000
INSERT_UPDATE CronJob;code[unique=true];job(code);sessionLanguage(isoCode)[default=en]
; businessProcessCleanupCronJob; businessProcessCleanupJob;
INSERT_UPDATE Trigger; cronJob(code)[unique = true] ; cronExpression
; businessProcessCleanupCronJob ; 0 0 0 * * ?
Si tiene procesos comerciales personalizados, limpie todos los datos relacionados. Por ejemplo, Mensajes de correo electrónico se eliminan automáticamente al final de un proceso comercial si se envían correctamente. Sin embargo, aquellos que no se envíen permanecerán en la base de datos y deberán solucionarse durante el mantenimiento regular.
Type System Cleanup
Para mantener un sistema SAP Commerce Cloud optimizado, limpiar datos y configuraciones innecesarios en el sistema de tipos es esencial para garantizar un rendimiento óptimo y el estado de la base de datos. El sistema de tipos puede acumular entidades no utilizadas o redundantes a lo largo del tiempo, como Tipos huérfanos y Atributos huérfanos. Esta sección cubrirá cómo identificar y eliminar estos elementos huérfanos de su sistema SAP Commerce Cloud.
Tipos huérfanos
Los tipos huérfanos se refieren a registros en la base de datos que ya no tienen referencias válidas. Por lo general, esto ocurre cuando una entidad principal se elimina de items.xml, pero las entidades secundarias asociadas permanecen en la base de datos. Los registros huérfanos pueden saturar su base de datos, ralentizar el rendimiento de las consultas y aumentar los costos de almacenamiento.
El Hybris Consola de administración (HAC) es la herramienta principal para identificar y eliminar tipos huérfanos en SAP Commerce Cloud. Según las recomendaciones de SAP, los tipos huérfanos deben limpiarse manualmente utilizando HAC. Esto se puede lograr desde Mantenimiento -> Limpieza -> Tipo de sistema.

Atributos huérfanos
Además de los tipos huérfanos, otro problema común es Atributos huérfanos. Estos atributos normalmente quedan atrás después de refactorizar el código o eliminar funciones no utilizadas. Si bien ya no tienen ningún propósito en el sistema, todavía existen en la base de datos, lo que puede confundir las consultas del modelo de datos y afectar el rendimiento.
El método recomendado para eliminar atributos huérfanos es ejecutar ImpEx scripts que los eliminan explícitamente de la base de datos. Sin embargo, es importante tener en cuenta que los atributos huérfanos sólo se pueden eliminar del tipo de elemento original donde se definieron. El script ImpEx no funcionará en tipos de elementos extendidos o subclasificados.
Por ejemplo, el siguiente script ImpEx elimina el atributo huérfano defaultPaymentMode desde BaseStore tipo de artículo:
REMOVE AttributeDescriptor; qualifier[unique = true]; enclosingType(code)[unique = true]
; defaultPaymentMode ; BaseStore
Auditoría genérica
La función Auditoría genérica registra todas las acciones de persistencia, como la creación, modificación y eliminación de elementos específicos. Mantiene un registro de cambios que rastrea cómo evoluciona un elemento. Sin embargo, la rápida generación de estos datos puede acumularse rápidamente, lo que podría afectar el rendimiento tanto de su base de datos como de la solución general.
De forma predeterminada, está habilitado para una amplia gama de tipos. Por lo tanto, la recomendación es revisar cuidadosamente y considerar desactivar cualquier tipo que no necesite para el entorno de producción. Puede activar/desactivar la auditoría de un tipo configurando la siguiente propiedad para un tipo específico código de tipo
audit.<typecode>.enabled=true|false
Mejorar el rendimiento de SAP Commerce
La limpieza periódica de datos mantiene el rendimiento y la escalabilidad de SAP Commerce Cloud. La implementación de las estrategias mencionadas anteriormente garantiza que su sistema funcione de manera eficiente y permanezca preparado para el crecimiento futuro. Si necesita ayuda con la limpieza y el rendimiento de su solución SAP Commerce, también puede comunicarse con nosotros a través de nuestro Servicios de desarrollo de SAP hybris, y los ingenieros de E-Turia perfeccionarán su solución para maximizar su potencial.
