Avisos
Vaciar todo

Base de datos creciendo rápidamente (_postmeta) y como aplicar ciertos comandos  

 
Ibán
 Ibán
Usuario activo

Hola,

Hemos visto recientemente que nuestra web cargaba la parte de administración mucho más lenta y al hacer un chequeo nos hemos fijado que la tabla _postmeta de nuestra base de datos tiene muchísimos registros (más de 2 millones) con tan solo 100 pedidos y muy pocas páginas (ningún post ni comentario). Si que tenemos muchísimos cupones por lo que nos han comentado por ticket que el causante parece ser el plugin "WooCommerce Smart Coupons" que concretamente añade muchos registros llamado "auto_generate_coupon". La pregunta es:

1. ¿Cómo puedo saber que campos tienen más registros en una tabla concreta (como _postmeta)?
2. ¿Cómo puedo eliminar los registros de auto_generate_coupon?

*Los comandos que puedan ser utiles desde SQL para eliminar registros y hacer un poco más ligera la BBDD.

Un saludo y muchas gracias.

Captura de Pantalla 2022 05 23 a las 13.23.20

Contenido solo visible a usuarios registrados

Citar
Respondido : 24/05/2022 10:33 pm
Bruno
 Bruno
Soporte CMS Webempresa Moderator

Que tal Ibán,

Respondo tus consultas

1. ¿Cómo puedo saber que campos tienen más registros en una tabla concreta (como _postmeta)?

Veo que tienes instalado el plugin de Advanced Database Cleaner desde el cual puedes validar cual tabla dentro de tu base de datos es la que mayor registros tiene

Tambien es valido consultar directamente desde Phpmyadmin https://guias.webempresa.com/preguntas-frecuentes/optimizar-una-base-datos-phpmyadmin/

2. ¿Cómo puedo eliminar los registros de auto_generate_coupon?

Primero hay que validar cual es la tabla especifica que alberga estos registros, luego al estar seguros de cual es la responsable seguiria los siguientes pasos

-Haria un respaldo de la base de datos https://guias.webempresa.com/preguntas-frecuentes/exportar-una-base-datos/#wepanel
-Luego desinstalaria el plugin de WooCommerce Smart Coupons
-Al determinar la tabla desde las opciones de Advanced Database Cleaner o desde Phpmyadmin borraria la tabla en cuestion 

Te dejo la documentacion del plugin Advanced Database Cleaner el cual veo cuentas con una version Pro https://docs.sigmaplugin.com/article/51-clean-up-wordpress-tables

Saludos!

ResponderCitar
Respondido : 24/05/2022 11:05 pm

optimiza-automaticamente-todas-las-imagenes-de-tu-wordpress

Ibán
 Ibán
Usuario activo

Hola @bruno-vichetti

1. Eso mismo hice para saber que mi tabla _postmeta ocupaba tanto espacio. Mi pregunta es como saber que registros están ocupando tanto espacio dentro de _postmeta (o cualquier otra tabla si fuese el caso). Es decir, veo que tiene 2.000.000 de registros y pesa +200mb pero desde el plugin Advanced Database Cleaner no puedo saber porqué.

Entiendo que tiene que haber alguna función SQL para saber qué tipo de registro está ocupando más en esa tabla en concreto.

2. Antes de abrir aquí el post, pregunté por ticket a tus compañeros y me indicaron que en _postmeta había muchos registros de auto_generate_coupon y que preguntase por aquí para saber como borrarlo. Es decir, se que plugin lo genera, se en qué tabla crea esos registros y quiero eliminarlos, pero necesito saber;

- Cómo filtrar en una tabla para encontrar que funciones están creando más registros

- Como eliminar esos registros específicamente dentro de esta tabla (qué función de SQL debería usar)

Un saludo y muchas gracias.

 

ResponderCitar
Respondido : 25/05/2022 5:17 pm
Bruno
 Bruno
Soporte CMS Webempresa Moderator

Hola Ibán,

Si desde el plugin Advanced Database Cleaner no puedes hacerlo nosotros sugerimos utilizar Wp Optimize https://wordpress.org/plugins/wp-optimize/ donde tenemos el siguiente articulo de como utilizarlo https://soporteforo.webempresa.eu/guia/guia-de-wp-optimize/

Por otra parte nosotros desde el foro no podemos ni ver tu instalación ni indicarte exactamente que consulta realizar ya que esto es un tema que varia segun el cliente sin embargo si que podemos darte indicaciones de como puedes hacer la limpieza ya sea por plugin (el cual ya te he recomendado) o por medio de Phpmyadmin

Si es el segundo caso intuyo que ya has revisado lo siguiente https://guias.webempresa.com/preguntas-frecuentes/optimizar-una-base-datos-phpmyadmin/

De igual manera vamos a plantear el caso lo mas similar posible al tuyo a modo de ejemplo

-Desde el panel de nuestro servidor vamos a abrir Phpmyadmin

image

-Una vez dentro de Phpmyadmin vamos a seleccionar la base de datos que corresponde al sitio que deseamos consultar y haremos una exportacion para tenerla como respaldo

image

-Luego de hacer el respaldo vamos a ubicarnos en el listado de tablas de nuestra base de datos y vamos a organizarla por el numero de filas, de esta forma vamos a determinar que tabla es la que en efecto tiene mas registros

image

-Al determinar el valor de la tabla que quieres eliminar vamos a la pestaña SQL y vamos a colocar la siguiente consulta

image
DELETE FROM wp_postmeta WHERE meta_key = "VALOR A ELIMINAR";

Recuerda lo siguiente:

-Donde dice VALOR ELIMINAR tienes que modificarlo con el valor de la tabla que deseas en efecto borrar
-No debes eliminar los valores que correspondan a _wp_attachment_metadat ni _wp_attached_file
-Este proceso no es recomendado si no se tiene presente exactamente que eliminar y pones en riesgo el funcionamiento de tu sitio, para ello ya hemos el plugin que podría funcionarte

Saludos!

ResponderCitar
Respondido : 25/05/2022 6:23 pm

Cursos Gratuitos WordPress

Ibán
 Ibán
Usuario activo

Hola de nuevo @bruno-vichetti muchas gracias por la respuesta.

1. Respuesta a ordenar las tablas por registros, funciona para las tablas generales (saber que tabla tiene mas dentro de la propia de Wordpress) pero no me sirve para saber que función tiene más registros dentro de wp_postmeta (ahí ya no sale el filtro de filas). Adjunto una imagen - Imagen 1.

Imagen 1

2. Fantástico, eso es justo lo que necesitaba. He probado a ejecutarlo en SQL y funciona perfecto. Ya he borrado los registros de auto_generate_coupon. Pero una pregunta... ¿es posible insertar un código en functions.php para que no se generen nuevas meta_keys en el futuro y que todos los valores para esas meta_keys sean iguales?

Por ejemplo, todos los valores auto_generate_coupon es igual a NO (o a 1 en este caso) por tanto es absurdo que haya 76000 registros con auto_generate_coupon = NO cuando siempre van a ser iguales. ¿Es posible un código que indique justamente ese valor para evitar que la base de datos crezca?

Muchas gracias.

ResponderCitar
Respondido : 25/05/2022 7:20 pm
Bruno
 Bruno
Soporte CMS Webempresa Moderator

Que tal Ibán,

Excelentes noticias! Respecto a tu nueva solicitud lamentablemente por este medio no podemos generarte un código a medida que ejecute la función que requieres sin embargo nuestros colaboradores si que pueden hacerlo.

https://www.webempresa.com/directorio-colaboradores.html

Sin mas que agregar me comentas si con lo realizado podemos dar el tema por resuelto.

Saludos!

 

ResponderCitar
Respondido : 25/05/2022 8:06 pm