Tablas sales_flat_quote* grandes

Siempre que tenemos ocasión recalcamos la importancia de realizar un mantenimiento regular de todas las instalaciones Magento. Una tienda con un volumen moderado de transacciones puede acumular en pocos meses centenares de miles de registros realmente obsoletos que penalizan de forma seria el rendimiento de todo el proyecto al requerir de operaciones y consultas mucho mas pesadas que en una instalación que ejecute unas tareas básicas de mantenimiento.

Unas de las tablas que suelen ser especialmente problemáticas son las relacionadas con sales quote dado que pueden aumentar de forma exponencial y comprometer gravemente el rendimiento de una instalación. Hemos observado pérdidas significativas de rendimiento en entornos con más de 40K registros. Encontrando incluso entornos con más de 15 millones de registros obsoletos. Las tablas sales_flat_quote* almacenan información poco útil para la venta una vez transcurridas varias horas de la sesión de compra. En algunos entornos, por motivos estadísticos o de experiencia de compra atípica, el cliente puede requerir mantener esta información durante varios días. Pero en ningún caso es asumible mantener esta información durante meses o incluso años.

Antes de realizar cualquier operación en la base de datos, por favor haga una copia de seguridad.

La forma óptima de purgar estas tablas sigue siendo mediante las rutinas de mantenimiento de BBDD Magento, programando su purgado mediante los scripts del propio magento. Otra forma de purgado, más específica para las tablas sales_flat_quote* consiste en el vaciado de los registros que cumplan con un determinado requisito, como por ejemplo que sean más antiguos de X días «truncate older than X», el cual podemos ejecutar mediante la siguiente consulta SQL:

DELETE FROM sales_flat_quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)

Y para los usuarios de Magento Enterprise:

DELETE FROM sales_flat_quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)
DELETE FROM enterprise_customer_sales_flat_quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)

Una forma mucho mas agresiva y menos aconsejable es mediante el truncado (vaciado) de las tablas, que podemos ejecutar de forma directa o mediante la siguiente consulta SQL:

SET FOREIGN_KEY_CHECKS=0;
truncate enterprise_customer_sales_flat_quote;
truncate enterprise_customer_sales_flat_quote_address;
truncate sales_flat_quote;
truncate sales_flat_quote_address;
truncate sales_flat_quote_shipping_rate;
SET FOREIGN_KEY_CHECKS=1;

Artículos relacionados