工作文件数据库存储要求

工作文件数据库用于存储需要工作存储的SQL语句。

工作文件存储用于分类、RID池溢出到工作文件以及临时表和公共表表达式。

工作文件的使用情况取决于需要工作文件的操作数量以及需要工作文件的并发用户数量。 您可以通过收集 Db2 统计跟踪来监控工作文件的使用情况。 使用工作文件使用痕迹中的高水位值作为确定工作文件空间分配量的指导原则。

如果您要安装 Db2 ,请参阅安装所需的存储空间

迁移所需的存储空间

如果您有大量数据需要分类,且需要同时进行大量分类操作,那么您可能需要更大的工作文件数据库存储空间。 如果您正在对压缩数据进行排序,请预留与未压缩数据相同的存储空间。 您需要的最大存储量足以满足使用工作文件数据库的最大并发活动组合的需求。 排序所需的存储量取决于以下变量:

  • 数据大小
  • 排序 键值大小
重要提示: 更改开始为了迁移到 Db2 12 ,您可能需要增加工作文件数据集和工作文件缓冲池的 32KB 工作文件分配。 如果您在之前的 Db2 版本中没有定义 32KB 工作文件,您可能需要在 Db2 12 中定义 32KB 工作文件。 为了改进排序处理和性能, Db2 12 使用了比之前的 Db2 版本更多的 32KB 工作文件。 为了对大量记录进行排序, Db2 12 可能需要 32KB 工作文件,尽管之前的版本没有使用它们。

Db2 12 使用 32KB 工作文件对大量记录进行分类时,如果 32KB 工作文件空间不足, Db2 12 将无法使用较小的工作文件。 需要排序的操作失败,并提示工作文件空间不足。

更改结束

您可以按以下方式估算排序所需的工作文件空间总量:

  • MIN表示从一组数值中选择最小值。
  • 设 FLOOR 为舍去实数小数部分的运算。
  • CEILING表示将实数向上舍入为下一个最大整数。
  • 数据为数据总长度(以字节为单位)。
  • 让键值等于排序键的总长度。
  • 行间记录为6字节记录头加2字节记录页映射项。
  • 以16字节长的 Prefix 作为标题。
  • Rows 表示排序的总行数。
  • 其中,S为细分市场大小
然后计算如下:
Records per page = MIN(MAXROWS, FLOOR (4056 / (Data + Key + Row-overhead)))

Total pages = CEILING (Rows / Records per page)

Total segments = CEILING (Total pages / Segsize)

Total pages used = Total segments + Segsize)

每页记录数不能超过255(MAXROWS的值)。

这个结果告诉您排序处理后工作文件数据库需要多大的存储空间。 然而,如果在排序处理过程中需要合并阶段,则在任何特定时间可能存在记录的额外中间副本。 对于大多数子系统,可以认为排序中涉及的大约一半记录都有两份副本。 因此, 1.5 的乘积值是安全的。 如果您想保守一些,请将乘数取值设为2。 因此,在排序处理期间,工作文件数据库的存储量可能会在排序处理后所需存储量的1-2倍之间变化。 如果可用缓冲池存储空间不足,实际使用的存储空间也会增加。

当结果表中包含大型对象(LOB)列,且结果表必须放置在工作文件中以便排序时,实际LOB列数据不会放置在工作文件中。 因此,LOB列不需要像 Db2 那样大幅增加工作文件空间。 对于工作文件计算,您可以假设工作文件的每个LOB列占用51字节存储空间。

但是,如果大型对象(LOB)列定义了INLINE属性,且结果表必须放置在工作文件中,则内联LOB数据将放置在工作文件中。 因此,工作文件计算需要考虑内联LOB的长度。

要确定所需的曲目数量,请将页数转换为字节数,然后除以单位字节数。 设 r 为每条轨道 4096 字节记录的数量,设 safety_factor 为 1.5 到 2.0 之间的某个数值。 对于3390个设备 ,r 为12。
Tracks = CEILING (Total pages used / r) * safety_factor

示例1 :假设有一个包含45327行的表( TABLE1 ),您想在 COL1 CHAR(3) NOT NULL、 COL2 CHAR(4)、 COL3 VARCHAR(20)和 COL4 SMALLINT上创建一个非唯一填充索引。 确定 Db2 创建索引所需的临时存储空间,如下所示:

  • 数据 = 3 + (4 + 1) + (20 + 1) + (2 + 1) + 4 = 36
  • = 36 (数据加RID是CREATE INDEX的关键)
  • 行数 = 45,327
  • 记录开销 = 8
  • 每页记录数 = MIN(MAXROWS, FLOOR (4056 / (36 + 36 + 12))) = 48
  • 总页数 = 最高限额(45327/50)= 907
  • = 顶棚(907/24)= 38
  • 总页数 = 38 * 24 = 912
  • 轨道 = 顶棚(912/12)* 1.5 = 114

示例1是工作文件数据库中存储索引键的数据页面计算。 以这个例子为例,需要114首曲目,存储在3390存储设备中。 VARCHAR列的2字节长度字段不是 CREATE INDEX的数据的一部分。 RID字段是数据的一部分, 密钥包括整个数据部分,包括RID。

示例2 :再次考虑 TABLE1 和以下SQL查询:

开始通用编程接口信息。
SELECT COL1,COL2,COL3,COL4
   FROM TABLE1
   ORDER BY COL2,COL3,COL1;
通用编程接口信息结束。

这个查询包含一个ORDER BY子句,需要进行排序。 确定此表所需的临时存储空间如下:

  • 数据 = 3 + (4 + 1) + (20 + 2 + 1) + (2 + 1) = 34
  • 关键 = (4 + 1) + (20 + 1) + 3 = 29
  • 行数 = 45,327
  • 记录开销 = 8
  • 段大小 = 24
  • 每页记录数 = MIN(MAXROWS, FLOOR (4056 / (34 + 29 + 12))) = 54
  • 总页数 (最终结果)=上限(45327/57)=796
  • (最终结果)=上限(796/24)=34
  • 总页数 = 34 * 24 = 816
  • 轨道 = 顶板(816/12)* 1.5 = 102
  • 总页数 (处理中)=上限( 1.5 * 796)=1194
  • 分段 (处理中)=上限( 1.5 * 34)=51
  • 已用总页数 (处理中)=上限(51*24)=1224
  • 轨迹(处理中 )= CEILING (1224 / 12) * 1.5 = 153

对于这个表格计算的例子,需要3390存储设备中的102个轨道。 VARCHAR列的2字节长度字段是数据的一部分,而并不包括整个数据部分

您可以使用排序汇总跟踪记录(IFCID 96)来简化一些计算。 该记录显示排序记录的数量、排序记录的大小(数据 + 钥匙 ),以及单个排序请求是否需要合并阶段。

另请注意,如果记录总长度 (数据 + + 前缀 )超过100字节, Db2 会尝试在页面大小为32 KB的表空间中创建工作文件。 如果记录总长度为100字节或更少, Db2 将使用一个页面大小为4 KB的表空间。

安装所需的存储空间

如果您正在安装 Db2 ,请使用以下计算来确定用于创建工作文件表空间的PRIQTY(主空间分配)或DSSIZE和MAXPARTITION值。 在安装过程中,您必须至少创建一个4 KB的工作文件表空间和一个32 KB的工作文件表空间。

4 KB工作文件表空间:
  • 总空间是指以兆字节为单位的总空间量(来自面板上TEMP 4K SPACE字段 DSNTIP9 )。
  • 表空间成为表空间的数量(来自面板 DSNTIP9 上的 TEMP 4K TBL SPACES 字段)。
  • CEILING表示将实数向上舍入为下一个最大整数。
  • 设GB每表空间为每个工作文件表空间所占空间(以千兆字节为单位)。
计算以下内容:
GB per table space = CEILING (total space / table spaces / 1024)

If GB per table space < 1 GB, then PRIQTY = CEILING (total space / table spaces
If GB per table space ≤ 16 384 GB, then DSSIZE = 4 GB 
	and MAXPARTITIONS = GB per table space / 4
Otherwise, DSSIZE = 4 GB and MAXPARTITIONS = 4096
32 KB工作文件表空间:
  • 总空间是指以兆字节为单位的总空间量(来自面板上TEMP 32K SPACE字段 DSNTIP9 )。
  • 可出租空间为餐桌空间数量(从面板上的临时 32K 餐桌空间字段 DSNTIP9 中获取)。
  • CEILING表示将实数向上舍入为下一个最大整数。
  • 设GB每表空间为每个工作文件表空间所占空间(以千兆字节为单位)。
计算以下内容:
GB per table space = CEILING (total space / table spaces / 1024)

If GB per table space < 1 GB, then PRIQTY = CEILING (total space / table spaces)
If GB per table space ≤ 16 384 GB, then DSSIZE = 4 GB 
	and MAXPARTITIONS = GB per table space / 4
If GB per table space ≤ 131 072 GB, then DSSIZE = 32 GB 
	and MAXPARTITIONS = GB per table space / 32
Otherwise, DSSIZE = 32 GB and MAXPARTITIONS = 4096