Skip to content

Commit

Permalink
MDL-39725 database: Add statistics collection functions
Browse files Browse the repository at this point in the history
  • Loading branch information
mr-russ committed Dec 10, 2013
1 parent c36a240 commit 814c943
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 4 deletions.
9 changes: 9 additions & 0 deletions lib/dml/moodle_database.php
Expand Up @@ -2126,6 +2126,15 @@ public function sql_regex($positivematch=true) {
return '';
}

/**
* Analyze the data in temporary tables to force statistics collection after bulk data loads.
*
* @return void
*/
public function update_temp_table_stats() {
$this->temptables->update_stats();
}

/**
* Checks and returns true if transactions are supported.
*
Expand Down
15 changes: 12 additions & 3 deletions lib/dml/moodle_temptables.php
Expand Up @@ -22,6 +22,7 @@
*
* - databases not retrieving temp tables from information schema tables (mysql)
* - databases using a different name schema for temp tables (like mssql).
* - databases that don't collect planner stats for temp tables (like PgSQL).
*
* Basically it works as a simple store of created temporary tables, providing
* some simple getters/setters methods. Each database can extend it for its own
Expand All @@ -31,9 +32,6 @@
* and the sql_generator, so both are able to use its facilities, with the final goal
* of doing temporary tables support 100% cross-db and transparent within the DB API.
*
* Only drivers needing it will use this store. Neither moodle_database (abstract) or
* databases like postgres need this, because they don't lack any temp functionality.
*
* @package core_dml
* @copyright 2009 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
Expand Down Expand Up @@ -119,6 +117,17 @@ public function get_correct_name($tablename) {
return null;
}

/**
* Analyze the data in temporary tables to force statistics collection after bulk data loads.
* The database class detects all temporary tables and will automatically analyze all created tables
*
* @return void
*/
public function update_stats() {
// By default most databases do automatic on temporary tables, PgSQL does not.
// As a result, update_stats call immediately return for non-interesting database types.
}

/**
* Dispose the temptables stuff, checking for wrong situations, informing and recovering from them
*/
Expand Down
13 changes: 12 additions & 1 deletion lib/dml/pgsql_native_moodle_temptables.php
Expand Up @@ -29,5 +29,16 @@
require_once(__DIR__.'/moodle_temptables.php');

class pgsql_native_moodle_temptables extends moodle_temptables {
// I love these classes :-P
/**
* Analyze the data in temporary tables to force statistics collection after bulk data loads.
* PostgreSQL does not natively support automatic temporary table stats collection, so we do it.
*
* @return void
*/
public function update_stats() {
$temptables = $this->get_temptables();
foreach ($temptables as $temptablename) {
$this->mdb->execute("ANALYZE {".$temptablename."}");
}
}
}

0 comments on commit 814c943

Please sign in to comment.