内容


Informix 中的存储配置

使用自动存储空间管理简化您的 DBA 工作负载

Comments
免费下载:IBM® Informix® 11.7 试用版(包括 Ultimate Edition、Developer Edition 和 Innovator-C Edition)
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

概述

Database System Administrator (DBA) 在管理分配给 Informix 服务器的磁盘空间时面临大量挑战。以前的 Informix 版本有很大帮助,添加了大块(Informix 9.40)、动态日志分配(Informix 9.30)、可配置表空间(Informix 10.00)等特性。然而,如果表空间意外填满,Informix 仍然会产生错误,DBM 必须手动添加更多空间来缓和问题。可能会出现存储空间分配不足或超额分配的情况,因为很难预测数据库对象的空间需求。从 Informix 11.70.xC1 开始,存储配置特性便简化了 DBA 的生活,因为 Informix 在需要时自动分配更多磁盘空间给存储空间,而无需 DBA 的直接(手动)干预。存储配置特性添加了新的术语 —存储池— 到 Informix 存储空间和块(Chunk)的概念中。存储池是未使用的磁盘空间,Informix 可在需要更多空间时使用它。它受到需要额外空间的存储空间的控制,也受到存储池条目本身的控制。

术语

存储空间 指一个 Informix 存储空间,包括永久或临时的 dbspace、blobspace 或 smartblob 空间。

存储配置概念

可扩展块

早期版本的 Informix( 11.70xC1 之前)总是有固定长度的块,如果现有块耗尽空间,就无法向其添加更多空间。从 Informix 11.70xC1 开始,当一个块耗尽其当前分配的磁盘空间时,Informix 可添加更多空间到现有块(截至块的最大大小),无需向包含块的存储空间分配新块。具有这种特征的块称为可扩展块。

可扩展存储空间

当存储空间耗尽时,Informix 可以自动扩展存储空间。可通过两种方式自动扩展存储空间:

  • 可扩展其中一个块(一个块必须标记为可扩展),或
  • 可将新块添加到存储空间

Informix 会首先尝试扩展标记为可扩展的其中一个现有块。如果当前块都不可扩展,Informix 可以使用存储池自动分配新块给存储空间。

存储池

存储池是包含原始设备、熟文件(cooked file)或目录的一个或多个条目的集合。它是 DBA 指定的未使用磁盘空间,Informix 可在需要空间时使用它。Informix 允许您手动向该池添加空间,并在块被删除时自动返回空间给该池。每个 Informix 实例仅有一个存储池,且不能在 Informix 实例间共享存储池。

主动和被动触发机制

根据您的配置,可在耗尽空间之前自动扩展空间。这称为主动扩展。如果因为几乎没有空闲页面可用而扩展空间,这称为被动扩展。

在主动机制中,一个 sysadmin 任务会监控现有存储空间,并在剩余空间低于特定阈值时自动扩展存储空间。可使用 SP_THRESHOLD onconfig 参数控制该阈值。尽管监控任务会自动运行,默认禁用主动分配。

在被动机制中,当一个事务即将因为空间不足而失败时,Informix 通过扩展现有块或添加新块增加即将用尽的存储空间。需要额外存储来完成的事务在等待分配额外存储时停止。如果存储空间不配置为自动扩展,会向客户端返回一个 ENOFREE 错误,如同在之前的 Informix 版本中。

尽管可同时禁用主动和被动触发机制,手动存储空间扩展和块扩展仍然可行。

控制块、存储空间和存储池

DBA 可控制是否可以增长给定块或存储空间,以便 DBA 告诉 Informix 对特定存储空间使用的空间执行硬限制。DBA 还可限制存储池中的空间量,或让 Informix 使用所有可用空间。在 Informix 自动添加存储给容器时,DBA 将能够配置分配量,即当前空间的百分比或千字节的绝对值。而且 DBA 可以配置将由主动触发器使用的实例范围内的阈值。

配置存储配置

本节阐述存储配置特性不同级别的配置。

实例级配置参数

Informix 11.70.xC1 引入以下三个新的 onconfig 配置参数:

  • SP_AUTOEXPAND <0 | 1> (default - 1): 该参数启用或禁用对块扩展的自动创建。默认设置为 1(启用)。可使用 onmode -wmonmode -wf command 动态修改该参数。不管此参数设置如何,所有手动操作仍然可行。

    注意,如果存储空间为空或您的实例不包含可扩展块,那么启用自动扩展没有效果(两种情况下都是默认状态)。
  • SP_THRESHOLD <percentage or kilobytes> (default - 0):该参数用于定义在 Informix 运行任务扩展空间(通过扩展空间中的现有块或添加新块)之前存储空间中可存在的空闲千字节最小数量。该参数接受百分比数或千字节数。如果任何存储容器中的空闲空间量低于该阈值,‘mon_low_storage’ sysadmin 任务会尝试在下次运行时扩展空间。如果该值为 50 或更低,Informix 将其解译为百分比(例如,10 = 10% 且 2.84 = 2.84%)。如果该值为 1000 或更高,Informix 将其解译为一定数量的千字节。介于 50 和 1000 之间的值被视为无效。

    默认设置为 0,表示禁用主动触发。可使用 onmode -wmonmode -wf command 动态修改该参数。

    示例及其含义:
    • SP_THRESHOLD 7.5 - 阈值设为 7.5%。如果容器中空闲空间量低于总空间量的 7.5%,它就被视为低于阈值。
    • SP_THRESHOLD 10000 - 阈值设为 10000KB 或大约 10MB。如果容器中空闲空间量低于 10MB,它就被视为低于阈值。
  • SP_WAITTIME <number of seconds> (default - 30 seconds): 该参数设置为秒数。它是一个用户线程等待另一个线程扩展空间时在超时并返回 ENOFREE 之前的最少时间量。默认设置为 30 秒。可使用 onmode -wmonmode -wf 命令动态修改该参数。

存储空间级配置

每个 Informix 存储空间将有以下两个可配置值:

  • create size - 这是 Informix 可在空间中自动创建的块的最小大小。create size 的默认值是空间当前大小的 10%。
  • extend size - 这是空间中可自动扩展的块的最小分配大小。extend size 的默认值是 10MB。

这些值都不会影响人工块创建或块扩展。(参见 “扩展 Informix 存储空间” 一节了解更多信息。)

存储池条目级配置

对于存储池中的每个条目,可以配置可从该条目分配的块的最小大小。您还可以配置需要空间时考虑这些条目的优先级。(参见 “管理存储池” 一节了解更多信息。)

表 1. 启用/禁用功能快速参考
功能控制参数描述范围
存储空间的自动扩展SP_AUTOEXPAND1 = Enabled(默认);0 = Disabled。例如: onmode -wm SP_AUTOEXPAND=1, 或修改 onconfig 文件,或通过 Open Admin Tool 更新它。实例级
用于添加空间的自动触发器SP_THRESHOLD0 = Disabled(默认),0 到 50 以及 1000 到块最大大小为有效值,例如: onmode -wm SP_THRESHOLD=20, or modify the onconfig file, or update it through Open Admin Tool. 实例级
自动块创建create size要为特定存储空间禁用自动块创建,将创建大小设置为 0。默认值为空间当前大小的 10%。(例如,参见 “扩展 Informix 存储空间” 一节。) 单个存储空间级别
自动块扩展extend size要为特定存储空间禁用自动块扩展,将该空间的扩展大小设置为 0。默认值为 10MB。(例如,参见 “扩展 Informix 存储空间” 一节。) 单个存储空间级别

管理块可扩展性

可手动或自动扩展一个块;但是,必须首先将其标记为 “可扩展”。可使用 modify chunk extendable sysadmin task() 命令将块标记为可扩展或不可扩展:

EXECUTE FUNCTION task("modify chunk extendable [on]", <chunk number>);
EXECUTE FUNCTION task("modify chunk extendable off", <chunk number>);

示例

  • 将块号 4 标记为可扩展(关键字 “on” 可选)。
    清单 1. 将块标记为可扩展
    EXECUTE FUNCTION task("modify chunk extendable", 4);
  • 将块号 13 标记为不可扩展。
    清单 2. 将块标记为不可扩展
    EXECUTE FUNCTION task("modify chunk extendable off", 13);

注意,默认情况下块是不可扩展的。但是熟的和原始的块可扩展。对于熟块,扩展可能会使熟文件越来越大。但是扩展原始块不会让原始设备变大;它仅将块的结束偏移量进一步移动到原始设备。如果原始设备对于新块结束偏移量不够大,扩展就会失败。Informix 将不允许创建或扩展块来重叠同一实例中的现有块,不管是手动还是自动执行操作。

了解 onstat -d output

onstat -d 输出中有两个新标志:一个用于 dbspaces,一个用于块。当将 SP_AUTOEXPAND 设置为 1(默认值)时,像 dbspace 这样的存储空间具有一个非零的创建大小或扩展大小,该存储空间被视为可自动扩展,且将在位置 5 中有一个 ‘A’ 标志,如清单 3 所示。如果将 SP_AUTOEXPAND 设置为 0(禁用),或将特定空间的创建大小和扩展大小都设置为 0,该存储空间不被认为可自动扩展,且在 onstat -d 输出中不会有一个 ‘A’ 标志。

清单 3. onstat -d 输出:存储空间清单
Dbspaces
address          number   flags      fchunk   nchunks  pgsize   flags    owner    name
4e108028         1        0x60001    1        1        2048     N  BA    informix rootdbs
5075ddf8         2        0x60001    2        1        2048     N  B     informix dbspace1
50810800         3        0x60001    3        1        2048     N  BA    informix dbspace2
50526d90         4        0x60011    4        1        4096     N BBA    informix blbsp1
5075d4f0         5        0x68001    5        1        2048     N SBA    informix sbspace1

在同一输出的块部分,位置 5 处的 ‘E’ 标志表示块标记为可扩展。

清单 4. onstat -d 输出:块清单
Chunks
address    chunk/dbs   offset   size     free     bpages   flags pathname
4e1081d0   1      1    0        100000   37373             PO-BE- /informix/rootdbs
508d5df0   2      2    0        5000     4947              PO-B-- /informix/dbspace1
508109a8   3      3    0        2500     2447              PO-BE- /informix/dbspace2
50810d70   4      4    0        5000    ~2494     2500     POBB-- /informix/blobsp1
5075fd10   5      5    0        5000     4587     4587     POSB-- /informix/sbspace1
                       Metadata 360      268      360
 5 active, 32766 maximum

注意,之前在位置 5 处的块标志(分别用于并发 I/O 和直接 I/O)移到了位置 6。

手动扩展块

可以使用 modify chunk extend 命令手动增加或扩展一个可扩展块。 一般语法如下:

EXECUTE FUNCTION task("modify chunk extend", <chunk number> , <extend amount>);

该命令立即扩展一个块。“extend amount” 具有默认的千字节数,但可表达为 “10 MB”、“32 GB” 等等。用于手动扩展一个块的该命令不受存储空间的 ‘扩展大小’ 值的影响。

示例

  • 将块号 6 扩展 400MB。
    清单 5. 将一个块扩展 400MB
    EXECUTE FUNCTION task("modify chunk extend", 6, "400 MB");
  • 将块号 4 扩展 10KB。
    清单 6. 将一个块扩展 10KB
    EXECUTE FUNCTION task('modify chunk extend', 4, '10 KB');

Informix 会自动将扩展量四舍五入为本页面大小的最接近倍数。以下块不能标记为可扩展,因而无法扩展:

  • Blobspace 块
  • Smartblob 空间块
  • 镜像块

扩展 Informix 存储空间

每个 dbspace、blobspace 和 sbspace 都有一个 ‘创建大小’ 和一个 ‘扩展大小’。创建大小是 Informix 可在该空间中自动创建的一个块的最小大小。扩展大小是该空间中一个块可自动扩展的最小分配大小。创建大小和扩展大小都不影响手动块创建或块扩展。

您可以使用 sysadmin task 命令以绝对千字节数或当前大小百分比为单位指定两个大小。为特定存储空间将创建大小和扩展大小都设置为 0 可有效禁用对该空间的自动扩展。事实上,仅仅将扩展大小设置为 0 会为该空间中的所有块消除可扩展标志。但是,可再次将该空间中的块标记为可扩展。只有未镜像的 dbspaces 和临时 dbspaces 可以有一个非零 extend size,因为不能在任何其他类型的空间中扩展块。创建大小的默认值是 10%。扩展大小的默认值是 10MB。您可以使用以下 task 命令修改这些大小:

EXECUTE FUNCTION task("modify space sp_sizes", < space name >, < new create size >, < new extend size >);

示例

  • 对于 dbspace8,将创建大小和扩展大小分别设置为 60MB 和 10MB。
    清单 7. 设置创建大小和扩展大小
    EXECUTE FUNCTION task("modify space sp_sizes", "dbspace8", 60000, 10000);
  • 对于 dbspace8,将创建大小和扩展大小分别设置为 20% 和 1.5%。
    清单 8. 设置创建大小和扩展大小
    EXECUTE FUNCTION task("modify space sp_sizes", "dbspace8", 20, 1.5);
  • 为 dbspace8 禁用自动块创建,但是启用自动块扩展。
    清单 9. 禁用自动块创建;启用自动块扩展
    EXECUTE FUNCTION task("modify space sp_sizes", "dbspace8", 0, 1.5);
  • 禁用自动块扩展,但是启用自动块创建。
    清单 10. 禁用自动块扩展;启用自动块创建
    EXECUTE FUNCTION task("modify space sp_sizes", "dbspace8", 20, 0);

手动扩展存储空间

如果您不想等待 Informix 自动扩展空间,可以使用以下 sysadmin task 命令自动扩展它:

EXECUTE FUNCTION task("modify space expand", < space name >, < size >);

该命令通过扩展现有块或添加新块直接扩展空间。(如果空间不包含可扩展块且存储池不包含请求的空间,命令会失败。)在这种情况下,‘size’ 是您希望扩展的最小空间大小。向空间添加的实际千字节数可能超过该最小值,具体取决于多个因素,比如空间的页面大小和存储池中可用条目的最小块大小设置。

该手动操作不受 dbspace 的创建大小或其扩展大小的影响。

示例

  • 将 dbspace4 至少扩展 10MB。
    清单 11. 扩展 dbspace4
    EXECUTE FUNCTION task("modify space expand", "dbspace4", "10 MB");

存储池的组件

sysadmin:storagepool 表模式

sysadmin 数据库中的新存储池表跟踪存储池条目。其模式如下:

清单 12. 存储池模式
create table storagepool
    (
    entry_id    serial not null,
    path        varchar(255) not null,
    beg_offset  bigint not null,
    end_offset  bigint not null,
    chunk_size  bigint not null,
    status      varchar(255),
    priority    int     default 2,
    last_alloc  datetime year to second,
    logid       int,
    logused     int
    ) lock mode row;

create unique index ix_storagepool_1 ON storagepool(entry_id);
表 2. 存储池表
列名描述
entry_id用于识别条目的序列号。
path设备/目录/文件的路径。
beg_offset条目的起始偏移量。
end_offset条目的结束偏移量。
chunk_size该条目上分配的最小大小。
status以下三种之一:Active,Full,Error。
priority影响考虑该条目的次序。
有效的优先级值是:
1 = High
2 = Medium (default)
3 = Low
last_alloc该条目上最后一次分配的日期/时间。这在添加条目时被初始化为 null,且在修改条目时被重置为 null。
logid在内部使用,以确定最近最少使用的条目。
logused在内部使用,以确定最近最少使用的条目。

该表中的一个条目存储目录、熟文件或原始设备,供存储配置特性使用。对目录与文件/设备的区分由 Informix 在内部完成。

所有条目均可分成两类:固定长度和可扩展长度。在其中三列中存储的信息对于两种类型的条目不同:

  • 固定长度:
    • beg_offset - 到设备的起始偏移量。
    • end_offset - 到设备的结束偏移量。
    • chunk_size - 从该设备上分配的块的最小大小。
  • 可扩展长度:
    • beg_offset - 到设备的起始偏移量,对于目录是 0。
    • end_offset - 0.
    • chunk_size - 设备或目录内熟块的初始大小。

状态

sysadmin:storagepool 表中的一个正常条目被认为是 ‘活动的’。其状态栏将包括 “Active” 单词。

由于从一个活跃的、固定长度的存储池条目分配了块,最终该条目中的空间耗尽。当发生这种情况时,条目保留在池中,但是其状态更新为 “Full”。Informix 不会试图使用完整的条目。

如果向池成功添加了条目或随后修改条目,但稍后在 Informix 试图使用它时生成了某类错误,条目保留在池中(可能稍后由管理员 ‘修复’),但其状态被更新 “Error”。Informix 不会试图使用任何错误条目。

管理存储池

以下是可用于管理存储池的 sysadmin task 命令:

  • storagepool add
  • storagepool modify
  • storagepool delete
  • storagepool purge

每个原始设备、熟文件或存储池中的目录称为一个 ‘实体’。可以使用 sysadmin:task()sysadmin:admin() 函数从池中添加、修改和删除条目。

  • storagepool add

    添加条目时,您必须提供路径、Informix 可以开始分配块空间所依据的偏移量、条目中 Informix 可用的总空间量、可从该新条目分配的块的最小大小,以及优先级。该命令的语法如下:

    EXECUTE FUNCTION task("storagepool add", <path>, <begin offset>, <total size>, <chunk size>, <priority>);

    路径必须是带引号的字符串。<path> 中可能使用环境变量,且它存在于调用 oninit 的 shell 中。

    清单 13. 示例
    EXECUTE FUNCTION task("storagepool add", "$DBSDIR/chunk1", 0, 100000, 20000, 2);

    如果其他参数是纯粹的数字,那么无需引用它们。但是,如果参数值是一个包含单位的数字,比如 “100 MB”,就必须引用它。

    对于大小和偏移量,如上所示包含单位是有效的。默认单位是千字节,但以下示例都是可以接受的:

    • 100000
    • "100000 K"
    • "100 MB"
    • "100 GB"
    • "0.6 TB"

    有效的优先级值是 1(High)、2(Medium)或 3(Low)。当 Informix 到存储池寻找空间时,这个优先级影响考虑条目的顺序。

    让我们来看看几个示例:

    • 将原始设备的一部分添加到池。Informix 可从该设备上总共分配 10GB 的空间,初始偏移量为 50MB。Informix 可从该空间块腾出的块的最小大小是 100MB。赋予该条目一个高优先级。
      清单 14. 将原始设备的一部分添加到池
      EXECUTE FUNCTION task("storagepool add", "/dev/rawdevice1", "50 MB", "10 GB", 
      "100 MB", 1);
    • 将目录添加到池中。Informix 可在该目录中创建的块的最小大小是 200MB。赋予该条目一个中等优先级。
      清单 15. 将目录添加到池中
      EXECUTE FUNCTION task("storagepool add", "/informix/STORAGE_DIR", 0, 0, 
      "200 MB", 2);
    • 将熟文件添加到池中。Informix 可从该设备上总共分配 3GB 的空间,初始偏移量为 0。Informix 可从该空间快腾出的块的最小大小是 10MB。赋予该条目一个低优先级。
      清单 16. 将熟文件添加到池中
      EXECUTE FUNCTION task("storagepool add", "/ifmx/CHUNKFILES/cooked1", 0,3000000, 
      "10 MB", 3);
    • 将可扩展熟文件添加到池中。如果被使用,那么仅能从该文件创建一个块。其初始大小将是 4GB,且它会自动被标记为可扩展。赋予该条目一个中等优先级。
      清单 17. 将可扩展熟文件添加到池中
      EXECUTE FUNCTION task("storagepool add", "/ifmx/CHUNKFILES/cooked2", 0, 0, 
      "4 GB", 2);
  • storagepool modify

    存储池中的每个条目有一个惟一 ID,存储在 entry_id 列。该命令需要修改现有条目的条目 ID。您可以修改条目的总大小、最小块大小和优先级。您不能修改路径或偏移量。如果需要更改两个值中的任何一个,就需要删除条目并重新添加新路径、偏移量或两者。修改命令的语法如下:

    EXECUTE FUNCTION task("storagepool modify", <entry ID>, <new total size>, <new chunk size>, <new priority>);

    我们来看一个例子。将存储池条目 4 的总大小、块大小和优先级分别改为 10GB、10MB 和 2。

    清单 18. 更改存储池的总大小、块大小和优先级
    EXECUTE FUNCTION task("storagepool modify", 4, "10 GB", 10000, 2);
  • storagepool delete

    该命令需要删除条目的条目 ID。删除命令的语法如下:

    EXECUTE FUNCTION task("storagepool delete", <entry ID>);

    我们来看一个例子。删除存储池条目 14。

    清单 19. 删除存储池条目 14
    EXECUTE FUNCTION task("storagepool delete", 14);
  • storagepool purge

    可使用清除命令删除存储池条目:

    EXECUTE FUNCTION task("storagepool purge <all|full|errors>");

    使用 'all' 关键字将删除存储池表中的所有行;‘full’ 仅删除状态为 “Full” 的那些条目;而 ‘errors’ 仅删除状态为 “Error” 的那些条目。

    清单 20. 示例
    EXECUTE FUNCTION task("storagepool purge all"); 
    EXECUTE FUNCTION task("storagepool purge full"); 
    EXECUTE FUNCTION task("storagepool purge errors");

使用存储池创建空间

存储池不止用于向现有空间添加块;它还可用于从头开始创建空间。每个空间类型都有其自己的创建命令,但一般格式是 create <object> from storagepool。 命令集描述如下。

  • create dbspace from storagepool

    该命令使用存储池中的条目创建一个 dbspace。可选页面大小参数以千字节为单位给定,且可选镜像标志是 1(镜像) 或 0(无镜像)。该命令的语法如下:

    EXECUTE FUNCTION task("create dbspace from storagepool", <space name>, <size>, [<page size> [, <mirror flag>]]);

    让我们看看几个示例:

    • 创建一个镜像的 1GB 的数据库空间,命名为 “dbspace3”,页面大小为 6k。
      清单 21. 创建镜像的 dbspace
      EXECUTE FUNCTION task("create dbspace from storagepool", "dbspace3", "1 GB", 
      6, 1);
    • 创建一个无镜像的 5MB dbspace,命名为 “dbspace4”,使用默认页面大小。
      清单 22. 创建无镜像的 dbspace
      EXECUTE FUNCTION task("create dbspace from storagepool", "dbspace4", 50000);
  • create tempdbspace from storagepool

    该命令使用存储池中的条目创建一个临时的 dbspace。可选页面大小参数以千字节为单位给定。该命令的语法如下:

    EXECUTE FUNCTION task("create tempdbspace from storagepool", <space name>, <size>, [<page size>]);

    让我们看一个例子。创建一个 1GB 的临时 dbspace,命名为 “tempdbspace1”,页面大小为 12k。

    清单 23. 创建一个临时 dbspace
    EXECUTE FUNCTION task("create tempdbspace from storagepool", "tempdbspace1", 
    "1 GB", 12);
  • create blobspace from storagepool

    该命令使用存储池中的条目创建一个临时的 blobspace。注意,可选 blobpage 大小参数以基页(而非千字节)为单位给定。这与提供给 onspaces 命令的页面大小单位一致。且可选镜像标志是 1(镜像) 或 0(无镜像)。该命令的语法如下:

    EXECUTE FUNCTION task("create blobspace from storagepool", <space name>, <size>, [<blobpage size> [, <mirror flag>]]);

    让我们来看看几个例子。

    • 创建一个镜像的 100GB blobspace,命名为 “blobspace1”,blobpage 大小为 100 个基页。
      清单 24. 创建镜像的 blobspace
      EXECUTE FUNCTION task("create blobspace from storagepool", "blobspace1", 
      "100 GB", 100, 1);
    • 创建一个镜像的 5MB blobspace,命名为 “blobspace2”,使用默认 blobpage 大小(1 个基页)。
      清单 25. 创建无镜像的 blobspace
      EXECUTE FUNCTION task("create blobspace from storagepool", "blobspace2", 5000);
  • create sbspace from storagepool

    该命令使用存储池中的条目创建一个智能 blobspace。可选日志标志是 1(有日志记录) 或 0(无日志记录)。可选镜像标志是 1(镜像) 或 0(无镜像)。该命令的语法如下:

    EXECUTE FUNCTION task("create sbspace from storagepool", <space name>, <size>, [<log flag> [,<mirror flag>]]);

    让我们来看看几个例子。

    • 创建一个镜像的 240MB 智能 blobspace,命名为 “sbspace1”,带日志记录。
      清单 26. 创建一个镜像的 blobspace
      EXECUTE FUNCTION task("create sbspace from storagepool", "sbspace1", "240 MB", 
      1, 1);
    • 创建一个无镜像的 5GB 智能 blobspace,命名为 “sbspace2”,不带日志记录。
      清单 27. 创建一个无镜像的 blobspace
      EXECUTE FUNCTION task("create sbspace from storagepool", "sbspace2", "5 GB");
  • create tempsbspace from storagepool

    该命令使用存储池中的条目创建一个临时的智能 blobspace。在本例中,无日志标志或镜像标志参数。该命令的语法如下:

    EXECUTE FUNCTION task("create tempsbspace from storagepool", <space name>, <size>);

    让我们看一个例子。创建 100MB 的临时智能 blobspace。

    清单 28. 创建一个临时的智能 blobspace
    EXECUTE FUNCTION task("create tempsbspace from storagepool", "temp_sbspace1", 
    "100 MB");

使用存储池创建块

要使用存储池手动将块添加到空间中,可使用以下命令。

EXECUTE FUNCTION task("create chunk from storagepool", < space name >, < size >);

注意,modify space expand 命令可能也从存储池创建一个块并将其添加到指定空间。但是如果空间有可扩展的块,它也可扩展块,而非创建新块。create chunk from storagepool 命令强制添加块。

让我们看一个例子。将一个 200MB 的块添加到 “logdbs” 空间。

清单 29. 将块添加到空间
EXECUTE FUNCTION task("create chunk from storagepool", "logdbs", "200 MB");

添加或返回删除的块空间到存储池

在删除空白空间时,可以自动将删除的块添加到存储池。空间最初是否来自于存储池并不重要。该命令的一般语法如下:

EXECUTE FUNCTION task("drop dbspace | tempdbspace | blobspace | sbspace | tempsbspace to storagepool", <space name>);

让我们看一个例子。删除一个名为 “mydbs3” 的空白 dbspace,将所有释放的块空间添加到存储池。

清单 30. 删除空白 dbspace;添加释放的块空间
EXECUTE FUNCTION task("drop dbspace to storagepool", "mydbs3");

您还可以删除个别块,并使用以下命令将其空间添加到存储池:

EXECUTE FUNCTION task("drop chunk to storagepool", <space name>, <path>, <offset>);

清单 31. 示例
EXECUTE FUNCTION task("drop chunk to storagepool", "bigdbs", "/dev/rawdisk23", "100 KB");

在块删除期间返回或添加空间到存储池时,Informix 将空间与任何现有条目结合起来。但是,在手动输入 storagepool addstoragepool modify 命令期间不会有该串联。

管理任务命令快速参考

表 3. 管理块可扩展性
命令参数用途
modify chunk extendable [on] | off<chunk number>将块标记为可扩展。
modify chunk extend<chunk number>,
<extend amount>
根据给定值手动扩展块。
表 4. 管理存储空间
命令参数用途
modify space sp_sizes<space name>,
<new create size>,
<new extend size>
更新存储空间的自动扩展特征。
创建大小是自动创建的块的最小大小。
扩展大小是空间中一个块可自动扩展的最小分配大小。
modify space expand<space name>,
<expand size>
根据给定值手动扩展块。
表 5. 管理存储池
命令参数用途
storage pool add<path>,
<begin offset>,
<total size>,
<chunk size>,
<priority>
将新条目添加到存储池。
storage pool modify<entry id>,
<new total size>,
<new chunk size>,
<new priority>
修改现有存储池条目。
storage pool delete<entry id>删除现有存储池条目。
storage pool purge <all | full | errors>删除所有现有存储池条目。
表 6. 使用存储池创建和删除存储空间
命令参数用途
create dbspace from storagepool<space name>,
<size>,
[<page size>[,
<mirror flag>]]
使用存储池中的条目创建 dbspace。
create tempdbspace from storagepool<space name>,
<size>,
[<page size>]
使用存储池中的条目创建临时 dbspace。
create blobspace from storagepool<space name>,
<size>,
[<blobpage size>[,
<mirror flag>]]
使用存储池中的条目创建 blobspace。
create sbspace from storagepool<space name>,
<size>,
[<log flag>[,
<mirror flag>]]
使用存储池中的条目创建智能 blobspace。
create tempsbspace from storagepool<space name>,
<size>
使用存储池中的条目创建临时智能 blobspace。
create chunk from storagepool<space name>,
<size>
使用存储池将块添加到指定的存储空间。
drop dbspace | tempdbspace | blobspace | sbspace | tempsbspace to storagepool<space name>删除空白存储空间并将其添加到存储池。

有用信息

块路径命名约定

使用存储池中的条目从头创建一个块时,其名称采用以下格式:

<server name>_<space name>_<p or m>_<counter>
其中:

  • <server name> = DBSERVERNAME 的值
  • <space name>= 向其中添加块的空间的名称
  • <p or m> = ‘p’ 表示主块,‘m’ 表示镜像块
  • <counter> = 确保我们生成惟一文件名的整数

让我们看看几个例子。

  • ifmx1_dbspace4_p_1
  • ifmx1_logdbs_p_4
  • ifmx1_logdbs_m_1

sysmaster 表中的信息

  • sysmaster:syschunks 视图现在有一个名为 ‘is_extendable’ 的附加列,指示块是否可扩展。
  • sysmaster:sysdbstab 表有两个新列:‘create_size’ 和 ‘extend_size’。

内部管理 API

有很多管理任务可供 Informix 在内部使用。这里介绍它们是仅作参考之用。DBA 不应试图手动执行这些任务。

  • add_storage - 该任务添加块到 DBSpace、临时 DBSpace、BlobSpace、SBSpace 或临时 SBSpace。如果 Informix 存储池未填满,或出于其他原因不能成功添加块,则任务失败。
  • mon_low_storage - 这是一个定期运行的传感器任务,监控 DBSpace 空闲空间。当某个存储池中的空闲空间低于特定阈值时,mon_low_storage 任务尝试扩展空间。该传感器执行的频率可由管理员使用以下 SQL 设置,其中 <minutes> 应以分钟数取代:
    清单 32. 设置 mon_low_storage 频率
    DATABASE sysadmin;
    UPDATE ph_task 
    set tk_frequency = INTERVAL (<minutes>) MINUTE TO MINUTE
    WHERE tk_name = "mon_low_storage";

转换/还原考虑因素

值得注意的是,如果您将服务器还原为早期版本的 Informix(11.70xC1 之前),您会丢掉所有存储配置设置和功能。重新恢复为 11.70.xC1 或更高版本也不会恢复任何设置。但是,在 11.70 中创建的任何块或空间,不管使用什么方法,在还原过程中保持不变。

复制考虑因素

当为主服务器分配一个目录以便在存储池中使用时,这一目录必须也存在于所有 HDR 和 RSS 辅助服务器上。在将目录添加到存储池时,Informix 会验证辅助服务器上是否存在该目录,如果不存在,则主服务器上的添加操作失败。

结束语

使用存储配置特性,您可以配置服务器,在需要更多空间时自动管理存储空间。存储配置特性允许您更有效地使用空间,确保按需分配空间,同时减少空间不足错误和人工监控空间(确定哪个存储空间将耗尽空闲空间以及何时耗尽)所需的时间。您还可以配置服务器,在空间变满之前以及空闲页面低于指定阈值时扩展空间。即使配置和启用了自动存储配置,还是可以手动扩展空间或块。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=680386
ArticleTitle=Informix 中的存储配置
publish-date=06132011