使用临时表或大型排序操作的应用程序需要大量的临时空间。要提高这些应用程序的性能,请使用 DBSPACETEMP 配置参数或 DBSPACETEMP 环境变量以将一个或多个数据库空间指定给临时表和排序文件。
根据创建临时空间的方式,在不设置 DBSPACETEMP 时,数据库服务器对临时表和排序文件使用以下缺省位置:
- 当前数据库的数据库空间,使用 CREATE TABLE 语句的 TEMP TABLE 子句创建显式临时表,且没有在 IN dbspace 或 FRAGMENT BY
子句中为表指定数据库空间时
此操作会严重影响该数据库空间的 I/O。如果镜像了根数据库空间,临时表或排序文件的 I/O 的加倍写入性能会稍微降低。
- 根数据库空间,使用 SEKLECT 语句的 INTO TEMP 选项创建显式临时表时
此操作会严重影响根数据库空间的 I/O。如果镜像了根数据库空间,临时表或排序文件的 I/O 的加倍写入性能会稍微降低。
- 以下变量之一指定的操作系统目录或文件:
数据库服务器使用操作系统目录或文件来定向以下数据库操作所产生的任何溢出:
- 带 GROUP BY 子句的 SELECT 语句
- 带 ORDER BY 子句的 SELECT 语句
- 散列连接操作
- 嵌套循环连接操作
- 索引构建
警告: 如果没有为 DBSPACETEMP 配置参数或 DBSPACETEMP 环境变量指定值,那么数据库服务器将此操作系统文件用于隐式临时表。如果此文件系统的空间不足,无法保存排序文件,那么执行排序的查询将返回错误。同时,在除去排序文件之前,操作系统可能会受到严重影响。
使用为存储临时表和排序文件而专门创建的临时数据库空间可以改善性能。使用 DBSPACETEMP 配置参数和 DBSPACETEMP 环境变量可以将这些表和文件分配到临时数据库空间。
当在 DBSPACETEMP 配置参数或
DBSPACETEMP 环境变量中指定数据库空间时,可以获得以下性能优势:
- 减少对根数据库空间、生产数据库空间或操作系统文件的 I/O 影响
- 当为临时表指定多个数据库空间且 PDQ 优先级设置为大于 0 时,将在临时文件中使用并行排序(以处理 ORDER BY 或 GROUP BY 之类的查询子句,或在执行 CREAT INDEX 时对索引键排序)。
- 将两个或更多的数据库空间分配到不同的磁盘上时,可以提高数据库服务器创建临时表的速度
- 运行 SELECT....INTO TEMP 语句时自动跨数据库空间对临时表进行分段
下表显示用于创建临时表的语句以及有关在何处创建临时表的信息。
创建临时表的语句 |
记录数据库 |
WITH NO LOG 子句 |
FRAGMENT BY 子句 |
创建临时表的位置 |
CREATE TEMP TABLE |
是 |
否 |
否 |
根数据库空间 |
CREATE TEMP TABLE |
是 |
是 |
否 |
在 DBSPACETEMP 中指定的数据库空间之一 |
CREATE TEMP TABLE |
是 |
否 |
是 |
无法创建临时表。错误 229/196 |
SELECT ..INTO TEMP |
是 |
是 |
否 |
按循环分段(仅限在 DBSPACETEMP 中指定的不记入日志的数据库空间中) |
要点: 请使用 DBSPACETEMP 配置参数或 DBSPACETEMP 环境变量来提高排序操作的性能,并防止数据库服务器意外填充文件系统。列出的数据库空间必须由作为未缓冲的设备而分配的块组成。