Optimizar las bases de datos de WordPress

 

Generalidades

Este artículo describe varios métodos para optimizar la base de datos de un sitio de WordPress.

Antecedentes

Las herramientas en línea no pueden acceder a la base de datos de WordPress, por lo que es posible obtener una puntuación alta en estas herramientas y, al mismo tiempo, tener un rendimiento deficiente de la base de datos. Los comandos de este artículo ayudan a optimizar la base de datos para garantizar que funcione de la manera más eficiente posible.

Optimizar las tablas de la base de datos

Estas instrucciones actualizan las siguientes tablas:

Para correr estos comandos wp-cli, debes iniciar sesión en tu servidor a través de SSH y navegar al directorio de tu sitio WordPress.

Se recomienda encarecidamente que haz un respaldo de tu base de datos antes de correr estos comandos, ya que luego podrás restaurar fácilmente tu contenido si es necesario.

La tabla options

La tabla options contiene datos importantes del sitio de WordPress, como la URL del sitio, la ruta y la configuración guardada. También contiene configuraciones de plugins y temas, junto con datos transitorios (temporales). Con el tiempo, esta tabla puede llenarse de datos transitorios con temporizadores de vencimiento prolongados y configuraciones sobrantes de plugins desinstalados.

Eliminar y optimizar lo transitorios

Elimina cualquier transitorio en la base de datos de WordPress:

[server]$ wp transient delete --all

Optimiza las tablas restantes en la base de datos:

[server]$ wp db optimize

Si deseas automatizar estos comandos en el futuro, puedes crea un cron job usando el panel de DreamHost.

Si tu tabla de opciones es de 10 MB o más después de la optimización, considera usar el servicio de optimización de base de datos de DreamHost, o comunícate con otro desarrollador profesional de WordPress para obtener más ayuda.

Carga automática

Los datos de carga automática son un conjunto de datos que se cargan con cada solicitud a la tabla de opciones. Una gran cantidad de datos de carga automática puede provocar un rendimiento deficiente del panel de WordPress y también puede afectar al sitio público.

Ver datos de carga automática

Corre el siguiente comando para saber cuántos datos de carga automática tiene tu sitio:

[server]$ wp db query "SELECT SUM(LENGTH(option_value)/1048576) as 'Autoload(MB)' FROM $(wp config get table_prefix)options WHERE autoload='yes' or autoload='on' ;"

Menos de 600 KB es bueno para la mayoría de los servidores, pero los servidores de mayor rendimiento como DreamPress pueden manejar grandes cantidades de datos de autoload.

Ver las filas de carga automática más grandes

Si el tamaño de carga automática es más grande de lo esperado, corre el siguiente comando:

[server]$ wp db query "SELECT option_name, LENGTH(option_value)/1048576 AS "Size" FROM $(wp config get table_prefix)options WHERE autoload='yes' or autoload='on' ORDER BY "Size" DESC LIMIT 25 ;"

Este comando devuelve las 25 filas más grandes de una tabla de opciones que se están cargando automáticamente. A partir de aquí, deberás examinar las filas y determinar qué datos son realmente necesarios. Los datos de carga automática pueden estar relacionados con tu tema o plugins, y deberás investigar las entradas que no reconoces antes de eliminarlas.

Remove rows

Remove rows that can have confirmed can be safely removed.

[server]$ wp db query "DELETE FROM $(wp config get table_prefix)options WHERE option_name LIKE '%example_%' ;"

Reemplaza example_ con el prefijo en la fila que quieres eliminar. Además, asegúrate de mantener los símbolos % al principio y al final, ya que actúan como consultas wildcard.

Una vez que se elimina una fila, corre wp db optimize nuevamente y prueba tu sitio para asegurarte de que no haya efectos adversos.

Indexar

La indexación ayuda al servidor de base de datos a encontrar y devolver consultas rápidamente.

Revisar las indexaciones

Verifica si tu tabla de opciones ya tiene un índice:

[server]$ wp db query "SHOW INDEX FROM $(wp config get table_prefix)options ;"

Generalmente, debes agregar un índice cuando tu base de datos tiene entre un 60% y un 80% de datos no cargados automáticamente.

Comparar indexes

Compara estos valores:

[server]$ wp db query "SELECT COUNT(CASE WHEN autoload = 'yes' THEN 1 END) FROM $(wp config get table_prefix)options ;" ; wp db query "SELECT COUNT(CASE WHEN autoload = 'no' THEN 1 END) FROM $(wp config get table_prefix)options ;"

Indexar una tabla

Puedes agregar un index a tu tabla de opciones usando el siguiente comando:

[server]$ wp db query "CREATE INDEX autoload ON $(wp config get table_prefix)options(autoload, option_name) ;"

Eliminar un index

Corre lo siguiente para eliminar un index:

[server]$ wp db query "DROP INDEX autoload ON $(wp config get table_prefix)options ;"

La tabla postmeta

La tabla postmeta contiene metadatos diversos vinculados a una publicación en tu sitio, como los agregados por plugins y temas, o metadatos para el contenido de la biblioteca multimedia. Si la tabla postmeta es más grande que la tabla de publicaciones, es posible que se necesite más optimización.

Necesitará usar dos comandos para buscar en la tabla postmeta, ya que la columna mate_key usa un _ inicial para las configuraciones ocultas y ningún _ inicial para las configuraciones accesibles para el usuario.

Comando 1 — Enumetar todas las configuraciones accesibles del usuario

Este comando crea una lista ordenada en orden descendente por tamaño de fila.

[server]$ wp db query "SELECT SUBSTRING_INDEX(meta_key, '_', 1) AS "Meta",(SUM(LENGTH(meta_id)+LENGTH(post_id)+LENGTH(meta_key)+LENGTH(meta_value)))/1048567 AS "Size", COUNT(*) AS "Count" FROM $(wp config get table_prefix)postmeta WHERE meta_key NOT LIKE '\_%' GROUP BY "Meta" ORDER BY "Size" DESC ;"

Comando 2 — Lista de configuraciones ocultas

Este comando hace lo mismo para las configuraciones ocultas.

[server]$ wp db query "SELECT SUBSTRING_INDEX(meta_key, '_', 2) AS "Meta",(SUM(LENGTH(meta_id)+LENGTH(post_id)+LENGTH(meta_key)+LENGTH(meta_value)))/1048567 AS "Size", COUNT(*) AS "Count" FROM $(wp config get table_prefix)postmeta WHERE meta_key LIKE '\_%' GROUP BY "Meta" ORDER BY "Size" DESC ;"

Examinar los resultados

Examina los resultados para determinar qué se puede eliminar, si es que se puede eliminar algo. Estos comandos imprimen dos tablas (una con un _ inicial y otra sin él), que muestran la cadena meta_key, el tamaño que ocupa en la base de datos, la cantidad de filas que la contienen y, lo que es más importante, la fecha y el post_id de la última vez que se utilizó.

Las entradas de valor meta_key se pueden usar para identificar filas de plugins o temas que ya no se utilizan.

[server]$ wp db query "SELECT MAX(t1.post_id) AS "post_id", MAX(t2.post_date) AS "Date", SUBSTRING_INDEX(t1.meta_key, '_', 1) AS "Meta", (SUM(LENGTH(meta_id)+LENGTH(post_id)+LENGTH(meta_key)+LENGTH(meta_value)))/1048567 AS "Size", COUNT(*) AS "Count" FROM $(wp config get table_prefix)postmeta AS t1 JOIN $(wp config get table_prefix)posts AS t2 ON t1.post_id = t2.ID WHERE meta_key NOT LIKE '\_%' GROUP BY "Meta" ORDER BY "Date" DESC ;"
[server]$ wp db query "SELECT MAX(t1.post_id) AS "post_id", MAX(t2.post_date) AS "Date", SUBSTRING_INDEX(t1.meta_key, '_', 2) AS "Meta", (SUM(LENGTH(meta_id)+LENGTH(post_id)+LENGTH(meta_key)+LENGTH(meta_value)))/1048567 AS "Size", COUNT(*) AS "Count" FROM $(wp config get table_prefix)postmeta AS t1 JOIN $(wp config get table_prefix)posts AS t2 ON t1.post_id = t2.ID WHERE meta_key LIKE '\_%' GROUP BY "Meta" ORDER BY "Date" DESC ;"

Eliminar las filas

Si se encuentran filas innecesarias, corre el siguiente comando para eliminarlas:

[server]$ wp db query "DELETE FROM wp_postmeta WHERE meta_key LIKE '%example_%' ;"

Reemplazar %example_% con el prefijo de la fila que deseas eliminar. Además, asegúrate de mantener los símbolos % al principio y al final, ya que actúan como consultas wildcard.

Eliminar los metadatos

Además, puede haber metadatos en tu tabla postmeta que ya no están asociados con una publicación. Corre el siguiente comando para buscar y eliminar metadatos de publicaciones eliminadas:

[server]$ wp db query "SELECT * FROM $(wp config get table_prefix)postmeta pm LEFT JOIN $(wp config get table_prefix)posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL ; DELETE pm FROM $(wp config get table_prefix)postmeta pm LEFT JOIN $(wp config get table_prefix)posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL ;"

La tabla commentmeta

La tabla commentmeta puede saturarse con el tiempo con metadatos para comentarios eliminados, como los eliminados por un plugin de detección de comentarios de spam.

Enumerar filas

Para enumerar las filas que se eliminan antes de eliminarlas por completo, usa el siguiente comando:

[server]$ wp db query "SELECT * FROM $(wp config get table_prefix)commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM $(wp config get table_prefix)comments) ; DELETE FROM $(wp config get table_prefix)commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM $(wp config get table_prefix)comments) ;"

Revisiones posteriores

Las revisiones de publicaciones de WordPress son versiones históricas o guardadas automáticamente de las publicaciones de tu sitio. WordPress limita el recuento de revisiones a 10 por defecto, pero pueden expanderlo a medida que aumenta el recuento de publicaciones de tu sitio. Utiliza los siguientes comandos para limpiar las revisiones en la base de datos de tu sitio.

Contar las revisiones totales

Obtén un recuento de las revisiones totales de tu sitio:

[server]$ wp post list --post_type='revision' --format=ids | wc -w

Eliminar las revisiones

Elimina cualquier revisión existente:

[server]$ wp post delete $(wp post list --post_type='revision' --format=ids) --force --quiet

Agrega la siguiente directiva a tu archivo wp-config.php para limitar el número máximo de revisiones:

define('WP_POST_REVISIONS', 1);

Asegúrate que cualquier adición a tu wp-config.php se hacen por encima de la línea que dice /* That's all, stop editing! Happy blogging. */.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?