TSContainerCreate 过程创建用于为指定的 TimeSeries 子类型存储时间系列数据的容器。可以在一个数据库空间中创建容器,创建跨多个分区的容器,或创建滚动窗口容器,以用于控制存储的数据量。
仅具有 TSContainerTable 表的更新特权的用户可以运行此过程。
只有具有对 TSContainerTable 表和 TSContainerWindowTable 的更新特权的用户才能运行此过程。
滚动窗口容器是一种特殊类型的容器,需要更多参数。
请参阅 滚动窗口容器的语法。使用滚动窗口容器语法可创建跨多个分区的容器。
语法
TSContainerCreate(container_name varchar(18,1)varchar(128,1),
dbspace_name varchar(128,1),
ts_type varchar(18,1)varchar(128,1),
container_size integer,
container_grow integer);
- container_name
- 新容器的名称。容器名称必须是唯一的。
- dbspace_name
- 保留容器的数据库空间的名称。
- ts_type
- 存储在容器中的 TimeSeries 子类型的名称。此自变量必须是以时间戳记开始的现有行类型的名称。
- container_size
- 容器的第一个扩展数据块大小(以 KB 为单位)。
- 该值必须至少等于 4 页。如果指定 0 或负数,将使用 16 KB。容器的最大大小取决于页面大小:
- 对于 2 KB 页面,最大大小为 32 GB。
- 对于 4 KB 页面,最大大小为 64 GB。
- 对于 8 KB 页面,最大大小为 128 GB。
- 对于 16 KB 页面,最大大小为 256 GB。
- container_grow
- 容器增长的增量(以 KB 计)。该值必须至少等于 4 页。如果指定 0 或负数,将使用 16 KB。
用法
缺省情况下,当将数据插入到时间系列时,会根据需要自动创建容器。然而,您可以通过使用 TSContainerCreate 过程来创建更多容器。
执行 TSContainerCreate 过程后,数据库服务器会在第一个时间系列插入到容器时创建该容器。您可以在相同数据库空间中创建多个容器。
创建容器时,将在 TSContainerTable 表中插入一行。
示例
以下示例在空间
rootdbs 中为时间系列类型
stock_bar 创建名为
new_cont 的容器:
execute procedure TSContainerCreate('new_cont', 'rootdbs','stock_bar', 0, 0);
滚动窗口容器的语法
TSContainerCreate(container_name varchar(128,1),
dbspace_name varchar(128,1),
ts_type varchar(128,1),
container_size integer,
container_grow integer,
window_origin datetime year to fraction(5));
TSContainerCreate(container_name varchar(128,1),
dbspace_name varchar(128,1),
ts_type varchar(128,1),
container_size integer,
container_grow integer,
window_origin datetime year to fraction(5),
window_interval lvarchar default 'month',
active_windowsize integer default 0,
dormant_windowsize integer default 0,
window_spaces lvarchar(4096) default null,
window_control integer default 0,
rwi_firstextsize integer default 16,
rwi_nextextsize integer default 16);
- container_name
- 新容器的名称。容器名称必须是唯一的。
- dbspace_name
- 包含容器分区的数据库空间的名称。如果未使用 window_spaces 参数指定其他数据库空间,那么此数据库空间还会包含时间系列元素的分区。
- ts_type
- 容器存储的 TimeSeries 子类型的名称。此自变量必须是以时间戳记开始的现有行类型的名称。
- container_size
- 分区的第一个扩展数据块大小(以 KB 为单位)。
- 该值必须至少等于 4 页。如果指定 0 或负数,将使用 16 KB。分区的最大大小取决于页面大小:
- 对于 2 KB 页面,最大大小为 32 GB。
- 对于 4 KB 页面,最大大小为 64 GB。
- 对于 8 KB 页面,最大大小为 128 GB。
- 对于 16 KB 页面,最大大小为 256 GB。
- container_grow
- 分区的下一个扩展数据块大小(以 KB 为单位)。该值必须至少等于 4 页。如果指定 0 或负数,将使用 16 KB。
- window_origin
- 允许用于滚动窗口容器的第一个时间戳记。
如果时间系列的原点早于容器的原点,滚动窗口容器会拒绝时间系列值。
- window_interval
- 每个分区中存储其数据的时间范围。
缺省情况下,窗口时间间隔为一个月,这意味着每个窗口分区包含一个日历月的数据。可能的值包括:
- day = 分区包含一天的数据。容器使用 ts_1day 日历。
- week = 分区包含一周的数据。容器使用 ts_1week 日历。
- month = 缺省值。分区包含一个日历月的数据。容器使用 ts_1month 日历。
- year = 分区包含一个日历年的数据。容器使用 ts_1year 日历。
- active_windowsize
- 活动窗口中的最大分区数:
- 0 = 缺省值。无大小限制。
- 正整数 = 活动窗口中的最大分区数。
- dormant_windowsize
- 休眠窗口中的最大分区数:
- 0 = 缺省值。无大小限制。
- 正整数 = 休眠窗口中的最大分区数。使用等于或大于活动窗口大小的值开始。
- window_spaces
- 用于存储分区的数据库空间:
- NULL = 缺省值。分区在 dbspace_name 参数指定的数据库空间中创建。
- 数据库空间名称的逗号分隔列表 = 分区按循环顺序在列出的数据库空间中创建。
此列表不能包含临时数据库空间或智能大对象空间。
- window_control
- 一种标志,用于指示手动或自动分离活动分区时如何处理这些分区:
- 0 = 缺省值。不会自动销毁无法放入休眠窗口中的分区。如果活动和休眠窗口已满,那么只有在销毁某个休眠分区之后,才能添加分区。
- 1 = 将自动销毁无法放入休眠窗口中的分区。请谨慎使用此设置。销毁的数据无法恢复。
销毁分区时,将删除该分区中存储的数据。
- rwi_firstextsize
- 容器分区的第一个扩展数据块大小(以 KB 为单位)。缺省大小为 16 KB。
- rwi_nextextsize
- 容器分区的下一个扩展数据块大小(以 KB 为单位)。缺省大小为 16 KB。
滚动窗口容器的用法
滚动窗口容器用于存储有关窗口属性的信息以及有关分区的信息。分区用于存储特定日期范围的时间系列数据。TSContainerCreate 过程完成时,将创建滚动窗口容器。分区在插入时间系列元素时根据需要创建。
要创建滚动窗口容器以在多个数据库空间中存储数据并自动删除旧数据,请将以下参数设置为非缺省值:
- active_windowsize:设置为正值以限制活动窗口的大小。
- dormant_windowsize:设置为正值以限制休眠窗口的大小。
- window_control:设置为 1 以自动销毁休眠窗口中过旧的分区。
- window_spaces:设置为数据库空间列表。
如果对活动窗口使用缺省大小 0,那么创建的容器将增长至您手动将分区分离到休眠窗口并手动销毁休眠窗口中的分区为止。
容器分区以及活动和休眠窗口中的分区需要的存储空间量可能差别很大。请仔细规划滚动窗口容器的存储量。
创建滚动窗口容器时,将在 TSContainerTable 和 TSContainerWindowTable 表中插入一行。为时间系列数据添加分区后,将向 TSContainerUsageActiveWindowVTI 和 TSContainerUsageDormantWindowVTI 表添加行。
示例 1:创建滚动窗口容器
以下示例创建滚动窗口容器:
execute procedure TSContainerCreate('readings_container',
'containerdbs', 'rt_raw_intvl', 25600, 12800,
'2011-01-01 00:00:00.00000'::datetime year to fraction(5),
'month', 4, 10, 'dbs0, dbs1, dbs2, dbs3, dbs4', 1, 16, 8);
本示例配置具有以下属性的滚动窗口容器:
- 窗口名称为 readings_container。
- 容器分区的数据库空间命名为 containerdbs。
- 时间系列的名称为 rt_raw_intvl。
- 分区的第一个扩展数据块大小为 25600 KB。
- 分区的下一个扩展数据块大小为 12800 KB。
- 活动窗口最多包含 4 个分区。
- 休眠窗口最多包含 10 个分区。
- 容器的原点为 2011-01-01 00:00:00.00000。
- 每个分区保留一个月的数据。
- 分区的数据库空间分别命名为 dbs0、dbs1、dbs2、dbs3 和 dbs4。
- 无法再放入休眠窗口中的分区将自动销毁。
- 数据库空间 containerdbs 的第一个扩展数据块大小为 16 KB。
- 数据库空间 containerdbs 的下一个扩展数据块大小为 8 KB。
示例 2:创建包含多个数据库空间的容器
以下示例创建的容器用于在多个数据库空间中存储数据,但不使用清除策略:
execute procedure TSContainerCreate('readings_container',
'containerdbs', 'rt_raw_intvl', 25600, 12800,
'2011-01-01 00:00:00.00000'::datetime year to fraction(5),
'month', 0, 0, 'dbs0, dbs1, dbs2, dbs3, dbs4', 0, 16, 8);
本示例配置具有以下属性的容器:
- 窗口名称为 readings_container。
- 容器分区的数据库空间命名为 containerdbs。
- 时间系列的名称为 rt_raw_intvl。
- 分区的第一个扩展数据块大小为 25600 KB。
- 分区的下一个扩展数据块大小为 12800 KB。
- 活动窗口的大小不限。
- 休眠窗口的大小不限。
- 容器的原点为 2011-01-01 00:00:00.00000。
- 每个分区保留一个月的数据。
- 分区的数据库空间分别命名为 dbs0、dbs1、dbs2、dbs3 和 dbs4。
- 分区不会自动销毁。
- 数据库空间 containerdbs 的第一个扩展数据块大小为 16 KB。
- 数据库空间 containerdbs 的下一个扩展数据块大小为 8 KB。
容器在分区的五个数据库空间之一的分区中存储每个月的数据。由于活动窗口的大小不限,因此所有分区在将其手动分离并销毁之前都处于活动状态。