用户定义函数的统计信息
要创建用户定义函数 (UDF) 的统计信息,请编辑 SYSSTAT.ROUTINES 目录视图。
RUNSTATS 实用程序不会收集 UDF 的统计信息。 如果有 UDF 统计信息,那么优化器在估算各种存取方案的成本时就可以使用这些统计信息。 如果没有这些统计信息,那么优化器将使用缺省值,这些缺省值假定一个简单 UDF。
表 1 列出了可以为其提供估算以提高性能的目录视图列。 注意,用户只能修改 SYSSTAT.ROUTINES(而不是 SYSCAT.ROUTINES)中的列值。
| 统计信息 | 描述 |
|---|---|
| IOS_PER_INVOC | 每次调用函数时执行的读或写请求的估计数目 |
| INSTS_PER_INVOC | 每次调用函数时执行的机器指令的估计数目 |
| IOS_PER_ARGBYTE | 对每个输入自变量字节执行的读或写请求的估计数目 |
| INSTS_PER_ARGBYTE | 对每个输入自变量字节执行的机器指令的估计数目 |
| PERCENT_ARGBYTES | 函数实际处理的输入自变量字节所占的估计平均百分比 |
| INITIAL_IOS | 第一次或最后一次调用函数时执行的读或写请求的估计数目 |
| INITIAL_INSTS | 第一次或最后一次调用函数时执行的机器指令的估计数目 |
| CARDINALITY | 表函数生成的估计行数 |
例如,考虑 EU_SHOE,这个 UDF 将美国鞋码转换为等同的欧洲鞋码。 对于此 UDF,可以按如下方式设置 SYSSTAT.ROUTINES 中统计信息列的值:
- INSTS_PER_INVOC。 设置为执行下列操作所需的机器指令的估计数目:
- 调用 EU_SHOE
- 初始化输出字符串
- 返回结果
- INSTS_PER_ARGBYTE。 设置为将输入字符串转换为欧洲鞋码所需的机器指令的估计数目
- PERCENT_ARGBYTES。 设置为 100,指示要转换整个输入字符串
- INITIAL_INSTS、IOS_PER_INVOC、IOS_PER_ARGBYTE 和 INITIAL_IOS。 全都设置为 0,这是因为此 UDF 只执行计算
PERCENT_ARGBYTES 将由并非始终处理整个输入字符串的函数使用。 例如,考虑 LOCATE,这个 UDF
接受两个自变量作为输入,并返回第一个自变量在第二个自变量中第一次出现时的起始位置。 假定第一个自变量的长度小得相对于第二个自变量而言并不重要,那么平均来说将搜索第二个自变量的 75%。 根据此信息以及下列假定,应将 PERCENT_ARGBYTES 设置为 75:
- 有一半的机会找不到第一个自变量,这将导致搜索整个第二个自变量
- 第一个自变量在第二个自变量中任何位置出现的可能性相同,这将导致找到第一个自变量时搜索第二个自变量的一半(平均值)
您可以使用 INITIAL_INSTS 或 INITIAL_IOS 来记录第一次或最后一次调用函数时,所执行的机器指令或者读/写请求的估计数目;这可能代表成本,例如,设置暂存区的成本。
要获得关于某个 UDF 使用的 I/O 和指令的信息,请使用编程语言编译器或可用于操作系统的监视工具所提供的输出。