DDL 操作的性能注意事项

对数据定义语言 (DDL) 语句的定点变更操作会影响性能。因此,您应该监视未完成的定点变更,因为许多未完成的变更会影响后续 ALTER TABLE 语句。

oncheck -pT tablename 选项显示未完成的定点变更操作的数据页面版本。 数据页面仍存在旧定义时,定点变更是未完成的。

图 1 显示对 customer 演示表运行四个定点变更操作之后以下 oncheck 命令产生的输出的一部分:

图: customer 表的样本 oncheck -pT 输出

oncheck -pT stores_demo:customer

...
Home Data Page Version Summary

                        Version           Count

                        0 (oldest)           2
                        1           0
                        2           0
                        3           0
                        4 (current)           0
...
图 1 中的 Count 字段显示了当前正在使用该版本的表定义的页数。 此 oncheck 输出显示四个版本均未完成:
要点: 对表执行的定点变更越来越多时,每个后续 ALTER 语句或对含有未完成变更的表执行的 SQL 语句会花费比上一个语句更多的时间。因此,应定期找出未完成的定点变更,然后运行哑元 UPDATE 语句,以强制未完成的定点变更完成。您可以每周或每月找出未完成的变更,具体取决于您的环境。

如果您的目标是节省运行时 CPU,那么可计划对表保留尽可能少的未完成变更操作(一般不超过 3 或 4 个)。如果您的目标是节省磁盘空间,且您的变更操作会添加或增加列,那么保留未完成的定点变更有助于减少磁盘空间。

在复制环境中,您可能需要进行一些试验,才能确定最佳的定点变更管理方式。

您可以使用哑元 UPDATE 语句将数据页面转换为最新定义。例如:以下将列值设置为现有值的语句会使数据库服务器将数据页面转换成最新的定义:
UPDATE tab1 SET col1 = col1;

此语句不更改任何数据值,只是将数据页面的格式转换成最新定义。

在表的所有页上均执行更新以后,oncheck -pT 命令会在 Count 字段中显示表的当前版本的总数据页面数。