如何对zabbix mysql做分区表

如何对zabbix mysql做分区表,第1张

关于zabbix和MySQL分区 - 支持zabbix 20和22,mysql在有外键的表不支持分区表。在zabbix 20和22中history和trend表没有使用外键,因此是可以在这些表中做分区的。

Index changes:

1如果zabbix的数据库已经有了数据,更改索引可能需要一些时间,根据具体的数据量,需要的时间长短也不一样。

2在某些版本的MySQL索引的改变会使整个表上读锁。貌似mysql 56没有这个限制。

所述第一步骤是修改几个索引以允许做分区,按照下面的命令:

mysql>

Alter table history_text drop primary key, add index (id), drop index

history_text_2, add index history_text_2 (itemid, id);

Query OK, 0 rows affected (049 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql>

Alter table history_log drop primary key, add index (id), drop index

history_log_2, add index history_log_2 (itemid, id);

Query OK, 0 rows affected (271 sec)

Records: 0 Duplicates: 0 Warnings: 0

Stored Procedures:

下面开始填写存储过程,需要执行下面的几个存储过程语句,只要能看到"Query OK, 0 rows affected (000 sec)"只能就没有什么问题了。

普通表txn转换成分区表

一 创建普通表txn

SQL> create table txn as select level as id from dual connect by level<=29;

SQL> desc txn

Name Null Type

----------------------------------------- -------- ----------------------------

ID NUMBER

二 创建表空间

SQL> create tablespace t1 datafile '/home/oracle/t1dbf' size 5M;

SQL> create tablespace t2 datafile '/home/oracle/t2dbf' size 5M;

SQL> create tablespace t3 datafile '/home/oracle/t3dbf' size 5M;

三 创建分区表,命名为txn_1

SQL> create table txn_1(id number) partition by range(id)

2 (

3 partition part1 values less than(10) tablespace t1,

4 partition part2 values less than(20) tablespace t2,

5 partition part3 values less than(30) tablespace t3

6 );

四 导出普通表数据

[oracle@ogg1 ~]$ exp chen/chen file=txndmp tables=txn

五 更改表名

SQL> rename txn to txn_old;

SQL> rename txn_1 to txn;

六 将数据导入到分区表中

[oracle@ogg1 ~]$ imp chen/chen file=txndmp fromuser=chen touser=chen ignore=y

七 查看分区表

SQL> col table_name for a10

SQL> col partition_name for a10;

SQL> select table_name,partition_name from user_tab_partitions;

TABLE_NAME PARTITION_

---------- ----------

TXN PART1

TXN PART2

TXN PART3

SQL> select from txn partition(part2);

ID

----------

10

11

12

13

14

15

16

17

18

19

10 rows selected

查询的时候按table来查,一个表的所有分区都属于table。

但每个分区都是单独的segment,如果查询限制了分区键,那么查询只落在特定的segment,而segment在底层对应的数据块是不同的,这样可以减少数据的访问。

显示分区表信息

显示数据库所有分区表的信息:DBA_PART_TABLES

显示当前用户可访问的所有分区表信息:ALL_PART_TABLES

显示当前用户所有分区表的信息:USER_PART_TABLES

显示表分区信息 显示数据库所有分区表的详细分区信息:DBA_TAB_PARTITIONS

显示当前用户可访问的所有分区表的详细分区信息:ALL_TAB_PARTITIONS

显示当前用户所有分区表的详细分区信息:USER_TAB_PARTITIONS

显示子分区信息 显示数据库所有组合分区表的子分区信息:DBA_TAB_SUBPARTITIONS

显示当前用户可访问的所有组合分区表的子分区信息:ALL_TAB_SUBPARTITIONS

显示当前用户所有组合分区表的子分区信息:USER_TAB_SUBPARTITIONS

显示分区列 显示数据库所有分区表的分区列信息:DBA_PART_KEY_COLUMNS

显示当前用户可访问的所有分区表的分区列信息:ALL_PART_KEY_COLUMNS

显示当前用户所有分区表的分区列信息:USER_PART_KEY_COLUMNS

显示子分区列 显示数据库所有分区表的子分区列信息:DBA_SUBPART_KEY_COLUMNS

显示当前用户可访问的所有分区表的子分区列信息:ALL_SUBPART_KEY_COLUMNS

显示当前用户所有分区表的子分区列信息:USER_SUBPART_KEY_COLUMNS

--------------------------------------------------------------------------------------------select from user_tables a where apartitioned='YES'

删除一个表的数据是truncate table table_name

这个要看你是什么数据库。

Oracle 或者 SQL Server 企业版本的, 可以尝试使用 分区表来处理。

如果对 分区表不熟悉, 或者不高兴折腾。

SQL Server 可以尝试使用 分区视图的方式来处理。

以上就是关于如何对zabbix mysql做分区表全部的内容,包括:如何对zabbix mysql做分区表、如何将Oracle数据库的普通表转换成分区表、oracle数据库分区表的实现原理是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9864420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存