暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 全局分区索引或全局索引

askTom 2017-03-23
608

问题描述

嗨,

我希望您对哪种类型的主键索引适合我们的消息队列表发表意见。是使用串联列的全局分区索引还是在单个唯一列上使用全局索引 (值基于单调增加的Oracle sequence对象数)。

我们有一个消息队列表,它是按队列类型划分的列表,并按偶数或奇数月 (两个子分区) 划分的子分区 (列表)。每个队列类型都被分配其拥有的ASSM表空间。目前,我们共有十种队列类型,但将来可能会添加其他队列类型。在任何给定的一天,多个进程将在任何给定的时间每个队列类型插入多达数十万条记录,并且多个批处理进程将同时消耗这些队列。因此,队列消息被大量插入和删除到此表中。
message_id基于Oracle序列,并且无论队列类型如何都是唯一的。我的问题是,在我们操作的情况下,哪种类型的主键索引最适合这种表?我们应该使用基于队列类型sub_partition_key message_id的串联的全局分区索引还是仅在message_id上使用单列全局索引?您如何衡量 (哪些绩效指标) 哪个指数表现更好?

我们在表上的所有sql (选择和删除) 都将包含使用列的谓词条件: 队列类型子分区密钥消息id (包含在删除sql中,但不包含在条件中,当队列消息由多个批处理过程批量检索以进行处理时。

message_q表的示例 (不是完整的DDL)。
消息 _ q
(
信息 _ 身份证号码,
队列 _ 类型VARCHAR2(30),
CREATED_TS时间戳 (6),
状态VARCHAR2(10),
PAYLOAD_VCAR VARCHAR2(4000),
PAYLOAD_CLOB CLOB,
SUB_PARTITION_KEY VARCHAR2(2) 始终生成为 (TO_CHAR(MOD(TO_NUMBER(TO_CHAR (“CREATED_TS”,'MM')),2)
)
LOB (PAYLOAD_CLOB) 存储为安全文件MSG_Q_CLOB (
表空间MSG_Q_CLOB
表空间MSG_Q_TS
分区按列表 (队列类型)
按列表细分 (子分区键)
....
.....
....
...

专家解答

因此,请处理您的语句,即 * 每个 * 查询操作将指定一个queue_type。如果您准备对主键的定义有所妥协,则可以将其设置为本地索引,例如

SQL> create table t ( qt varchar2(10), mm int, id int , y int , z int)
  2  partition by list (qt )
  3  subpartition by list (mm )
  4  subpartition template
  5   ( subpartition s1 values (0),
  6     subpartition s2 values (1)
  7   )
  8  (
  9    partition p1 values ('A'),
 10    partition p2 values ('B'),
 11    partition p3 values ('C')
 12  );

Table created.

SQL>
SQL> insert into t select 'A', mod(rownum,2), rownum, rownum, rownum from dual connect by level <= 20;

20 rows created.

SQL> insert into t select 'B', mod(rownum,2), rownum, rownum, rownum from dual connect by level <= 20;

20 rows created.

SQL> insert into t select 'C', mod(rownum,2), rownum, rownum, rownum from dual connect by level <= 20;

20 rows created.

SQL>
SQL> alter table t add constraint pk primary key ( qt,mm,id ) using index local;

Table altered.
复制


在该定义中,您可以根据查询需求交换 'id' 和 'mm',而不会抑制其成为主键的能力。

这给出了一个很好的小分区索引,但是你想对 “领先” 分区进行基准测试,即,对于给定的队列类型,你是否对 “当前” 分区有太多的争用。如果这样做,则本地索引可能无法完成任务。

在这种情况下,您将查看通过散列对主键进行全局分区以分散插入负载,而仅依靠分区修剪来按队列类型拾取消息。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论