关于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数据库分区表的实现原理是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)