Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

MDL-39725 database: Add statistics collection functions

Conflicts:
	lib/dml/moodle_database.php
  • Loading branch information...
commit bd8dbfdbc31a0b04038b105919a916d3ccdf9307 1 parent 21bb4f1
@mr-russ mr-russ authored samhemelryk committed
View
9 lib/dml/moodle_database.php
@@ -2173,6 +2173,15 @@ public function replace_all_text($table, database_column_info $column, $search,
}
/**
+ * 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.
*
* It is not responsible to run productions servers
View
15 lib/dml/moodle_temptables.php
@@ -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
@@ -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
@@ -120,6 +118,17 @@ public function get_correct_name($tablename) {
}
/**
+ * 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
*/
public function dispose() {
View
13 lib/dml/pgsql_native_moodle_temptables.php
@@ -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 bd8dbfd

Please sign in to comment.
Something went wrong with that request. Please try again.