返回首页

gbase数据、南大通用产品文档:GBase8sSTACKSIZE 配置参数

更新日期:2024年09月11日

使用 STACKSIZE 配置参数来指定数据库服务器用户线程的堆栈大小。
onconfig.std 值
STACKSIZE 32,32 位数据库服务器
STACKSIZE 64,64 位数据库服务器

32 至由数据库服务器配置和可用内存量确定的限度
单位
KB
生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。
用法
STACKSIZE 的值没有上限,但设置过大的值会浪费虚拟内存空间并可导致交换空间问题。
对于 32 位平台,
对非递归的数据库活动而言,
32
KB 的缺省 STACKSIZE 值足够。
对于 64
位平台,推荐的 STACKSIZE 值是 64
KB。当数据库服务器执行递归的数据库任务时,例如
在一些 SPL 例程中,数据库服务器检查堆栈大小溢出的可能性并自动地扩展堆栈。
用户线程执行用户定义的例程。
要增加一个特定例程的堆栈大小,
请在 CREATE
FUNCTION 语
句上使用 stack 修饰符。
警告: 设置 STACKSIZE 的值过低可导致堆栈溢出,虽未定义其结果,但其结果通常是不
好的。

使用 SET INDEXES 语句来启用或禁用用户定义的索引,或更改唯一索引的过滤
模式。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1048
此语句是对 SQL 的 ANSI/ISO 标准的扩展。
语法

元素
描述
限制
语法
index 要启用、禁用或更改它的过滤模式的索引 必须存在 标识符
table
要全部启用、禁用或更改其索引的过滤模
式的表
必须存在 标识符
用法
您可使用此语句来启用或禁用特定的索引或索引的列表。您还可使用 table 选项
来在未指定其单个标识符的表上启用或禁用所有用户定义的索引。例如,以下两
个示例分别地禁用和启用 cust_calls 表上的所有索引:
SET INDEXES FOR cust_calls DISABLED;
SET INDEXES FOR cust_calls ENABLED;
在您打算 LOAD 或 TRUNCATE 表中的所有数据,或合并表中的空闲空间的地
方,此简单的语法可便于操作。
显式定义的索引和隐式定义的索引
SET INDEXES 语句对 CREATE INDEX 语句显式地创建的索引进行操作。然
而,这对 PRIMARY KEY 或 FOREIGN KEY 约束定义显式地创建的系统定义的
索引不起作用。SET INDEXES 语句不可指定以空格(ASCII 32)字符开头的系统
生成的名称,即使您的数据库有 DELIMIDENT 环境变量设置来支持双引号作为
数据库对象标识符的定界符。
要启用或禁用隐式定义的索引,请改为使用 SET CONSTRAINTS 语句,其 FOR
table 选项可隐式地引用系统生成的约束,如下例中所示:
SET CONSTRAINTS FOR cust_calls DISABLED;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1049
SET CONSTRAINTS FOR cust_calls ENABLED;
要禁用表的所有显式定义的索引和隐式定义的索引,请同时使用 SET INDEXES
和 SET CONSTRAINTS 语句的 FOR table 选项,如下例中所示:
SET INDEXES FOR cust_calls DISABLED;
SET CONSTRAINTS FOR cust_calls DISABLED;
通过将上例中的 DISABLED 替换为 ENABLED ,您可类似地启用表的所有显式定义
的索引和隐式定义的索引,而不引用隐式定义的索引的系统生成的名称。
SET INDEXES 语句是 SET Database Object Mode 语句的一个特例。SET Database
Object Mode 语句还可启用或禁用触发器或约束,或可更改约束和唯一索引的过滤
模式。
要获取 SET INDEXES 语句的完整语法和语义,请参阅 SET Database Object
Mode 语句。
请不要将 SET INDEXES 语句与 SET INDEX 语句混淆。在当前版本中, GBase
8s 数据库服务器不理会 SET INDEX 语句。
辅助服务器上的限制
在集群环境中,在可更新的辅助服务器上不支持 SET INDEXES 语句。(一般地
说,SET Database Object Mode 语句指定的会话级索引、触发器和约束模式不被重
新指向辅助服务器的数据库中的表对象上的 UPDATE 操作。)

使用间隔函数从包含表示 INTERVAL 限定符中的时间单位和分隔符的数字和字
符串的参数中返回 INTERVAL 值。这些函数在定义或修改索引和表的范围间隔
分布式存储策略的 CREATE TABLE 、CREATE INDEX 和 ALTER FRAGMENT
语句中非常有用。
间隔函数将数字或字符串转换为 INTERVAL DAY TO SECOND 或 INTERVAL
YEAR TO MONTH 字面值,或第二个参数中指定的时间单位的有效精度。然而,
这些函数不支持 FRACTION 或 .FRACTION 作为它们的第二个参数中的最后一
个时间单位。
TO_DSINTERVAL 函数
TO_DSINTERVAL 函数将表示时间单位的字符串转换为 INTERVAL DAY TO
SECOND 字符值。此函数还可以接受数字和字符串作为其参数,并以单个时间单
位精度 DAY 、HOUR 、MINUTE 或 SECOND 返回 INTERVAL 值。
当您定义范围间隔存储分配策略以分片表或索引时,您可以使用单个参数(或两
个参数,其同义词 NUMTODSINTERVAL)的 TO_DSINTERVAL 函数来指定间
隔范围值。
语法
数字转换为 INTERVAL

字符串转换为 INTERVAL

元素
描述
限制
语法
DD
一位或两位数指定间隔
中的天数
必须是下列其中之一的数
据类型:
字符串

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1696

CHAR

NCHAR

VARCHAR

NVARCHAR

LVARCHAR
HH:MM:SS
三组两位数字,用冒号
(:)符号分隔,指定间
隔中的小时数、分钟数
和秒数
必须是下列其中之一的数
据类型:

CHAR

NCHAR

VARCHAR

NVARCHAR

LVARCHAR
字符串
number
指定间隔中的天数、小
时数、分钟数或秒数的
数字。
可以是表达式,包括列
表达式,该表达式解析
(或转换)到其中一个
有效数字数据类型。
必须是下列其中之一的数
据类型:

INT

BIGINT

SMALLINT

INT8

DECIMAL

REAL

FLOAT

SERIAL

SERIAL8

BIGSERIAL
数值
用法
当您使用结果分片表或索引时,可以使用 TO_DSINTERVAL 函数指定间隔值。
TO_DSINTERVAL 函数在允许内置例程的上下文中有效。NUMTODSINTERVAL
函数与 TO_DSINTERVAL 函数相同都是用来转换数字值。
以下示例显示了 TO_DSINTERVAL 函数是如何解释不同的值:
以下示例指定一天的间隔:
TO_DSINTERVAL('1 00:00:00')
TO_DSINTERVAL(1,'DAY')
NUMTODSINTERVAL(1,'DAY')
以下示例指定一个小时的间隔:
TO_DSINTERVAL('0 01:00:00')
TO_DSINTERVAL(1,'HOUR')

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1697
NUMTODSINTERVAL(1,'HOUR')
以下示例指定一分 30 秒的间隔:
TO_DSINTERVAL('0 00:01:30')
TO_DSINTERVAL(1.5,'MINUTE')
NUMTODSINTERVAL(1.5,'MINUTE')
以下示例显示了如何使用表达式作为数字值:
TO_DSINTERVAL(10+10+100,'DAY')
TO_YMINTERVAL 函数
TO_YMINTERVAL 函数将表示时间单位的字符串转换为 INTERVAL YEAR TO
MONTH 字符值。此函数还可以接受数字和字符串作为其参数,并返回具有单位
时间单位精度 YEAR 或 MONTH 的 INTERVAL 值。
当您定义范围间隔存储分配策略以分片表或索引时,您可以使用单个参数(或两
个参数,其同义词 NUMTODSINTERVAL)的 TO_DSINTERVAL 函数来指定间
隔范围值。
语法
数字转换为 INTERVAL

字符串转换为 INTERVAL

元素
描述
限制
语法
number 间隔中的年或月的数字。
可以是表达式,该表达式
解析(或强制转型)到其
中一个有效数字数据类
型。
必须是下列其中之一的数据
类型:

INT

BIGINT

SMALLINT

INT8

DECIMAL

REAL
数字

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1698

FLOAT

SERIAL

SERIAL8

BIGSERIAL
MM
指定间隔中月数的两个数
字。连字符(-)必须在第
一个数字之前。
必须是下列其中之一的数据
类型:

CHAR

NCHAR

VARCHAR

NVARCHAR

LVARCHAR
字符串
YY
指定间隔中年数的两个数

必须是下列其中之一的数据
类型:

CHAR

NCHAR

VARCHAR

NVARCHAR

LVARCHAR
字符串
用法
当按间隔分片表或索引时,可以使用 TO_YMINTERVAL 函数指定间隔值。
TO_YMINTERVAL 函数在允许内置例程的上下文中有效。
NUMTOYMINTERVAL 函数与 TO_YMINTERVAL 函数相同都是用来转换数字
值。
示例
以下示例显示了 TO_YMINTERVAL 是如何解释不同的值的。
以下示例指定一年的间隔:
TO_YMINTERVAL('01-00')
TO_YMINTERVAL(1,'YEAR')
NUMTOYMINTERVAL(1,'YEAR')
以下示例指定一个月的间隔:
TO_YMINTERVAL('00-01')
TO_YMINTERVAL(1,'MONTH')
NUMTOYMINTERVAL(1,'MONTH')
以下示例指定一年零六个月的间隔:

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1699
TO_YMINTERVAL('01-06')
TO_YMINTERVAL(1.5,'YEAR')
NUMTOYMINTERVAL(1.5,'YEAR')
以下示例显示如何使用表达式作为数字值:
TO_YMINTERVAL(10+10+100,'YEAR')
以下示例定义了具有范围间隔分片模式的表 t2 。这里的 DATETIME 列 dt1 是
分片键,NUMTOYMINTERVAL 的返回值将间隔大小定义为 25 年。具有年份
晚于 2005 年但早于 2031 的 dt1 值的行将存储在范围分片 p1 中:
CREATE TABLE t2 (c1 int, d1 date, dt1 DATETIME YEAR TO FRACTION)
FRAGMENT BY RANGE (dt1) INTERVAL (NUMTOYMINTERVAL (25,'YEAR'))
PARTITION p1 VALUES <
DATETIME(2006-01-01 00:00:00.00000) YEAR TO FRACTION(5) IN dbs1;
如果插入一行,其中 dt1 中的 YEAR 值小于 2006 或大于 2030,那么数据库
服务器将会自动创建一个新的间隔分片,其范围大小是 25 年。有关范围间隔分
片的语法和语义的更多信息,请参阅 Interval fragment 子句。