南大通用GBase8s 常用SQL语句(八十六)

南大通用GBase8s 常用SQL语句(八十六)

对已清除的分片中的数据的处置

Rolling Window 子句提供两个关键字选项,DETACH 和 DISCARD ,用于自动主力滚动窗口表的已拆离的分片。这里对此关键字的选择没有缺省值。如果 Rolling Window 子句没有包含 DETACH 或 DISCARD 关键字则数据库服务器返回错误。

  • 使用 DETACH 将分片与数据库服务器自动创建的独立的表建立连接,且表并标识符是这种格式:

< original_table_name >_< lower value >_< higher value >

此处的 lower_value 和 higher_value 是该分片被拆离之间间隔范围的最小值和最大值。

如果表的名称已经存在,则会在 higher_value 之后附加一个数字计数,第一个附加表从 _1 开始:

< original_table_name >_< lower value >_< higher value >_1

等等等等,用 _2 附加到下一个表名称(或者如果附加 _2 不能产生一个唯一的表名称,则附加更多的整数)。

  • 使用 DISCARD 销毁已拆离的分片。

DISCARD 关键字指定删除已经成功拆离的分片,以致于当执行清除策略时,不需要的数据记录会及时移除。通过这种方法,过渡分片的数量或滚动窗口表的存储空间总量会约束到规定值。

这些配置选项旨在自动化由范围间隔分片的表的空间管理,以致于不需要的数据记录会及时移除,且存储空间被包含到规定量。丢弃数据的另一种方法是拆离分片。这提供了从不正确指定的清除策略恢复的机会,并允许将清除的分片(或者它们的数据被移动)附加到归档。

强制执行清除策略

在具有有限存储的数据库中,插入新行的 DML 或加载操作(包括插入超出现有分片的范围行)可能导致分配的存储大小或超过 Rolling Window 子句为一个或多个滚动窗口表指定的限制的间隔分片的数量。

但是,在它的界限超出的那一刻,不会立即执行 Rolling window 表的清除策略。

清除策略被设计为在移除和处理滚动窗口表表的分片的所需的 ALTER FRAGMENT DETACH 和 ALTER FRAGMENT ATTACH 操作不可能与并发用户的访问尝试冲突时作为调度任务每天强制执行。缺省情况下,清除策略会在每天本地时间 00:45 执行。有关更多信息,请参阅 GBase 8s 管理员指南 中 Scheduler 的内置 purge_tables 任务的描述。

清除策略也可以通过运行 syspurge( ) 系统函数来强制执行。在 DBA 调用此函数之后,数据库服务器检测系统目录,并标识清除策略已经超出的滚动窗口表。然后数据库服务器按照清除策略的指定丢弃或拆离、限定滚动分片直到满足清除策略,或者直到没有更多的滚动分片能移除。syspurge( ) 函数不需要参数,但是接受启用联机日志诊断的可选参数。

更改、删除或添加清除策略

可以使用 ALTER FRAGMENT 语句更改或删除滚动窗口表的清除策略。或将创建时具有其它存储选项的表更改为滚动窗口表。例如,简单地通过添加清除策略, ALTER FRAGMENT 语句的 Rolling Window 子句可将使用简单范围间隔分片的表更改为滚动窗口表。

CREATE TABLE 语句的 Rolling Window 子句支持 ALTER FRAGMENT ON TABLE . . . MODIFY INTERVAL 语句中的 Rolling Window 子句语法的子集。

如果您不满意现有滚动窗口表的清除策略。则可以使用 ALTER FRAGMENT 语句以多种方法更改此策略,包括:

  1. 更改 ROLLING FRAGMENTS 或 LIMIT TO 规范,
  2. 替换清除策略的 DETACH 或 DISCARD 关键字
  3. 使用 DISABLE 关键字选项终止清除策略
  4. 通过 ENABLE 关键字重新启用一个已终止的清除策略
  5. 移除该清除策略和滚动窗口表的滚动分片

要将滚动分布存储策略更改为简单的范围间隔分片策略,您可以为此表运行 ALTER FRAGMENT MODIFY INTERVAL DROP ALL ROLLING 语句。如果您要保留这些数据,则在做此操作之前首先归档表的非空滚动间隔分片中的行。

滚动窗口表的限制

使用 ROLLING INTERVALS 或 LIMIT TO 关键字定义滚动窗口分片策略的表,和其清除策略具有以下限制:

  1. Rolling Window 子句为滚动窗口分片定义的清除策略需要数据库服务器在满足 DETACH 或 DISCARD标准的分片上执行 ALTER FRAGMENT DETACH 操作。 具有被启用的外键约束引用主键的列的表或具有 ROWID 的表不允许 ALTER FRAGMENT DETACH 语句。出于此原因,CREATE TABLE 和 ALTER FRAGMENT MODIFY INTERVAL 语句不能在具有主键约束或 ROWID 影子列的表上定义分片清除策略。
  2. 任何定义在滚动窗口表上的索引都必须具有与滚动窗口表相同的存储分布。
  3. 只有具有 DBA 存取权限的用户才能调用实现拆离滚动分片的 DETACH 或 DISCARD 选项的例程。 具有 RESOURCE 存取权限的用户可以执行 syspurge( ) 函数,但是只能对您自己所拥有的表执行清除策略。
  4. 数据库服务器会静默地忽略高可用数据复制(HDR)集群环境中辅助服务器上任何 syspurge( ) 函数的调用。这是因为集群环境不会复制滚动窗口清除策略核心中 DETACH 和 DISCARD 选项触发的 ALTER FRAGMENT 更改。
  • 同样,在 grid 环境中,不会执行复制表行清除策略。

没有存储大小限制的滚动窗口表

以下 CREATE TABLE 语句的示例定义了一个范围间隔分片存储策略,包括把 p4 作为 NULL 分片以存储 order_date 分片键列值为 NULL 的行。因为此分片键的范围内的间隔定义为一个月,且分片过渡值是 2014 的第一天,则当具有比 2013 年晚一年内插入 order_date 值的记录时,会生成第一个间隔分片。连续的间隔分片将会以循环的形式存储在 dbspaces dbs1 、dbs2 和 dbs3 中:

CREATE TABLE orders

       (order_id INT, cust_id INT,

        order_date DATE, order_desc CHAR (1024))

   FRAGMENT BY RANGE (order_date)

   INTERVAL (NUMTOYMINTERVAL (1,'MONTH'))

      ROLLING (3 FRAGMENTS) DETACH

      STORE IN (dbs1, dbs2, dbs3)

      PARTITION p0 VALUES < DATE ('01/01/2014') IN dbs1,

      PARTITION p4 VALUES IS NULL in dbs3;

在以上示例中,Rolling Window 子句将滚动间隔分片的最大数量设置为 3 。如果在 2014 年前三个月的每一个中添加行,则在该年的三月将生成三个滚动分片,因为每个新的间隔分片仅存储一个月的数据。如果在 4 月创建了第 4 个时间间隔分片,这将超过滚动分片上的清除策略限制。由于未指定存储大小限制,因此默认的 INTERVAL FIRST 标准将拆离四个滚动分片中其 evalpos 值最小的间隔分片。该分片将附加到另一个表中,而不是销毁,因为清除策略指定 DETACH,而不是 DISCARD。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值