【问题标题】:Mariadb ParititioningMariadb 分区
【发布时间】: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


【解决方案1】:

本文档帮助我在时钟列上创建分区。 有存储过程,创建分区的,你可以看看。

https://www.zabbix.org/wiki/Docs/howto/mysql_partition

【讨论】:

  • 你生成了多少个分区? (超过 50 个可能效率低下。)您是否有一个分区为 LESS THAN MAXVALUE? (拥有这样的人通常是明智的。)
  • 是的,我确实有小于最大值,请解释为什么超过 50 是低效的我已经创建了 150
  • 有打开所有分区的情况; 150会很多。 (MySQL 8.0 可能运行效率更高。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
相关资源
最近更新 更多