提高负载性能
根据数据、目标对象和可用资源,您可以采取某些措施来提高LOAD实用程序的性能。 例如,您可以预处理输入数据或指定特定的LOAD选项。
关于本任务
请注意,在按哈希值排序的表上执行LOAD操作可能会比较慢。 原因是,行不是按顺序加载到页面上,而是根据哈希键加载。
过程
为了提升负载性能,请根据需要完成以下一项或多项建议的操作:
- 以内部格式加载数字数据。DB2 内部格式是指使用 FORMATINTERNAL 选项运行 UNLOAD 时生成的格式。
- 如果指定LOAD REPLACE,请指定LOG NO和COPYDDN或RECOVERYDDN以创建内联副本。
- 预处理输入数据:
按照运行LOAD之前所述,对输入数据进行预处理。
对输入数据进行预处理:为确保输入数据排序合理,请指定PRESORT选项。 或者,您可以按照以下步骤手动预分类数据:
- 按集群顺序对数据进行排序,避免在加载后需要重新组织。
- 如果您正在加载一个最多包含一个外键或一个索引键的表,请按键顺序对数据进行排序。 (允许外键索引。) 如果键是索引键,则根据索引的定义,按升序或降序对数据进行排序。 如果键是外键,则按升序对数据进行排序。 空键值被视为
高
值。 - 如果您要加载多个表格,请选择以下方法之一:
- 分别加载每个表格。 如果您使用这种方法,可以遵循前文所列的加载单个表格的规则。
- 在LOAD语句的每个INTO TABLE选项下使用WHEN子句,按表对输入数据进行分组。
如果您手动预分类数据,请在LOAD语句中指定PRESORTED YES选项。

- 避免转换:
- 如果可能,请避免数据转换,例如从整数到小数或从小数到浮点。
- 如果可能,通过加载与目标表具有相同CCSID的数据,避免CCSID和编码方案转换。 如果您指定的 CCSID 或编码方案选项与正在加载的表格中的选项不匹配,则会发生 CCSID 转换。
相关信息: - 避免LOB和XML的实体化 :为了在LOAD运行时无需将大型LOB或XML文档加载到虚拟存储中,请对以下数据使用文件引用变量:
- 适用于大于32 KB的XML数据。
- 对于仅包含一个LOB的大型LOB数据行。 (通常认为大LOB的大小为2 MB或更大。)
在这些情况下,LOAD不会将LOB或XML数据存储到内存中。
- 使用并列:尽可能让LOAD使用并行处理,以减少加载大量数据的时间。 要启用并行,请执行以下操作之一:
- 如果表空间是简单的、分段的(非 UTS)、分区(非 UTS)或按范围分区的,并且要加载的所有数据都在单个数据集中,请指定 PARALLEL 关键字。 LOAD使用此关键字能够并行处理多个子任务。 当您确定要在 PARALLEL 关键字上指定的并行度时,请考虑高并行度可能会增加处理器时间。 建议使用指定为PARALLEL(0)或不带数字的PARALLEL,以便 Db2 确定最佳的并行度。
- 如果表空间被分区,且存在一个或多个非分区二级索引,并且您为每个分区都准备了单独的输入数据集,请使用分区并行。 分区并行将所有分区加载到单个作业中。 要调用分区并行,请在每个分区中指定带有 INDDN 规范的 INTO TABLE PART 子句。
或者,如果您无法启用并行处理,请使用多个作业,针对不同的分区同时运行LOAD。 这种方法还要求您为每个分区准备单独的输入数据集。
如果启用并行处理,请根据需要分配额外资源并调整系统,以避免性能大幅下降。 具体来说,当您使用LOAD SHRLEVEL CHANGE或并行插入时,尤其是使用二级索引时,要受益于并行操作,请采取以下措施:
- 使用更大的缓冲池来提高缓冲池命中率。
- 设置更高的延迟写入阈值,减少写入磁盘的页面数量,从而缩短I/O时间并减少争用。
- 设置更大的检查点间隔,减少写入磁盘的页数,从而减少I/O时间和争用。
- 使用ESS并行访问卷(PAV)支持多个并发I/O访问包含二级索引数据集的同一卷。
- 使用辅助索引部件支持多个并发辅助索引I/O。
要从单个输入数据集加载时完全最大化并行任务,请明确指定 PARALLEL 关键字。 如果从单个输入数据集加载且未指定 PARALLEL,则 PARAMDEG_UTIL 子系统参数仅限制并行索引构建的并行度。
- 使用排序键:SORTKEYS选项可提高索引键排序的性能。 使用SORTKEYS,索引键在内存中传递,而不是写入工作文件。 避免工作文件的I/O可以提高LOAD性能。 使用排序键加载(LOAD with SORTKEYS)功能还可以减少 SYSUT1 和SORTOUT数据集所需的磁盘空间,尤其是当您提供排序键数量估算时。 SORTKEYS选项缩短了从RELOAD阶段开始到BUILD阶段结束的时间。
估算需要排序的键的数量:
- 每个索引计为1。
- 对于外键和索引定义不相同的每个外键,计数为1。
- 对于外键和索引定义相同的每个外键:
- 对于外键参与的第一段关系,计数为0。
- 计算外键参与(如果有)的后续关系中的第1个。
- 将计数乘以要加载的行数。
如果加载了多个表格,请对每个表格重复上述步骤,并求和。
- 并行构建索引:对于具有多个已定义索引的表空间或分区,您可以通过让LOAD并行构建索引来减少LOAD作业的运行时间。 请参阅 LOAD的并行构建索引。
- 指定格式:PREFORMAT 无需 Db2 在执行期间在表格空间中预先设置新页面。
Db2 预格式化有时会导致延迟,从而影响应用程序的性能或执行时间的一致性,这些应用程序会使用SHRLEVEL CHANGE进行多次插入或加载操作。 当出现这些延迟时,您可以预测业务处理周期的表大小,考虑使用LOAD PREFORMAT或REORG PREFORMAT。 只有当 Db2 预格式化导致处理出现可测量的延迟,或导致INSERT操作或LOAD RESUME YES SHRLEVEL CHANGE作业的应用运行时间不一致。
建议 :在使用LOAD PREFORMAT或REORG PREFORMAT之前和之后评估性能,以量化其在您环境中的价值。使用PREFORMAT可能会消除执行时间的延迟,但会增加应用程序执行前的设置时间。 这种改进的成本是LOAD或REORG时间的增加,因为实用程序必须在加载或重组的数据与高分配RBA之间预先格式化所有页面。 所需的额外加载或重组时间取决于预格式化磁盘空间的大小。 当使用这个预先格式化的空间,并且 Db2 需要扩展表格空间时,系统会自动进行常规数据集扩展和预格式化。
在以下情况下,请考虑对LOAD SHRLEVEL CHANGE或INSERT处理使用预格式化:
- 适用于插入大量数据且数据量可预测的表格。 在这种情况下,在应用程序执行之前,所有所需空间都可以预先分配。
- 用于存储进入系统的工作项,这些工作项随后用于处理工作项的后端任务。
- 对于在针对表空间运行任何查询访问之前,表空间一开始是空的,然后插入了许多数据。
如果读取操作导致表空间扫描,则不建议对读取与插入操作比率较高的表使用LOAD PREFORMAT或REORG PREFORMAT。 在这种情况下,预先格式化包含用于查询处理的表的表空间可能会导致表空间扫描读取额外的空页面。 这些额外的读取可能会延长查询时间。
在预格式化的表空间中混合插入和非索引查询可能会对查询性能产生负面影响,而不会在插入性能方面带来补偿性的提升。 通常,在插入操作与读取操作的比例较高的情况下,PREFORMAT能够产生最佳结果。
此外,请考虑PREFORMAT对您的数据集的以下影响:
- 对于用户管理的数据集, Db2 在实用程序处理期间不会删除和重新分配它们。 数据集的大小不会缩小回原始数据集分配的大小,但如果添加更多空间或数据,则大小保持不变或增加。 当使用LOAD或REORG PREFORMAT时,此特性会产生影响,因为会对高使用率RBA(或页面)和高分配率RBA之间的所有空闲页面进行预格式化。 预格式化包括已分配的二级范围。
- 管理数据集, Db2 -管理数据集, Db2 如果您在LOAD或REORG作业中指定REPLACE,则删除并重新分配它们。 这种行为会导致数据集被调整到原来的分配大小。 如果重新加载的数据没有填满主分配空间,也不会强制进行次分配,则它们将保持该大小。 因此,LOAD PREFORMAT或REORG PREFORMAT与 Db2 -管理数据,导致数据重新加载到表空间后,至少要对数据集进行完全的主分配预格式化。
- 对于用户管理和 Db2 -管理数据集,如果数据集在实用程序处理期间进入二级范围,则高分配的RBA将成为二级范围的终点。 这个值成为预格式化的高价值。