¿Cómo optimizar base de datos en WordPress?

Uno de los puntos que trabajamos los consultores de WPO (Web Perfomance Optimization) es optimizar la base de datos para que el servidor consuma la menor cantidad de recursos posibles.

WordPress hace bien este trabajo pero también añade mucho contenido innecesario que te voy a enseñar a optimizar. Te voy a enseñar cuales son las principales gestoras de bases de datos (Y una comparativa), que son los archivos basura, comentarios descartados, elementos transients, abuso de consultas (querys), etc.

Si quieres aprender a optimizar base de datos en WordPress quédate por aquí que seguro que aprender muchas cosas nuevas.

¿Qué es una base de datos?

Una base de datos es un espacio reservado en un servidor en un centro de datos que se encarga de almacenar información. Una base de datos está constituida por tablas y filas. Tiene usuarios de gestión. Una base de datos puede ser relacional o no.

Como funciona una base de datos en WordPress

Una base de datos para WordPress no se diferencia por nada de si fuese una base de datos para Joomla, Drupal, Moodle u otro tipo de plataformas. Una base de datos es igual para todo tipo de plataformas o sistemas de gestión de información.

Si bien es cierto que dependiendo del tipo de plataforma o sistema que se use, deberás montar una base de datos optimizada en función de tus necesidades. Ya verás más adelante los tipos de bases de datos que existen.

Una base de datos para WordPress ea una base de datos MySQL, que trabaja de la mano con PHP, que no requiere de configuraciones avanzadas, únicamente albergar información de la instalación, información de los plugins, usuarios, configuraciones de la plataforma, etc..

Si tu WordPress necesita escalar a otro tipo de gestor de base de datos como MariaDB o MongoDB es por las necesidades específicas que pueda tener tu WordPress en el futuro o recursos que consuma en el presente. Pero para una persona o empresa normal y corriente podrá montar un WordPress en una base de datos MySQL.

Como es la estructura de la base de datos de un WordPress

Como te decía, la información de una base de datos relacional se basa en guardar información en tablas, cada una para albergar un tipo de información, que están relacionadas entre sí. Te enseño un esquema elaborado por los propios desarrolladores de WordPress para que veas como se relacionan.

Optimizar base de datos en WordPress esquema

A continuación, te enseño cuales son las tablas por defecto que necesita WordPress para ser instalado y te explico para que sirve cada una.

La que está marcada en rojo es la principal wp_posts, es donde se alberga todo lo que tiene que ver con la esencia de WordPress (Post, páginas, contenido como tal). El resto apoyan a esta tabla con más datos secundarios como la de los usuarios, comentarios, plugins, etc. Vamos a explicarla una a una:

Tabla wp_commentmeta

La tabla wp_commentmeta alberga información relacionada con los comentarios como imágenes de perfil, información sobre fechas de publicación, etc. Sirve de apoyo a la tabla wp_comments.

Esta tabla suele albergar mucho contenido intranscendente para optimizar base de datos.

Tabla wp_comments

La tabla wp_comments contiene la información de los comentarios como los comentarios en sí. Trabaja de la mano con la tabla wp_commentmeta. Esta última es la ‘esclava’ que guarda datos relacionados con el comentario en sí.

Esta tabla suele albergar mucho contenido de poca utilidad para optimizar base de datos. Los comentarios que están descartados, aunque no sean visibles en la web, se guardan aquí y puede llegar a acumular demasiado residuo junto a la de wp_commentmeta.

Tabla wp_links

En principio la idea original de esta tabla era albergar todo lo que, como bien dice su nombre, tuviese que ver con los enlaces. Desde la versión 3.5 de WordPress esta tabla quedó algo relegada a otras funciones y su uso principal está obsoleto.

Tabla wp_options

Esta, junto a la de wp_posts es quizá una de las más importante debido a que dentro de ella encontrarás todo lo que tiene que ver con la configuración de la instalación de WordPress. También encontrarás información de los plugins (Cuales están instalados, cuales de ellos activos y no activos), cuantas plantillas hay y cuales están activas o no… Es vital esta tabla, junto a la de wp_posts, pues es el núcleo de operaciones esencial.

Tabla wp_postmeta

Cumple la función de esclava de wp_posts. En esta tabla se alberga todo lo que tiene que ver con imágenes, autor, contenidos personalizados, etc.

Tabla wp_posts

Es la más relevante junto a la de wp_options. En ella se alberga todo el contenido bruto de la web. Aunque el nombre de la tabla puede significar “artículos” también guarda información de las categorías, páginas, entradas personalizadas, etc…

Tabla wp_termmeta

Se encarga de guardar la información secundaria respecto a las categorías. Es la esclava de wp_terms.

Tabla wp_terms

Aquí se guarda todo lo que tiene que ver con las categorías y etiquetas que tengamos en WordPress.

Tabla wp_terms_relationships

Como las tablas de las categorías y las de etiquetas suelen tener mucho juego en WordPress, era necesario establecer una tabla intermediaria que relacionase las categorías, etiquetas, etc…

Tabla wp_term_taxonomy

Especifica cuando un contenido se trata de una entrada, otra de una página, páginas personalizadas de los propios plugins, etc…

Tabla wp_usermeta

Alberga toda la información secundaria que tiene que ver con los usuarios. Es la tabla esclava de wp_users.

Tabla wp_users

Contiene todo lo relacionado con los usuarios como nombre, email, contraseña, fecha de registro, rol de administración o poderes dentro de WordPress, etc…


Como puedes ver, cada tabla contiene un tipo de información y aunque sean únicas e independientes están relacionadas con la padre wp_posts que es la que concentra el mayor peso de la web. Si eliminas una tabla de la base de datos de tu WordPress esta se desconfigurará y te probablemente aparezcan muchos errores 500, 400, 300 en tu página web.

¿Cómo administro una base de datos?

Ahora que ya sabemos que es una base de datos, cuales y como funcionan y se relacionan las tablas de información, te voy a enseñar a acceder a ella. Cuando trabajas con bases de datos MySQL para WordPress solemos acceder a ella mediante un gestor llamado phpMyAdmin.

Este gestor te permitirá eliminar, modificar y crear tablas. También podrás eliminar, modificar y crear datos manualmente sin necesidad de que WordPress funcione o no.

¿Cómo accedo al gestor phpMyAdmin?

Depende del tipo de plataforma que te haya proporcionado tu proveedor de alojamiento web. Para acceder a phpMyAdmin desde cPanel tienes que iniciar sesión en tu panel de cliente de hosting y acceder a la página principal de cPanel (Si no sabes como llegar, ponte en contacto con tu proveedor de alojamiento web).

Una vez dentro, localiza la sección “bases de datos” y haz click en “phpMyAdmin” como ves en la siguiente imagen:

Optimizar base de datos en WordPress buscar phpMyAdmin cpanel

Tras hacer click y esperar unos segundos se nos redireccionará al gestor de base de datos para que puedas crear tablas, eliminarlas o modificarlas como ves en la siguiente imagen:

Optimizar base de datos en WordPress base de datos seleccionada

A mano izquierda podrás gestionar y optimizar base de datos de WordPress que tengas. Te recomiendo no tocar absolutamente nada si no tienes conocimientos de programación ni de gestión o administración de bases de datos.

Si eliminas un dato de aquí, no hay vuelta atrás a no ser que hayas hecho una copia de seguridad (Poco probable, puesto que acabas de aprender como acceder por primera vez) o tu proveedor de alojamiento web (Depende de si este hace copias diarias, semanales o quincenales, etc…).

¿Cómo puedes optimizar base de datos en WordPress?

Por suerte WordPress es una maravilla y existen plugins/addons (Que recuerda, toda su información se guardará en wp_options) que nos ayudarán a optimizar base de datos.

Aun así, te recomiendo antes de nada realizar una copia de seguridad de la base de datos por lo que pueda pasar. Un mal click o mala decisión puede suponer un error garrafal y que tu web no se vea provocando errores 500 o 400. Máxime es la preocupación cuando tienes una tienda online o plataforma de ventas o guardas información sensible como la médica.

Una vez tengas la copia de seguridad podrás empezar a optimizar base de datos de WordPress. Para ello vamos a emplear plugins como funciones avanzadas (Estas últimas solo usarás en caso de que tengas conocimiento de administración de servidores y sepas conectarte a tu servidor mediante SSH).

Instalar plugins para optimizar base de datos

WordPress cuenta con una gran comunidad detrás que desarrollan plugins o módulos gratuitos sin ánimo de lucro, solo por ayudar a la comunidad. Un tipo de esos módulos es para optimizar base de datos. Te voy a enseñar como.

Te voy a hablar de los TOP 6 plugins para optimizar base de datos con un par de clicks.

WP Optimize

Optimizar base de datos en WordPress Wp Optimize plugin

Es uno de los plugins más efectivos que existen en el mercado de módulos o plugins en WordPress. A demás es gratuito. Cuenta con una puntuación de 4,9 sobre 5 con casi 1000 valoraciones. Ahí es nada.

Te permitirá borrar comentarios descartados que no sirvan para nada, borradores, elementos ‘transients* (Luego te explico que son), etc… que lo único que hacen es acumular bytes y kilobytes de información innecesaria.

*Los elementos transients son elementos ‘caducados’ o consultas cacheadas que en su momento servían para acelerar peticiones y consultas pero ya que no tienen el mismo cometido.

Por eso es muy importante eliminarlos y así conseguirás optimizar un poco más la carga de la web. Si quieres saber más sobre como funciona este plugin te invito a acceder a un artículo muy completo de los chicos de Raiola Networks.

RVG Optimize database

Optimizar base de datos en WordPress RGV optimize Database

Otro de los plugins a los que más se recurre para optimimzar bases de datos en WordPress. Este quizá es un algo más agresivo que el plugin anterior por lo que hay que tener cuidado a la hora de trabajar con él.

Es más agresivo por lo que podría causar una mala configuración e incluso destrozar la instalación de WordPress. Recuerda tener una copia de la base de datos por si acaso. Este plugin destaca por hacer una limpieza de elementos basura más agresiva (ataca a más tablas) que el plugin anterior.

Puedes bajártelo desde aquí: https://es.wordpress.org/plugins/rvg-optimize-database/

Clean Up Booster

Optimizar base de datos en WordPress Clean Up Booster

Clean Up Booster es un plugin de WordPress que te permitirá hacer la misma función que el plugin anterior mencionado solo que cuenta con un aspecto visual mucho más agradable y con alguna que otra función nueva en comparación.

La ventaja de este plugin es que te permite crear limpiezas manuales y automáticas, como si fuese un robot que te limpiases tu casa cada día. Puedes programarlo para pasar limpiezas con determinada frecuencia.

Otra de las ventajas es que puede resolver problemas con la base de datos en caso de que estuviera corrupta. No garantiza que arregle todos los problemas pero si podría ser la solución frente a problemas más comunes.

Puedes descargártelo desde aquí: https://es.wordpress.org/plugins/clean-up-booster/

WordPress Database Reset

Optimizar base de datos en WordPress WordPress database reset

WordPress Database Reset no es un plugin para optimizar una web en WordPress, todo lo contrario, te permite dejar tu WordPress limpio como si de una instalación nueva se tratase.

En caso de que tuvieses un problema con tu WordPress y tengas que reinstalar WordPress, este plugin te ayudará a no tener que reinstalar el WordPress desde cero, te dejará todo como si lo hubiese creado ahora mismo.

Puedes descargártelo desde este enlace: https://es.wordpress.org/plugins/wordpress-database-reset/

WP DB Cleaner

Optimizar base de datos en WordPress WP DB Cleaner

WP DB Cleaner es un plugin que te va a ayudar muchísimo a encontrar datos replicados en la web y eliminarlos. Como todo en la vida, las duplicidades no sirvan para nada y en este caso podemos decir lo mismo llevado al extremo de una web.

Puedes bajártelo desde este enlace: https://es.wordpress.org/plugins/wp-db-cleaner/

BETTER SEARCH REPLACE

Optimizar base de datos en WordPress Better search replace

Este plugin es la caña, podrás buscar cadenas de texto en concreto de una base de datos de WordPress y reemplazarlas por otra cadena o directamente eliminarlos. Es muy útil desde mi punto de vista y nunca viene mal tenerlo a mano en caso de migraciones u optimización de bases de datos de WordPress.

Enlace de descarga: https://wordpress.org/plugins/better-search-replace/

¿Qué es una base de datos relacional y una base de datos NO relacional?.

MySQL, como ya hemos dicho antes, se trata de un tipo de gestor de datos relacional por que usa tablas y filas para almacenar datos (SQL). Sin embargo, MongoDB o MariaDB son bases de datos NO relacionales (NoSQL).

La gran diferencia de las SQL frente a las NoSQL es que estas primeras almacenan datos en tablas y filas y las NoSQL lo hacen mediante archivos o documentos con formato json o XML.

En el caso de las relacionales, las consultas son más flexibles pero más costosas. En las no relacionales es menos flexible hacer una consulta pero menos costoso recuperar esa información. Todo depende del tipo de proyecto y necesidades que tengas.

Las bases de datos relacionales están pensadas para proyectos sencillos, pequeños sin establecer conexión con otras webs o servidores. Las bases de datos no relacionales están pensadas para proyectos de gran envergadura, que necesitan almacenar una ingente cantidad de información-

Diferencias entre MySQL, MariaDB y MongoDB.

El 95% de las instalaciones de WordPress trabajan sobre una base de datos del tipo MySQL. En casos puntuales, como la necesidad de tener una base de datos de alto rendimiento o albergar mucha información se usarán gestores como MariaDB o MongoDB.

Optimizar una base de datos en WordPress de forma avanzada.

No siempre es recomendable hacer una optimización desde los plugins porque ya el propio plugin es una carga en la propia optimización de WordPress. Por eso hay que bajar al terreno o campo de batalla y modificar el código nativo de WordPress o configuraciones del propio hosting/servidor para optimizar WordPress desde la raíz.

Lo que te voy a enseñar es como modificar parámetros mediante SSH del servidor para optimizar una base de datos MySQL (Aunque también sería válido en MariaDB) en Linux.

Toda la configuración para MySQL reside en un archivo llamada my.cnf. Dicho archivo se sitúa en la carpeta raíz /etc de Linux y podremos toquetearlo para optimizarlo usando ‘nano’ o ‘vi’ (Comando para editar archivos desde la terminal). Para modificarlo, nada más acceder al SSH escribe

nano /etc/my.cnf
vi /etc/my.cnf

En función del tipo de editor de texto que hayas escogido podrás editar los parámetros del archivo. La configuración por defecto es la siguiente:

Optimizar base de datos en WordPress comando vi nano my.cnf

Tenemos los valores de my.cnf:

  • Key_buffer_size = 16K Determina el tamaño del caché en los índices. Por defecto viene en 16K pero lo recomendable es que sea 32 MB (megabytes) por cada slot de memoria RAM física.
  • Max_allowed_packet = 1M Es el tamaño máximo de un paquete con el que MySQL podrá trabajar. Si queremos trabajar con gran volumen de datos e importar bases de datos grandes, hay que modificar este parámetro.
  • Table_open_cache = 4 Cuando ejecutas una consulta, este parámetro restringe el número de tablas a usar por cada una de ellas. Lo recomendable es trabajar con un valor de 64.
  • Sort_buffer_size = 64K Es el tamaño de caché para las consultas. Al igual que te recomendé aumentar en key_buffer_size, te recomiendo aumentar a 1M por cada slot físico de memoria RAM de tu servidor.
  • Read_buffer_size: Es el tamaño de caché para las lecturas. También es recomendable aumentar a 1M por cada slot físico de 1GB memoria RAM.
  • Read_rnd_buffer_size: Este parámetro relaciona las búsquedas y lecturas de los dos anteriores parámetros. Subir a 1M por cada slot físico de memoria RAM al igual que los anteriores.
  • Net_buffer_lenght: El buffer en la comunicación se cambiará al valor especificado, en este caso 2K siendo una base ya que puede verse incrementado hasta el tope del max_allowed_packet.
  • max_connections: Es el tope de consultas simultáneas que permite MySQL. Cambiaría el valor en función de la memoria ram, visitantes simultaneos y tipo de plataforma.
  • Wait_timeout: Es el tiempo máximo en segundos que espera MySQL para cerrar el hilo/operación que ha sido ejecutado. Esto se hace para prevenir que MySQL se quede buscando indefinidamente un valor que no existe.
  • Interactive_timeout: El tiempo máximo en segundos que espera el gestor de base de datos para cerrar la conexión cuando la interactividad cliente/servidor queda en ‘stand-by’.

Estos son los parámetros más modificados a nivel usuario medio avanzado. Ahora tendrías que salir de la edición y reiniciar el servidor. OJO: Cuidado porque como edites un parámetro mal puede que tu servidor ya no arranque más. Tienes que estar muy seguro de lo que estás haciendo. Recuerda hacer una copia de seguridad antes de nada.

Usar MySQL Tunner para optimizar base de datos

Existen librerías o scripts que nos ayudarán a terminar de optimizar una base de datos. Este tipo de scripts o librerías recopila información del trabajo de la base de datos durante un periodo de tiempo. Tras analizar el rendimiento te dará consejos de cambio de valores en los parámetros para optimizar la base de datos.

En este caso vamos a hacer uso de MySQL Tunner que es una librería escrita en Perl que ayudará a monitorizar el rendimiento de la base de datos. Esta librería es compatible con MySQL (Versiones 3.23 hasta 5.7) y Maria DB (Versiones 5.5 hasta la 10.1). Además solo es compatible con sistemas operativos Linux, Windows y BSD o Solaris.

Es muy difícil predecir manualmente que parámetros debemos usar para configurar el my.cnf y optimizar la base de datos por lo que MySQL Tunner nos será de mucha utilidad.

Descargando MySQL Tunner

Debemos bajarnos la librería del repositorio oficial con el comando:

wget http://mysqltuner.pl/ -O mysqltuner.pl

Más tarde, tras habernos descargado el repositorio ejecutamos con Perl la librería:

perl mysqltuner.pl

Tras ejecutarlo elaborará un informe del rendimiento de la base de datos. Es muy recomendable al menos que el servicio de base de datos haya estado activo al menos 24 horas.

Optimizar base de datos en WordPress informe MySQL Tunner

Uso del hardware para la optimización de la base de datos

Por muy optimizada que tengamos la base de datos, siempre entrará en juego el hardware del servidor que tengas. No es lo mismo correr o trabajar con un servidor con discos SSD que con discos HDD.

Los discos SSD corren a mucha más velocidad que los discos HDD previstos para almacenamiento más que para rendimiento. Si quieres que tu página web vuele deberás contar con la alianza hardware + optimización de bases de datos.

Ventajas de optimizar base de datos 

Conclusiones tras optimizar base de datos 

Hoy te he enseñado a optimizar una base de datos en WordPress de forma manual y automática. Además has aprendido que es MySQLTunner y como te puede ayudar a mejorar el rendimiento de la base de datos. Mi recomendación es que no sigas al pie de la letra las recomendaciones pues te podría consumir muchísima RAM. Debes saber que es lo óptimo para ti y que debes sacrificar.

Para realizar un óptimo saneamiento de base de datos y mejorar el rendimiento de esta, te recomiendo ponerte en contacto con los chicos de Raiola Networks. Trabajan las 24 horas del día, los 365 días del año teniendo siempre a alguien a quien poder pedir ayuda en caso de necesitarla.