【发布时间】:2018-04-07 20:22:11
【问题描述】:
Zabbix 数据库中有一个名为 history 的表,我已经在这个表上创建了分区。
分区类型为范围,列类型为UNIX_TYPESTAMP。
更改日期后zabbix服务不会向相关分区插入数据。
有什么问题?
我如何显示所有分区? 请问如何将数据写入相关分区?
分区创建语句示例;
.
.
.
ALTER TABLE zabbix.history_test PARTITION BY RANGE(clock)(PARTITION
p28082021 VALUES LESS THAN(UNIX_TIMESTAMP("2021-08-28 00:00:00"
))ENGINE=InnoDB);
服务器版本:10.1.31-MariaDB MariaDB 服务器
EXPLAIN PARTITIONS SELECT * FROM zabbix.history;
+------+-------------+---------+------------+------+---------------+------
| id | select_type | table | partitions | type | possible_keys | key |
key_len | ref | rows | Extra |
| 1 | SIMPLE | history | p28082021 | ALL | NULL | NULL
| NULL | NULL | 18956757 | |
SELECT DISTINCT PARTITION_EXPRESSION FROM
INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='history' AND
TABLE_SCHEMA='zabbix';
+----------------------+
| PARTITION_EXPRESSION |
+----------------------+
| clock |
+----------------------+
MariaDB [(none)]> SELECT PARTITION_ORDINAL_POSITION, TABLE_ROWS, PARTITION_METHOD
FROM information_schema.PARTITIONS
WHERE TABLE_SCHEMA = 'zabbix' AND TABLE_NAME = 'history';
+----------------------------+------------+------------------+
| PARTITION_ORDINAL_POSITION | TABLE_ROWS | PARTITION_METHOD |
+----------------------------+------------+------------------+
| 1 | 18851132 | RANGE |
+----------------------------+------------+------------------+
SELECT FROM_UNIXTIME(MAX(clock)) FROM zabbix.history;
+---------------------------+
| FROM_UNIXTIME(MAX(clock)) |
+---------------------------+
| 2018-04-07 23:06:06 |
+---------------------------+
SELECT FROM_UNIXTIME(MIN(clock)) FROM zabbix.history;
+---------------------------+
| FROM_UNIXTIME(MIN(clock)) |
+---------------------------+
| 2018-04-06 01:06:23 |
+---------------------------+
【问题讨论】:
-
这似乎是一个有点模糊和宽泛的问题,涵盖了分区的各种操作。另外,您所说的“日期已更改”到底是什么意思?
-
为什么要
PARTITION?有任何好处的情况很少。 -
历史表变得越来越大,我们无法管理,但是通过分区我正在删除旧分区,所以这有助于我将旧数据保留在历史表中。如果没有分区,我会截断历史表。
标签: database mariadb partitioning zabbix