Database-onderhoud

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Net als toendertijd met Microsoft Access, kent MySQL zoiets als database-onderhoud. Dat begint met een handjevol standaard SQL-commando's, maar kan ongetwijfeld ook geavanceerder. WordPress heeft hier een plugin voor: WP-DBManager. Goede kans dat er meer van dit soort plugins bestaan.

Dit artikel behandelt voornamelijk databases en tabellen in InnoDB-formaat.

Voor enige achtergrondinformatie, zie https://www.laurencegellert.com/2011/07/mysql-maintenance-tasks-for-innodb-with-mysql-5-1/

Overzicht

Waar moet je aan denken rondom database-onderhoud?

  • Check table integrity for errors
  • Optimize tables
  • Analyze???

CHECK TABLE statement

Het MySQL statement CHECK TABLE verifiëert en repareert tabellen. Ik heb de indruk dat het hetzelfde doet als het vergelijkbare mysqlcheck-commando, maar dan één tabel per keer.

Syntaxis

CHECK TABLE tbl_name [, tbl_name]... [option]...

option:
{
   FOR UPGRADE
   CHANGED       # Ignored for InnoDB
   EXTENDED      # Ignored for InnoDB
   FAST          # Ignored for InnoDB
   MEDIUM        # Ignored for InnoDB
   QUICK         # Both for MyISAM & InnoDB
}

Voorbeeld bal_dwh_org

Toegepast op database bal_dwh_org (die ik net daarvoor al had onderhouden via mysqlcheck) op een tabel met 100.000 rijen :

check table ean fast quick;
check table ean extended;

Executie was vrijwel instantaan. Output was twee keer zoiets als dit:

Table             Op      Msg_type   Msg_text
bal_dwh_org.ean   check   status     OK

mysqlcheck

mysqlcheck is een command-line routine voor db-onderhoud. Voorbeeld met een WordPress-db:

--check

$ mysqlcheck --check knl

knl.wp_actionscheduler_actions                     OK
knl.wp_actionscheduler_claims                      OK
knl.wp_actionscheduler_groups                      OK
knl.wp_actionscheduler_logs                        OK
knl.wp_aws_cache                                   OK
...
knl.wp_yoast_primary_term                          OK
knl.wp_yoast_seo_links                             OK
knl.wp_yoast_seo_meta                              OK

In dec. 2021 heb ik dit toegepast op uitgebreide databases die ik al jaren gebruik zonder enig onderhoud (bal_dwh_org), en ik kreeg zonder uitzondering alleen maar OK. Misschien heb ik nog nooit een écht gecrashte db meegemaakt.

--optimize

$ mysqlcheck --optimize knl

knl.wp_actionscheduler_actions
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
knl.wp_actionscheduler_claims
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
...
knl.wp_wptc_current_process                        OK
...
knl.wp_yoast_seo_meta
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
  • Tabel wp_wtc_curren_process bleek als enige van het type MyISAM te zijn. Dat was daarom de enige database die gewoon geoptimaliseerd kon worden. Blijkbaar werkt dit niet voor InnoDB
  • Executie kostte een paar minuten voor een WordPress-db
  • Voor bal_dwh_org duurde dit ook een paar minuten.

--analyze

Met dezelfde WordPress-db als hiervoor:

$ mysqlcheck --analyze knl

knl.wp_actionscheduler_actions                     OK
knl.wp_actionscheduler_claims                      OK
knl.wp_actionscheduler_groups                      OK
...
knl.wp_wptc_current_process                        Table is already up to date
...
knl.wp_yoast_seo_meta                              OK

Executie is een kwestie van secondes, ook voor bal_dwh_org.

WordPress WP-DBManager-plugin

Er bestaan plugins voor database-onderhoud, wo. WP-DBManager. Deze plugin is trouwens niet getest voor de laatste 3 majeur-updates van WordPress (dec. 2021)

Zie ook

Bronnen