Optimize WordPress MySQL tables through Cron, behind the scenes

To regularly optimize my WordPress database tables, I created a small plugin that utilizes the WordPress Cron feature. This comes in handy to perform database optimization for WordPress on a regular basis, without forgetting about it. Just activate and enjoy. And here is the plugin code …

Saotn MySQL Database Optimizer #

Keeping your WordPress MySQL database optimized is a must for a fast performing website. Every post, draft, revision and comment adds data to your database, and removing revisions, drafts and comments creates empty space between data. This makes your database huger and fragmented.

Speaking of post revisions, did you know you can easily delete old WordPress post revisions?

Defragmenting the data puts all data back in order, removing empty spaces and results in a smaller database. The defragmented database performs faster because MySQL will be able locate information much faster.

You can use this as a must-use plugin by placing the file in the wp-content/mu-plugins directory, or as a regular plugin in wp-content/plugins (create a folder saotn-optimizer yourself), which you then must activate through the WordPress Dashboard.

You are free to use, change and customize the plugin code. I’ve based it off Pressjitsu’s transient cleaner plugin. All the plugin does is executing an OPTIMIZE TABLE statement for every table in your WordPress MySQL database on a daily or weekly basis (yours to choose).

<?php
/**
 * Plugin Name: Saotn Database Table Optimizer
 * Plugin URI: https://www.saotn.org
 * Donate Link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=J24FGGU96YSUY
 * Description: Optimizes WordPress database behind the scenes by executing an OPTIMIZE TABLE statement on all MySQL tables, 'daily' or 'hourly'.
 * Version: 1.0.2
 * Author: Jan Reilink
 * Author URI: https://www.saotn.org
 * License: GPLv2
 */

class Saotn_Db_Optimize_Tables_Cron {
  public static function load() {
    add_action( 'init', array( __CLASS__, 'schedule_events' ) );
  }

  /**
   * Schedule cron events, runs during init.
   */
  public static function schedule_events() {
    if ( ! wp_next_scheduled( 'saotn_db_optimize_tables_cron' ) )
      // wp_schedule_event( time(), 'daily', 'saotn_db_optimize_tables_cron' );
      wp_schedule_event( time(), 'hourly', 'saotn_db_optimize_tables_cron' );
      add_action( 'saotn_db_optimize_tables_cron', array( __CLASS__, 'optimize_tables' ) );
  }

  public static function optimize_tables() {
    global $wpdb;
    $bDebug = TRUE;
    $tables = $wpdb->get_col( "SHOW TABLES" );
    foreach ( $tables as $table ) {
      if ( $wpdb->query( "OPTIMIZE TABLE $table" ) !== FALSE ) {
        if ( $bDebug ) {
          error_log( "Saotn_Db_Optimizer ran successfully on $table" );
        }
      }
    }
  }
}

Saotn_Db_Optimize_Tables_Cron::load();

Use a plugin like Advanced Cron Manager to verify this database optimization WordPress Cron.

I thought you might find this interesting:   How to: Test MySQL database connectivity in ASP.NET, PHP, ASP

Saotn Optimizer on GitHub as Gist, and local download #

You can find the Gist here on GitHub:
https://gist.github.com/Digiover/b3d33495ba1a400a84068120eb8addbc, or as a text file on Saotn: wp-database-tables-optimizer.txt (rename .txt to .php).

Optimize WordPress database alternatives #

Two alternatives for my very basic plugin are WP Sweep and WP Optimize.


Please Support Saotn.org

Each post on Sysadmins of the North takes a significant amount of time to research, write, and edit. Therefore, your donation helps a lot! For example, a donation of $3 U.S. buys me a cup of coffee, and as you know: things jsut work better with coffee. A $10 U.S. donation buys me one month of web hosting (yes, hosting costs money). But seriously, thank you for any amount. Much appreciated!

Please donate to support this site if you found a post interesting or if it helped you solve a problem. Thanks! (Tip: no Paypal account required)

If you appreciated this post, then please donate using this Paypal button


Jan Reilink

My name is Jan. I am not a hacker, coder, developer, programmer or guru. I am merely a system administrator, doing my daily thing at Vevida in the Netherlands. With over 15 years of experience, my specialties include Windows Server, IIS, Linux (CentOS, Debian), security, PHP, websites & optimization.

Leave a Reply

5 Comments on "Optimize WordPress MySQL tables through Cron, behind the scenes"

Hi! Join the discussion, leave a reply!

Sort by:   newest | oldest | most voted
Muhammad Arslan
Guest

Looks cool. I would give it a try and give you my feedback.

Jean
Guest

Great tutorial. I recently tried using MySQLtunner which is a Perl script for MySQL performance analysis and tuning. It is working perfectly for me.

Source: https://www.rosehosting.com/blog/install-and-use-mysqltuner-on-ubuntu-14-04/

Ediong
Guest