使用调度器的Mysql动态表分区维护程序
我创建了一个下表分区维护过程 正在处理分区表的unixtime日期列…但它不会为创建新分区 非分区表 当我调试这个过程时,我找到了分区描述的原因 对于非分区/新表显示null使用调度器的Mysql动态表分区维护程序,mysql,stored-procedures,mysql-workbench,partitioning,Mysql,Stored Procedures,Mysql Workbench,Partitioning,我创建了一个下表分区维护过程 正在处理分区表的unixtime日期列…但它不会为创建新分区 非分区表 当我调试这个过程时,我找到了分区描述的原因 对于非分区/新表显示null DELIMITER $$ CREATE DEFINER=`developer`@`%` PROCEDURE `ankit_UpdatePartitions`(dbname varchar(100), tblname varchar(100), today_date DATE, add_week INT) BEGIN
DELIMITER $$
CREATE DEFINER=`developer`@`%` PROCEDURE `ankit_UpdatePartitions`(dbname varchar(100),
tblname varchar(100), today_date DATE, add_week INT)
BEGIN
DECLARE max_date date;
DECLARE droppart_sql date;
DECLARE new_date date;
-- max partititon date
-- SELECT STR_TO_DATE(MAX(from_unixtime(PARTITION_DESCRIPTION)), '''%Y-%m-%d''')
SELECT MAX(date(from_unixtime(PARTITION_DESCRIPTION)))
INTO max_date
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME=tblname AND TABLE_SCHEMA=dbname;
-- create partitions for next future week
if (max_date < today_date +INTERVAL add_week week)
Then
SET new_date := max_date + INTERVAL 1 DAY;
SET @partition_query := CONCAT('ALTER TABLE ', tblname, ' ADD PARTITION
(
PARTITION p',CAST(((new_date - INTERVAL 1 DAY)+0) as char(8)),
' VALUES LESS THAN (', unix_timestamp(new_date) , ')
);'
);
PREPARE stmt FROM @partition_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- SELECT STR_TO_DATE(MAX(PARTITION_DESCRIPTION), '''%Y-%m-%d''')
SELECT MAX(date(from_unixtime(PARTITION_DESCRIPTION)))
INTO max_date
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME=tblname
AND TABLE_SCHEMA=dbname;
SET max_date := new_date;
END if;
END
我应该在代码中更新什么来为非分区和已分区表创建新的动态分区。不明智。您应该有意地将分区添加到任何新表中—分区表并不总是明智的,以相同的方式对它们进行分区也不总是明智的。添加分区是有风险的—如果脚本未能在应该的时候运行,它似乎已经将数据放在了错误的分区中。请参阅中关于使用重组的讨论。不明智。您应该有意地将分区添加到任何新表中—分区表并不总是明智的,以相同的方式对它们进行分区也不总是明智的。添加分区是有风险的—如果脚本未能在应该的时候运行,它似乎已经将数据放在了错误的分区中。请参阅中关于使用重组的讨论。