18/09/20207 min

¿Cómo optimizar la Base de Datos de PrestaShop 1.7 para mejorar el rendimiento?

¿Necesitas optimizar la Base de Datos de tu tienda PrestaShop 1.7 y no sabes cómo?

Esta optimización es un paso importante para configurar tu PrestaShop.

A continuación vamos a ver algunos cambios que podemos aplicar en la configuración de la base de datos (MySQL, MariaDB…) de nuestras tiendas online para optimizar PrestaShop y aumentar el rendimiento del sistema.

Factores a tener en cuenta antes de la optimización

Tenemos que tener conocimientos técnicos, los suficientes para realizar tests de carga y para modificar ficheros de configuración en nuestro servidor.

Las configuraciones que vamos a ver pueden requerir alguna configuración extra dependiendo de tu entorno.

Hay algunos parámetros que van a requerir reinicio del servidor, por favor, ten esto en cuenta a la hora de trabajar en entorno real y no en test.

¿Qué debemos saber antes de empezar a optimizar PrestaShop 1.7?

Antes de realizar cualquier cambio en tu hosting, se recomienda realizar algunos test de rendimiento (benchmark).

La idea de realizar estos test es saber cuál es el rendimiento de la tienda en cada cambio aplicado, de este modo nos podemos asegurar que los cambios están aumentando el rendimiento de la tienda y no al revés. 

Podemos realizar estos test con Google Page Speed, GTMetrix, Lighthouse… o con cualquier herramienta que ya conozcamos y nos devuelva tiempos de carga al final os recomiendo algunas herramientas específicas para BDD.

1) Caché

Como vimos anteriormente cuando hablamos sobre optimización PHP la caché también es importante cuando optimizamos nuestra base de datos. Nosotros recomendamos aumentar los valores de caché que vienen por defecto para poder guardar más resultados de querys sin necesidad de ejecutar la consulta cada vez.

Antes de realizar cualquier cambio debemos tener en cuenta la capacidad de nuestro hosting porque por ejemplo si aumentamos mucho el tamaño de la caché necesitaremos más RAM.

Los valores que nosotros hemos usado en nuestros test son:

query_cache_limit = 128K
query_cache_size = 32M
query_cache_type = ON
table_open_cache = 1000
thread_cache_size = 80
host_cache_size=10000

Estos valores se editan en el archivo “my.cnf” de nuestro servidor, ponemos estos parámetros y probamos si es efectivo para nuestra tienda o si es necesario ajustar algún parámetro.

¿Qué son estos parámetros?

  • query_cache_limit: indica el tamaño máximo de resultados por consulta que se puede almacenar en caché, es decir, para cada consulta cuanto tamaño del total de la caché le permitimos usar como máximo.
  • query_cache_size: controla la cantidad total de memoria que asignamos al caché de las consultas, si lo establecemos en 0 estaremos deshabilitando la caché.
  • query_cache_type: habilita la caché.
  • table_open_cache: indica el número de tablas que se pueden tener abiertas en caché.
  • thread_cache_size: indica cuántas conexiones nuevas pueden usar consultas de caché en vez de ejecutar la consulta en disco.
  • host_cache_size: número de host que almacenaremos en caché.

Como hemos comentado al inicio tenemos que tener claro qué recursos tiene nuestro hosting y el porcentaje de uso para poder ajustar estos parámetros en función de los recursos disponibles.

2) Buffering

Si hablamos de almacenamiento en búfer hablamos también de caché, aquí ajustaremos los parámetros que trabajan con el área de memoria que contiene los datos almacenados en caché (los que hemos visto anteriormente).

Una vez más estos parámetros se deben ajustar al hosting de tu tienda:

read_buffer_size = 2M
read_rnd_buffer_size = 1M
join_buffer_size = 2M
sort_buffer_size = 2M
innodb_buffer_pool_size = 3G

Estos parámetros son algo más avanzados para explicarlos punto a punto, por ejemplo, join_buffer_size se usa para joins de tablas sin índices.

Lo más importante es probar, al igual que en los casos anteriores, para asegurar que mejoramos el rendimiento y no empeora.

Hemos ajustado el parámetro innodb_buffer_pool_size para asegurar que todo esté cacheado en memoria pero aseguraros que tenéis suficiente memoria para dedicar a este recurso.

Hay ajustes específicos para InnoDB que podemos revisar sin mayor problema aunque nosotros no lo hayamos hecho.

3) Otros parámetros

Hemos modificado otros  parámetros para incrementar el rendimiento de MySQL:

performance_schema = OFF
max_heap_table_size = 32M
tmp_table_size = 32M

Deshabilitamos performance_schema que se usa para monitorización (solo deshabilitar en producción), ampliamos el espacio disponible para tablas de memoria y tablas temporales.

Después de estos cambios, además de los test de velocidad deberíamos analizar las tablas de la base de datos con:

mysqlcheck -a -A -uroot -pyour_password

Enlaces útiles

performance metrics

¿Por qué es importante optimizar la base de datos en tu tienda PrestaShop?

Nuestra tienda online realiza múltiples conexiones a la base de datos que tengamos establecida para recuperar precios, sesiones de usuarios, imágenes, datos de producto, etc.

Mientras esta consulta se ejecuta la web está en “pausa” esperando los resultados de esta consulta para mostrar al usuario un producto, un listado de productos, direcciones guardadas, etc.

Como veis, las consultas a la base de datos son constantes y como ya dije en el post sobre optimización PHP:

Según un estudio se calcula que si Amazon.com tarda en cargar un segundo más de lo normal, le podría costar 1.600 millones en ventas cada año a la empresa.

En ese post ya hablamos sobre la importancia de la carga en SEO, todo lo que hablamos en aquel momento se repite ahora por eso nos vamos a centrar en otro aspecto básico que conseguiremos mejorar al optimizar la base de datos: el panel de administración de nuestra tienda.

Son muchas las consultas que recibo por vuestra parte sobre cómo mejorar la carga de productos en el panel de administración, fichas de producto que tardan en cargar una eternidad, listado de pedidos demasiado lento, etc. 

Todo esto son consultas a base de datos y entre otros muchos motivos (podemos tener algún módulo esperando respuesta que ralentice la carga, imágenes de gran tamaño, etc.) está la base de datos.

Por eso siempre recomiendo lo mismo, optimizar tanto PHP como la base de datos

Incluso si nuestra tienda es muy grande podemos tener un servidor solo para la base de datos.

No es ninguna locura y me consta que muchas tiendas que ya lo han hecho mejoran y mucho el tiempo de carga.

Por supuesto, para realizar estas modificaciones necesitamos tener acceso root a nuestro hosting, si no lo tenemos porque tenemos una tienda pequeña que está empezando en un hosting compartido podemos hablar con soporte para que al menos os den los datos de todas las configuraciones que hemos visto y podáis decidir si es momento de avanzar a otro hosting.

Imagen principal By Freepik

Cada 2 semanas, nuestra newsletter e-commerce

Al enviar este formulario, acepto que PrestaShop S.A utilice los datos que he facilitado para el envío de boletines y ofertas promocionales. Puedes cancelar la suscripción en cualquier momento por medio del enlace que figura en los correos promocionales que recibes. Obtén más información sobre la gestión de tus datos y derechos.