sql >> Databáze >  >> RDS >> Mysql

Fragmentace tabulek Wordpress a MySQL

Jednou z možností je, že se vám zobrazují nesprávné statistiky o velikosti tabulky.

MySQL 8.0 se pokouší ukládat statistiky o tabulkách do mezipaměti, ale zdá se, že v implementaci jsou nějaké chyby. Někdy zobrazuje statistiky tabulky jako NULL a někdy zobrazuje hodnoty, ale nepodaří se je aktualizovat, když upravujete data tabulky.

Viz https://bugs.mysql.com/bug.php?id=83957 například chyba, která popisuje problémy s tímto chováním při ukládání do mezipaměti.

Ukládání do mezipaměti můžete zakázat. Může to způsobit, že dotazy na INFORMAČNÍ SCHÉMA nebo SHOW TABLE STATUS budou o něco pomalejší, ale hádal bych, že to není horší než ve verzích MySQL před 8.0.

SET GLOBAL information_schema_stats_expiry = 0;

Hodnota celého čísla je počet sekund, po které MySQL uchovává statistiky v mezipaměti. Pokud se dotazujete na statistiky tabulky, můžete vidět staré hodnoty z mezipaměti, dokud nevyprší jejich platnost a MySQL je obnoví čtením z úložiště.

Výchozí hodnota pro vypršení platnosti mezipaměti je 86400 nebo 24 hodin. To se zdá přehnané.

Viz https://dev.mysql. com/doc/refman/8.0/en/server-system-variables.html#sysvar_information_schema_stats_expiry

Pokud si myslíte, že Wordpress píše do tabulky, pak by to mohlo být. Chcete-li to zjistit, můžete povolit binární protokol nebo protokol dotazů. Nebo jen sledujte SHOW PROCESSLIST na několik minut.

Možná máte plugin wordpress, který se často aktualizuje nebo vkládá do tabulky. Můžete se podívat na nejnovější update_time:

SELECT * FROM INFORMATION_SCHEMA.TABLES
ORDER BY UPDATE_TIME DESC LIMIT 3;

Sledujte toto a zjistěte, do kterých tabulek jsou zapsány naposledy.

Tato statistika UPDATE_TIME má výhrady. Není vždy synchronizováno s dotazy, které aktualizovaly tabulku, protože zápisy do souborů tabulkového prostoru jsou asynchronní. Přečtěte si o tom zde:https://dev.mysql. com/doc/refman/8.0/en/tables-table.html



  1. Sloučit datum z jednoho data a času z jiného data a času

  2. Cizí klíč MySQL InnoDB mezi různými databázemi

  3. Lze log4jdbc použít s pružinovou botou?

  4. Existuje nějaký způsob, jak přetypovat datový typ postgresql 9.3 tak, aby to mohlo ovlivnit pouze jednu stranu