Magento 1: consultado directamente las tablas de indexado

Magento funcionamiento interno

Continuando con el post anterior sobre los índices de Magento, dejo aquí unas pocas explicaciones por si a alguien le sirve de cómo funcionan las tablas de reindex por dentro. El post anterior introducía el concepto de los índices de Magento, qué son, para qué sirven. Vamos a ver un poco más con unos casos de uso.

Las tablas de índices de stock y búsquedas en un Magento 1

Las tablas que conozco en esta versión de Magento son:

  • cataloginventory_stock_status_idx
  • catalogsearch_fulltext
  • catalog_category_anc_categs_index_idx EMPTY TABLE
  • catalog_category_anc_products_index_idx EMPTY TABLE
  • catalog_category_product_index
  • catalog_product_enabled_index
  • catalog_product_index_* tables
  • report_viewed_product_index

Marco en negrita las dos primeras, que son respectivamente la del índice de stocks y la de las búsquedas. En la de stocks tenemos una instantánea del estado de todos los stocks, para que en el front se puedan consultar más rápido y permitir o no la venta de los productos.

Lo mismo con el índice de búsquedas, que se usa para hacer consultas a BD más rápido que si tuvieramos que consultar todas las tablas relacionadas.

¿Porque son necesarias estas tablas?

Magento internamente usa el modelo de datos EAV, con el cual tenemos que cada entidad no corresponde a una única tabla. Es decir, para acceder a todos los datos de un producto, tenemos que acceder a muchas tablas.

Con el modelo EAV en vez de tener una sola tabla en donde tenemos una columna para cada atributo, tenemos una tabla para dar de alta los atributos, y muchas tablas para almacenar cada tipo de atributo. Así la creación de atributos es dinámica sin tener que modificar la base de datos. Pero los accesos a base de datos son más lentos.

La forma de solucionar esto para dar más velocidad al front es agrupar los atributos de los productos y categorías para poder consultarlos en las tablas de índices. Así pasamos de tener que consultar decenas de tablas a una pocas, esto es mucho más rápido.

Cómo comprobar si tengo que reindexar el estado del stock

Con esta consulta sacamos si hay stock para un producto en concreto:

SELECT sum(stock_status)
FROM cataloginventory_stock_status_idx cssi 
WHERE cssi.product_id = IDPRODUCTO
AND stock_id = 1;

El stock_id corresponde a la tienda en concreto, a la store de Magento. Este stock_status cogerá valores de 0 o 1. También tenemos un campo qty, y si tenemos modificado Magento para que almacene distintos stocks por store puede que tengamos distintos qty según el stock_id..

Con esto tendremos si hay o no unidades, por otro lado tendremos que sacar el stock, si el producto es vendible, si el producto está habilitado, y además está publicado en el website. Si se supone que tiene que estar a la venta pero no lo está en el índice con stock, tenemos que reindexar. Así que desde línea de comandos podemos hacer:

php shell/indexer.php --reindex cataloginventory_stock

Cómo comprobar si tengo que reindexar la tabla de búsquedas

Lo siguiente es hacer lo mismo con el índice de búsquedas. Si viendo que el producto está habilitado, tiene stock, está publicado en los websites, su visibilidad incluye las búsquedas, es decir.. si debería de estar a la venta entonces tiene que salir en el índice de búsquedas. La consulta para ver si está en la tabla de búsquedas es la siguiente:

SELECT count(*) FROM magento_maxmovil.catalogsearch_fulltext cf WHERE cf.product_id = IDPRODUCTO;

Si no devuelve ningún resultado es que no tienes el producto indexado para buscarlo desde el front. Tendremos entonces que revisar las configuraciones si es necesario, y con lo siguiente podemos reindexar éste índice sólo:

php shell/indexer.php --reindex cataloginventory_stock catalogsearch_fulltext

Comprobar que los índices de búsqueda y stock están habilitados

Para esto simplemente tenemos que ir a Magento > Sistema > Gestión de índices ..y veremos una pantalla como esta:

Magento gestión de índices

Las líneas donde pone Stock Status y Search Index corresponden a estos dos índices.

Como dije en el post anterior sobre índices, podemos poner estos índices en automático o manual. Además podemos ponerlos uno a uno en automático, reindexar todos cada noche, o reindexar cada x horas mediante tareas programadas del sistema operativo.

El rendimiento de Magento, las condiciones de carrera para acceso a la base de datos, pueden provocar bloqueos en tablas dejando estos índices en mal estado. Conviene revisarlos, trabajarlos, también hay módulos que ayudan para esto..

Compartir..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

11 − tres =