Magento 1: los índices, qué son y cómo reindexar

Magento funcionamiento interno

Magento es un gran CMS para montar tiendas online. Está muy desarrollado teniendo en cuenta el SEO, el marketing, para tener muchos dominios con la misma web, muchas configuraciones de impuestos, de precios distintintos por web, distintas plantillas para cada sitio web.. todo desde un mismo panel de control.

Es tan flexible desde el mismo panel de control, que ha llegado a extremos de tal forma de que necesita todo tipo de cacheados, tablas temporales donde guardar indexada la información, así como también Varnish y Redis. Todo esto junto es una combinación explosiva y todo un reto hacerlo funcionar todo. Así que en este post vengo a hacer una review del funcionamiento de estos índices de datos.

Qué son los índices de Magento

Son unas tablas temporales, que se regeneran manualmente o automáticamente, para hacer las consultas a la base de datos mucho más rápido. Internamente Magento usa en muchas de sus entidades el modelo EAV, con lo que los accesos a Base de Datos son realmente lentos porque se tienen que consultar muchas tablas para cada entidad.

Para aliviar la carga en las consultas a bases de datos tenemos los índices de las siguientes tablas:

  • cataloginventory_stock_status_idx
  • catalogsearch_fulltext
  • catalog_category_product_index
  • catalog_product_enabled_index
  • report_viewed_product_index
  • catalog_product_index_*

Estas tablas son las que se consultan desde el frontend cuando el visitante va navegado haciendo la compra. Desde el backend no se usan.

Cómo se regeneran

La primera configuración que querríamos tener es la de que se actualicen automáticamente. Para ésto sólo tenemos que ir a Sistema > Index Management y veremos una página como la siguiente:

Magento index management

Si le damos a Reindex Data probablemente dejaremos a medias el reindexado, así que no es nada recomendable. Esto pasa porque si le damos click en el panel de control, será Apache/Nginx o el servidor web que tengamos el que hará el reindex. Este click tendrá un tiempo de ejecución máximo que normalmente es de 30 segundos, y hay varios índices que a nada que tengamos muchos productos se pasarán de los 30 segundos.

Así que podemos configurar esto entrando en cada índice y lo ponemos en automático o manual. Si hay demasiada carga de consultas a base de datos, esto comenzará a fallar por rendimiento, así que convendrá ponerlo en manual y ejecutar desde línea de comandos del servidor lo siguiente:

$ php shell/indexer.php --reindexall

Es conveniente hacer un reindex de todo cada noche, cuando menos visitas tengamos. Así que, por ejemplo en un servidor con Apache, podemos arrancar el programador de tareas así:

$ sudo crontab -e -u www-data

..y programamos la tarea a cada noche, por ejemplo añadiendo esta línea:

0 2 * * * php /ruta/a/tu/magento/shell/indexer.php --reindexall

También podemos ejecutar lo siguiente para ver cuáles índices tenemos:

$ php shell/indexer.php --info

Lo que nos mostrará por consola lo siguiente, o algo parecido:

catalog_product_attribute     Product Attributes
catalog_product_price         Product Prices
catalog_url                   Catalog URL Rewrites
catalog_product_flat          Product Flat Data
catalog_category_flat         Category Flat Data
catalog_category_product      Category Products
catalogsearch_fulltext        Search Index
cataloginventory_stock        Stock Status
tag_summary                   Tag Aggregation Data

Entonces podemos reindexar sólo uno, por ejemplo, si queremos reindexar las URLs amigables, usamos lo siguiente:

$ php shell/indexer.php --reindex catalog_url

Probablemente tardará varios minutos. En proyectos con 5000 productos estamos viendo tiempos de 2-5 minutos para éste índice. Dependerá mucho también de las categorías, atributos, filtros, etc..

Compartir..

Dejar un comentario

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

uno × cinco =