All pastes #795192 Raw Edit

Miscellany

public text v1 · immutable
#795192 ·published 2007-11-23 22:07 UTC
rendered paste body
CREATE DATABASE admin;
USE admin;

DROP TABLE IF EXISTS schema_stats_history;
CREATE TABLE admin.schema_stats_history (
  id INT AUTO_INCREMENT PRIMARY KEY,
  table_schema VARCHAR(64),
  table_name VARCHAR(64),
  stats_collected DATETIME,
  KEY (table_schema, table_name) 
) ENGINE = MyISAM;

DELIMITER //
DROP PROCEDURE gather_schema_stats//
CREATE DEFINER = root@localhost PROCEDURE gather_schema_stats(IN schema_name VARCHAR(64))
  READS SQL DATA
  SQL SECURITY INVOKER
BEGIN
  DECLARE done BOOL DEFAULT FALSE;
  DECLARE v_schema, v_table VARCHAR(64);
  DECLARE c_tables CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = schema_name;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
  
  SET v_schema = schema_name;
  OPEN c_tables;
  
  analyzeTables:LOOP
    FETCH c_tables INTO v_table;

    IF done THEN
      CLOSE c_tables;
      LEAVE analyzeTables;
    END IF;

    SET @analyzeStmt:=CONCAT('ANALYZE TABLE ',v_schema,'.',v_table);
    PREPARE stmt FROM @analyzeStmt;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

    INSERT INTO schema_stats_history VALUES (NULL,v_schema, v_table, NOW());

  END LOOP;
END;
//
DELIMITER ;

SET @schema:='test';
CALL gather_schema_stats(@schema);
SELECT * FROM admin.schema_stats_history;