可将服务器配置为需要更多空间时,自动添加更多存储空间。这样就可以更有效地使用空
间,并确保在必要时分配空间,同时减少空间不足错误,以及减少手动监视空间和确定哪
些存储空间将耗尽可用空间与何时耗尽空间所需的时间。
将服务器配置为自动添加空间时,
也可手动扩充空间或扩展块。
服务器扩展存储空间(数据库空间、临时数据库空间、智能大对象空间、临时智能大对象
空间或 Blob 空间)时,服务器可向该存储空间添加块。如果存储空间是非镜像的数据库
空间或临时数据库空间,服务器还可以扩展该存储空间中的块。
自动空间管理适用于参与 Enterprise Replication 的服务器或集群。要通过 Enterprise
Replication 域传播 CDR_QDATA_SBSPACE 和 CDR_DBSPACE 配置参数,请使用 cdr
define 命令。
要对空间的自动和手动管理进行配置,请运行 SQL 管理 API 命令来执行以下任务:
1. 在存储池中创建、修改和删除一个或多个条目。存储池中包含 GBase 8s 用于扩展
存储空间的可用原始设备、熟文件和目录的条目。
2. 将块标记为可扩展。
3. 修改存储空间的创建和扩展大小(可选)。
4. 更改自动添加更多空间的阈值和等待时间(可选)。
5. 配置“监视低存储量”任务的频率(可选)。
如果存储池中包含条目,也可运行 SQL 管理 API 命令来执行以下操作:
不希望等待运行自动扩充空间的任务时,手动扩充存储空间或扩展块。
通过存储池条目手动创建存储空间,并将空存储空间中的空间返还给存储池。
如果不希望服务器自动扩充空间,可将 SP_AUTOEXPAND 配置参数设置为 0,以禁用块
的自动创建或扩展。也可指定某个块不可扩展。
除了运行 SQL 管理 API 命令之外,
也可使用 OpenAdmin Tool (OAT) 图形界面对空间的
自动和手动管理进行配置,以及管理存储池条目。
提示:
在某些情况下,将数据库服务器配置为自动扩展现有存储空间后,该服务器可能不会自动
扩展 DBSPACETEMP 配置参数中列出的临时数据库空间。如果使用临时数据库空间的操
作(例如,索引构建或排序)耗尽空间,那么您将收到“空间不足”错误。
要解决此问题,必须手动向临时数据库空间添加块或者使用更大的临时数据库空间。
创建和管理存储池条目
可在存储池中添加、修改或删除条目(存储池是 GBase 8s 可在必要时用于自动向现有存
储空间添加空间的可用原始设备、熟文件或目录的集合)。
GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 215 -
存储池中的每一个条目都包含有关以下对象的信息:GBase 8s 实例可在必要时用于自动扩
展现有数据库空间、临时数据库空间、智能大对象空间、临时智能大对象空间或 Blob 空
间的目录、熟文件或原始设备。
创建存储池条目
要创建存储池条目,
请运行带 storagepool add 自变量的 admin() 或 task() 函数,
如
下所示:
EXECUTE FUNCTION task("storagepool add", "path", "begin_offset",
"total_size", "chunk size", "priority");
指定以下信息:
需要更多存储空间时服务器可使用的文件、目录或设备的路径。
GBase 8s 可开始分配空间的设备的偏移量(以 KB 计)。
此条目中 GBase 8s 可用的总空间。服务器可从该空间量中分配多个块。
可从设备、文件或目录分配的块的最小大小(以 KB 计)。可创建的最小块为
1000 K。因此,可指定的最小块大小为 1000 K。
优先级数字,从 1 到 3(1 = 高;2 = 中;3 = 低)。服务器会尝试先从高优先
级的条目分配空间,然后再从较低优先级的条目分配空间。
存储池大小和偏移量的缺省单位为 KB。但也可以按照以下示例中显示的任意方式指
定信息:
"100000"
"100000 K"
"100 MB"
"100 GB"
"100 TB"
修改存储池条目
要修改存储池条目,请运行带 storagepool modify 自变量的 admin() 或 task() 函数,
如下所示:
EXECUTE FUNCTION task("storagepool modify", "storage_pool_entry_id",
"new_total_size", "new_chunk size", "new_priority");
删除存储池条目
要删除存储池条目,请运行带 storagepool delete 自变量的 admin() 或 task() 函数,
如下所示:
EXECUTE FUNCTION task("storagepool delete", "storage_pool_entry_id");
要删除所有存储池条目,
请运行带 storagepool purge all 自变量的 admin() 或 task()
函数,如下所示:
EXECUTE FUNCTION task("storagepool purge all");
GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 216 -
要删除已满的所有存储池条目,请运行带 storagepool purge full 自变量的 admin()
或 task() 函数,如下所示:
EXECUTE FUNCTION task("storagepool purge full");
要删除有错的存储池条目,请运行带 storagepool purge errors 自变量的 admin() 或
task() 函数,如下所示:
EXECUTE FUNCTION task("storagepool purge errors");
示例
以下命令添加开始偏移量为 0,总大小为 0,初始块大小为 20 兆字节且具有高优先级的
目录,名称为 /region2/dbspaces。在该示例中,对于目录而言,只能接受偏移量为 0 和总
大小为 0 这两个条目。
EXECUTE FUNCTION task("storagepool add", "/region2/dbspaces", "0", "0", "20000",
"1");
以下命令将存储池中第 8 个条目的总大小、块大小和优先级更改为 10 千兆字节、10 兆
字节和中优先级。
EXECUTE FUNCTION task("storagepool modify", "8", "10 GB", "10000", "2");
以下命令删除条目标识为 7 的存储池条目:
EXECUTE FUNCTION task("storagepool delete", "7");
将块标记为可扩展或不可扩展
将块标记为可扩展,可以对块启用自动或手动扩展。将该标记更改为不可扩展,则可以防
止自动或手动扩展块。
如果块标记为不可扩展:
块中只有少量或没有可用空间时,服务器不能自动扩展块。(但是,如果存储池中
包含条目,那么服务器可通过向存储空间添加另一个块来扩展存储空间。)
不能手动扩展块的大小。
先决条件:可扩展块必须位于未镜像数据库空间或临时数据库空间中。
要将块标记为可扩展,请执行以下操作:
运行带 modify chunk extendable 自变量的 admin() 或 task() 函数,如下所示:
EXECUTE FUNCTION task("modify chunk extendable", "chunk number");
要将块标记为不可扩展,请执行以下操作:
运行带 modify chunk extendable off 自变量的 admin() 或 task() 函数,如下所示:
EXECUTE FUNCTION task("modify chunk extendable off", "chunk number");
以下命令指定可扩展第 12 个块:
EXECUTE FUNCTION task("modify chunk extendable", "12");
GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 217 -
修改存储空间的创建或扩展大小
通过以下方法可以控制存储池条目的使用方式:修改与扩充存储空间相关的两个不同的数
据库空间大小,即创建大小和扩展大小。
要修改存储空间的创建或扩展大小,请执行以下操作:
运行带 modify space sp_sizes 自变量的 admin() 或 task() 函数,如下所示:
EXECUTE FUNCTION task("modify space sp_sizes", "space_name",
"new_create_size", "new_extend_size");
对于:
new_create_size,请指定在指定的数据库空间、临时数据库空间、智能大对象空间、
临时智能大对象空间或 Blob 空间中创建新块时,服务器可使用的最小大小。
new_extend_size,请指定在指定的未镜像数据库空间或临时数据库空间中扩展块
时,服务器可使用的最小大小。
使用数字(KB 数)或百分比(占总空间的百分比)指定大小。
以下命令将名为 dbspace3 的空间的创建大小和扩展大小分别设置为 60 兆字节和 10 兆
字节:
EXECUTE FUNCTION task("modify space sp_sizes", "dbspace3", "60000", "10000");
以下命令将名为 logdbs 的空间的创建大小和扩展大小分别设置为 20% 和 1.5%:
EXECUTE FUNCTION task("modify space sp_sizes", "logdbs", "20", "1.5");
更改自动添加更多空间的阈值和等待时间
当存储空间已满时,GBase 8s 可以通过自动扩展或添加块来应对空间不足的情况,而您也
可以配置服务器以在存储空间变满之前扩展或添加块。
为此,可为数据库空间、临时数据库空间、智能大对象空间、临时智能大对象空间或 Blob
空间中的最小可用 KB 量指定一个阈值。
定义的阈值用于触发扩充空间的任务。
也可使用 SP_WAITTIME 配置参数指定返回空间不足错误之前,
线程等待空间扩充的最大
秒数。
要更改阈值和等待时间,请执行以下操作:
1. 将 SP_THRESHOLD 配置参数中指定的阈值的值从 0(已禁用)更改为非零值。
指定 1 到 50 的百分数或指定 1000 到块的最大大小(以 KB 计)。
2. 更改 SP_WAITTIME 配置参数的值,该配置参数指定返回空间不足错误之前,线
程等待空间扩展的最大秒数。
配置监视低存储任务的频率
GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 218 -
可更改 mon_low_storage 任务的频率,该任务定期扫描数据库空间列表,以查找低于
SP_THRESHOLD 配置参数指示的阈值的空间。 如果该任务找到了低于该阈值的空间,将
尝试扩充找到的空间,方法是扩展可扩展块,或使用存储池来添加块。
mon_low_storage 任务的缺省频率为每小时一次,但也可以配置该任务,以增加或减小运
行频率
先决条件:在 SP_THRESHOLD 配置参数中,为数据库空间、临时数据库空间、智能大对
象空间、临时智能大对象空间或 Blob 空间中的最小可用 KB 量指定一个值。
要将 mon_low_storage 任务配置为以更高或更低频率运行,请执行以下操作:
运行以下 SQL 语句,其中 minutes 是两次运行之间的分钟数:
DATABASE sysadmin;
UPDATE ph_task set tk_frequency = INTERVAL (minutes)
MINUTE TO MINUTE WHERE tk_name = “mon_low_storage”;
例如,要将任务配置为每 10 分钟运行一次,请运行以下 SQL 语句:
DATABASE sysadmin;
UPDATE ph_task set tk_frequency = INTERVAL (10) MINUTE TO MINUTE
WHERE tk_name = “mon_low_storage”;
手动扩充空间或扩展可扩展块
必要时可手动扩充空间或扩展块,而无需等待 GBase 8s 自动扩充空间或扩展块。
先决条件:
只能扩展位于未镜像数据库空间或临时数据库空间中的块。
块必须先标记为可扩展,
然后才能扩展。
否则,
必须运行带 modify chunk extendable
自变量的 admin() 或 task() 函数来指定该块可扩展。
如果不能通过扩展块来扩充空间,
那么存储池中必须包含服务器可用于创建新块的
活动条目。
要立即增加存储空间:
执行以下任一项操作:
通过运行带 modify space expand 自变量的 admin() 或 task() 函数手动扩充空间,
如下所示:
EXECUTE FUNCTION task("modify space expand", "space_name", "size");
例如,以下命令将编号为 8 的空间扩展 1 千兆字节:
EXECUTE FUNCTION task("modify space expand", "8", "1000000");
服务器通过扩展空间中的块或添加新块来扩充空间。服务器可能对请求的大小向
上取整,具体取决于存储空间的页大小以及扩展期间任何存储池条目所使用的已
配置块大小。
GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 219 -
通过运行带 modify chunk extend 自变量的 admin() 或 task() 函数手动扩展块,如
下所示:
EXECUTE FUNCTION task("modify chunk extend", "chunk_number",
"extend_amount");
例如,以下命令将编号为 12 的块扩展 5000 KB:
EXECUTE FUNCTION task("modify chunk extend", "12", "5000");
服务器可能对请求的大小向上取整,具体取决于存储空间的页大小。
对自动添加更多空间的最低程度配置和测试的示例
此示例显示可如何最低程度地配置和测试自动添加更多空间。可通过创建数据库空间、填
充空间、
向 GBase 8s 存储池添加条目和将表装入空间来执行此操作。
空间填满之后,
GBase
8s 将自动扩展该空间。
要最低程度地配置和测试自动添加更多空间,请执行以下操作:
1. 创建数据库空间。
例如,创建名为 expandable_dbs 的数据库空间,并将名为
/my_directory/my_chunk 的熟文件的前 10000 KB 分配给初始块,如下所示:
onspaces -c -d expandable_dbs -p /my_directory/my_chunk -o 0 -s 10000
2. 填充数据库空间。
例如,在不装入数据行的情况下填充数据库空间。实际操作是创建表,然后为第一
个扩展数据块分配一大组邻接的可用页,如下所示:
CREATE TABLE large_tab (col1 int) IN expandable_dbs EXTENT SIZE
10000000;
可通过使用 onstat -d 命令或 OpenAdmin Tool (OAT) 来监视块中的可用页。
如果数据库空间已满,那么在尝试创建数据并将其装入到另一个新表时,将收到空
间不足的错误。
3. 向 GBase 8s 存储池添加条目。
例如,将 $GBASEDBTDIR/tmp 目录添加到存储池,如下所示:
DATABASE sysadmin;
EXECUTE FUNCTION task("storagepool add", "$GBASEDBTDIR/tmp",
"0", "0", "10000", "2");
4. 在 SP_THRESHOLD 配置参数中,设置 GBase 8s 自动运行任务以扩充空间之
前,存储空间中可包含的最小可用 KB 量的阈值。
5. 创建新表并将其装入数据库。
现在,如果存储空间变满,不会再收到空间不足的错误,而是由 GBase 8s 自动
在 $GBASEDBTDIR/tmp 文件中创建熟文件,并使用这个新的熟文件向
expandable_dbs 数据库添加块。继续填充此块时,服务器将自动对其进行扩展。
向数据库空间添加新块之前,如果可能,服务器将始终扩展块。
GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 220 -
6. 减小存储空间中的可用空间,以测试 SP_THRESHOLD 配置参数中的值。
在数据库空间、
临时数据库空间、
智能大对象空间、
临时智能大对象空间或 Blob 空
间中分配足够的页面,以减少可用空间,使其低于 SP_THRESHOLD 指示的阈值。但
是,请勿填满该空间。
下次运行 mon_low_storage 任务时,您会发现该空间将自动扩展。
7. 创建空间不足的条件。
在数据库空间、
临时数据库空间、
智能大对象空间、
临时智能大对象空间或 Blob 空
间中分配所有页。然后尝试分配更多页。必须确保此分配成功,并且确保不会收到
空间不足的错误。
GBase
8s 每次扩展或添加块以及将新块标记为可扩展时,
都会向日志中写入消息。
运行 onstat -d 命令可显示实例中的所有块。查找可扩展块,这种块带有 E 标
志。该命令输出会显示服务器自动扩充了空间,方法是添加了新块或扩展了现有块
的大小。
自动添加更多空间的配置示例
此示例显示可通过以下方法对自动添加更多空间进行充分配置:
更改某些配置参数的设置,
更改用于监视低存储的任务的频率,以及指定可扩展空间和块的信息。
要配置为自动添加更多存储空间:
1.
向存储池添加条目。
例如,将 $GBASEDBTDIR/tmp 目录添加到存储池,如下所示:
DATABASE sysadmin;
EXECUTE FUNCTION task("storagepool add", "$GBASEDBTDIR/tmp",
"0", "0", "10000", "2");
2.
将未镜像数据库空间和临时数据库空间中的某些块标记为可扩展,以便将来必
要时,服务器可扩展这些块。
例如,指定第 12 个块可扩展:
EXECUTE FUNCTION task("modify chunk extendable", "12");
也可将可扩展块的标记更改为不可扩展。 例如,指定编号为 10 的块不可扩展:
EXECUTE FUNCTION task("modify chunk extendable off", "10");
3.
在 SP_THRESHOLD 配置参数中,设置 GBase 8s 自动运行任务以扩充空间
之前,存储空间中可包含的最小可用 KB 量的阈值。指定以下任一项:
o
1 到 50 的百分比值。
o
1000 到块最大大小的值(以 KB 计)
如果单个存储空间的填充程度超过了您定义的此阈值,
并且该填充程度持续到下次
运行空间监视任务 (mon_low_storage) 为止,那么服务器将通过扩展可扩展块
或通过使用存储池添加块来尝试扩充该空间。
GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 221 -
例如,假设 SP_THRESHOLD 值为 5.5,服务器将该值视为 5.5%。如果某个空间中
的可用页很少,可用空间百分比降到 5.5% 以下,并且这种低水平持续到下次运行
mon_low_storage 任务为止,
那么该任务将尝试扩展此空间。
如果 SP_THRESHOLD
设置为 50000,并且某个空间的可用空间低于 50000 KB,那么下次运行
mon_low_storage 时将扩展该空间。
4.
可选:更改 mon_low_storage 任务的运行频率。该任务定期扫描数据库空间
列表,以查找低于 SP_THRESHOLD 配置参数指示的阈值的空间。
例如,要将任务配置为每 10 分钟运行一次,请运行以下 SQL 语句:
DATABASE sysadmin;
UPDATE ph_task set tk_frequency = INTERVAL (10) MINUTE TO MINUTE
WHERE tk_name = “mon_low_storage”;
5.
可选:更改 SP_WAITTIME 配置参数的值,该配置参数指定返回空间不足错
误之前,线程等待空间扩展的最大秒数。
6.
可选:更改与扩展存储空间相关的两种大小:
o
扩展大小,这是扩展数据库空间或临时数据库空间中的块时使用的最
小大小。
o
创建大小,这是在不属于镜像空间的数据库空间、临时数据库空间、
智能大对象空间、
临时智能大对象空间或 Blob 空间中创建新块时使用的最小大
小。
例如,以下命令将编号为 3 的空间的创建大小和扩展大小分别设置为 60 兆字
节和 10 兆字节:
EXECUTE FUNCTION task("modify dbspace sp_sizes",
"3", "60000", "10000");
对存储空间的自动扩充进行了配置之后,也可在必要时手动扩充空间或扩展空间中的块。