CREATE THRESHOLD 语句
CREATE THRESHOLD 语句将定义一个阈值。
调用
此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。
权限
语句的授权标识所拥有的特权必须包括 WLMADM 或 DBADM 权限。
语法
描述
- threshold-name
- 指定阈值。 这是一部分名称。 它是普通或定界 SQL 标识。 threshold-name 不能标识当前服务器上已存在的阈值 (SQLSTATE 42710)。 此名称不能以字符“SYS”开头 (SQLSTATE 42939)。
- FOR threshold-domain ACTIVITIES
- 指定阈值的定义域。
- 数据库
- 此阈值适用于数据库中的任何活动。
- SERVICE CLASS service-class-name
- 此阈值适用于在服务类 service-class-name 中执行的活动。 如果未指定 UNDER,那么 service-class-name 必须标识现有服务超类 (SQLSTATE 42704)。 如果指定了 UNDER,那么 service-class-name 必须标识在 UNDER 关键字之后指定的服务超类的现有服务子类 (SQLSTATE 42704)。 service-class-name 不能是 SYSDEFAULTSYSTEMCLASS 服务类或 SYSDEFAULTMAINTENANCECLASS 服务类 (SQLSTATE 5U032)。
- UNDER service-class-name
- 指定服务超类。 service-class-name 必须标识现有服务超类 (SQLSTATE 42704)。
- STATEMENT
- 此阈值适用于特定 SQL 语句的活动。 可通过指定语句文本或语句的可执行标识来标识要用于阈值的语句。
- TEXT statement-text
- 此阈值适用于与 statement-text 中指定的文本匹配的语句。 在评估阈值条件时,需要考虑静态 SQL 语句和动态 SQL 语句。 在运行时,为 statement-text 指定的文本必须与要违反阈值的包高速缓存中的语句文本完全匹配。 如果字母大小写存在差异或使用了空格,都会阻止 statement-text 与任何正在运行的 SQL 语句进行匹配。 必须以字符串常量的形式指定 statement-text 的文本。 因此,语句阈值的语句文本的最大长度为 32 672 字节,而不是语句通用的上限 2 MB。
存取方案差异不会影响语句匹配。 具有相同文本但存取方案不同的多个缓存语句可以与 statement-text 所定义的阈值文本匹配。
如果在编译期间以不同于 statement-text 的方式更改或转换了与为 statement-text 提供的语句匹配的语句,那么这些语句将不匹配。 例如,如果启用了语句集中器,那么字面值可能会替换为参数标记。 此类变换不会应用于针对 CREATE THRESHOLD 语句中 statement-text 提供的文本。 提供给 CREATE THRESHOLD 的文本必须与任何相关语句的转换文本完全匹配。 您可以使用监视表函数(如 MON_GET_PKG_CACHE_STMT 和 MON_GET_ACTIVITY_DETAILS)来确定所执行语句的确切文本。
下列谓词可与语句阈值一起使用:- ACTIVITYTOTALRUNTIME
- ACTIVITYTOTALTIME
- CPUTIME
- ESTIMATEDSQLCOST
- SQLROWSREAD
- SQLROWSRETURNED
- SQLTEMPSPACE
- REFERENCE executable-id
- 此阈值适用于其文本与具有指定可执行标识的语句文本匹配的语句。 数据库管理器使用可执行标识在包高速缓存的相应部分中查找语句的文本。 用于阈值的语句文本是在创建阈值时为该部分缓存的文本。 对于动态 SQL,可执行标识引用的语句必须位于包高速缓存中。 对于静态 SQL,如果语句不在高速缓存中,那么数据库管理器将从系统目录中检索该语句。
- WORKLOAD workload-name
- 此阈值适用于指定的工作负载。 workload-name 必须标识现有工作负载 (SQLSTATE 42704)。
- ENFORCEMENT enforcement-scope
- 阈值的执行作用域。
- 数据库
- 将在定义域中的所有 成员 之间实施阈值; 即,数据库的所有 成员 以及服务类的所有 成员 。
- MEMBER
- 将对每个 成员 强制实施阈值。 所有 成员 之间没有协调来强制实施阈值。
- WORKLOAD OCCURRENCE
- 仅在工作负载实例中实施该阈值。 在同一 成员 上同时运行的两个工作负载实例将各有各自的此阈值的运行计数。
- ENABLE 或 DISABLE
- 指定是否启用阈值以供数据库管理器使用。
- ENABLE
- 数据库管理器使用阈值来限制数据库活动的执行。
- DISABLE
- 数据库管理器不使用阈值来限制数据库活动的执行。
- WHEN threshold-predicate
- 指定阈值的条件。
- TOTALMEMBERCONNECTIONS > integer-value
- 此条件定义可以在 成员上并发运行的协调程序连接数的上限。 此值可以为零或任何正整数 (SQLSTATE 42820)。 零值表示将阻止建立任何新的协调程序连接。 所有当前正在运行或排队的连接都将继续运行。 此条件的定义域必须是 DATABASE,并且执行作用域必须是 MEMBER (SQLSTATE 5U037)。 不会对具有 DBADM 或 WLMADM 权限的用户实施此阈值。
- TOTALSCMEMBERCONNECTIONS > integer-value
- 此条件定义可以在特定服务超类中的 成员 上并发运行的协调程序连接数的上限。 此值可以为零或任何正整数 (SQLSTATE 42820)。 零值表示将阻止任何新连接加入服务类。 所有当前正在运行或排队的连接都将继续运行。 此条件的定义域必须是 SERVICE SUPERCLASS ,并且实施作用域必须是 MEMBER (SQLSTATE 5U037)。
- AND QUEUEDCONNECTIONS > integer-value 或 AND QUEUEDCONNECTIONS UNBOUNDED
- 指定在超出最大协调程序连接数时的队列大小。 此值可以是任何正整数(包括零)(SQLSTATE 42820)。 零值表示没有排队的协调程序连接。 指定 UNBOUNDED 会将超出指定的最大协调程序连接数的每个连接排队,并且从不执行 threshold-exceeded-actions。 缺省值为 0。
- CONNECTIONIDLETIME > integer-value DAY | DAYS | HOUR | HOURS | MINUTE | MINUTES
- 此条件定义数据库管理器允许连接保持空闲状态的时间量的上限。 此值可以是任何正整数(非零)(SQLSTATE 42820)。 使用有效的持续时间关键字来指定 integer-value 的相应时间单位。 此条件的定义域必须是 DATABASE 或 SERVICE SUPERCLASS,并且执行作用域必须是 DATABASE (SQLSTATE 5U037)。 此条件在协调程序 成员上实施。
如果您使用 CONNECTIONIDLETIME 阈值指定 STOP EXECUTION 操作,那么超过阈值时将断开该应用程序的连接。 应用程序访问数据服务器的任何后续尝试都会收到 SQLSTATE 5U026。
此阈值的最大值为 2 147 483 640 秒。 如果指定的任何值所对应的秒数超出 2 147 483 640 秒,那么会将值设置为此秒数。
- CONCURRENTWORKLOADOCCURRENCES > integer-value
- 此条件定义每个 成员上工作负载的并发出现次数的上限。 此值可以是任何正整数(非零)(SQLSTATE 42820)。 此条件的定义域必须是 WORKLOAD ,并且实施作用域必须是 MEMBER (SQLSTATE 5U037)。
- CONCURRENTWORKLOADACTIVITIES > integer-value
- 此条件定义每个 成员上的工作负载的并发协调程序活动数和嵌套活动数的上限。 此值可以是任何正整数(非零)(SQLSTATE 42820)。 此条件的定义域必须是 WORKLOAD ,并且此条件的实施作用域必须是 WORKLOAD 实例 (SQLSTATE $TAG1 5U037 $TAG2)。每个嵌套活动都必须满足以下条件:
- 它必须是已识别的协调程序活动。 任何不属于已识别的活动类型的嵌套协调程序活动都不计入在内。 同样,嵌套子代理程序活动(例如,远程节点请求)也不计入在内。
- 必须从用户逻辑中直接调用这类活动,例如,发出 SQL 语句的用户编写过程。
内部 SQL 活动(例如,通过设置约束或刷新具体化查询表而启动的活动)也不计入此阈值,因为它们是由数据库管理器启动的,而不是由用户逻辑直接调用的。
- CONCURRENTDBCOORDACTIVITIES > integer-value
- 此条件定义可同时在指定域中的所有 成员 上运行的可识别数据库协调程序活动数的上限。 此值可以为零或任何正整数 (SQLSTATE 42820)。 零值表示将阻止执行任何新的数据库协调程序活动。 所有当前正在运行或排队的数据库协调程序活动将继续执行。 此条件的定义域必须是 DATABASE、工作操作(工作操作定义域的阈值是使用 CREATE WORK ACTION SET 或 ALTER WORK ACTION SET 语句创建的,并且工作操作集必须应用于工作负载或数据库)、SERVICE SUPERCLASS 或 SERVICE SUBCLASS。 此外,在除 Db2® pureScale®以外的环境中,强制实施作用域必须为 DATABASE (SQLSTATE 5U037) ,其中在整个数据库中强制实施了该条件,而在 Db2 pureScale 中,必须在每个协调程序成员中强制实施了该条件的 MEMBER (SQLSTATE 5U037)。 此条件将跟踪所有活动,但以下项除外:
- CALL 语句不受此阈值控制,但在被调用例程内启动的所有嵌套子活动都受此阈值控制。 匿名块和自治例程被归类为 CALL 语句。
- 用户定义的函数受此阈值控制,但嵌套在用户定义函数中的子活动不受此阈值控制。 如果在用户定义的函数内调用自治例程,那么自治例程及其任何子活动都不受阈值控制。
- 用于调用 CALL 语句的触发器操作和这些 CALL 语句的子活动不受此阈值控制。 可导致激活触发器的 INSERT、UPDATE 或 DELETE 语句会继续受阈值控制。
- 要使用 CALL 语句管理并发性,您可以使用 TOTALSCPARTITIONCONNECTIONS 阈值。 如果工作负载由瞬态连接组成,那么 TOTALSCPARTITIONCONNECTIONS 阈值可有效控制 CALL 语句的并发性。 瞬态连接是仅在过程调用期间建立的连接。 如果工作负载由长期连接组成,那么 TOTALSCPARTITIONCONNECTIONS 阈值不适用。
当阈值定义为工作操作集的一部分时,将根据当前环境自动确定实施作用域 (如果当前环境为 Db2 pureScale; 如果当前环境为其他环境,那么将自动确定实施作用域)。
重要信息: 在使用 CONCURRENTDBCOORDACTIVITIES 阈值之前,请确保熟悉这些阈值可能对数据库系统产生的影响。有关更多信息,请参阅 CONCURRENTDBCOORDACTIVITIES 阈值 。
- AND QUEUEDACTIVITIES > integer-value 或 AND QUEUEDACTIVITIES UNBOUNDED
- 指定在超出最大数据库协调程序活动数时的队列大小。 此值可以为零或任何正整数 (SQLSTATE 42820)。 零值表示没有排队的数据库协调程序活动。 指定 UNBOUNDED 会将超出指定的最大数据库协调程序活动数的每个数据库协调程序活动排队,并且从不执行 threshold-exceeded-actions。 缺省值为 0。注: 如果为排队阈值指定了阈值操作 CONTINUE ,那么将有效使队列大小不受限制,而不考虑为队列大小指定的任何硬值。
- ESTIMATEDSQLCOST > bigint-value
- 此条件定义活动的优化器分配成本(以 timeron 为单位)的上限。 此值可以是任何正整数(非零)(SQLSTATE 42820)。 此条件的定义域必须是 DATABASE、工作操作(工作操作定义域的阈值是使用 CREATE WORK ACTION SET 或 ALTER WORK ACTION SET 语句创建的,并且工作操作集必须应用于工作负载或数据库)、SERVICE SUPERCLASS、SERVICE SUBCLASS 或 WORKLOAD,并且执行作用域必须是 DATABASE(SQLSTATE 5U037)。 此条件在协调程序 成员上实施。 此条件跟踪的活动包括:
- 类型为数据操作语言 (DML) 的协调程序活动。
- 从用户逻辑中调用的嵌套 DML 活动。 因此,此条件将不跟踪数据库管理器可通过内部 SQL 启动的 DML 活动(除非它们的成本包含在父项的估算中,在这种情况下,它们是被间接跟踪的)。
- SQLROWSRETURNED > integer-value
- 此条件定义从应用程序服务器返回到客户机应用程序的行数的上限。 此值可以是任何正整数(非零)(SQLSTATE 42820)。 此条件的定义域必须是 DATABASE、工作操作(工作操作定义域的阈值是使用 CREATE WORK ACTION SET 或 ALTER WORK ACTION SET 语句创建的,并且工作操作集必须应用于工作负载或数据库)、SERVICE SUPERCLASS、SERVICE SUBCLASS 或 WORKLOAD,并且执行作用域必须是 DATABASE(SQLSTATE 5U037)。 此条件在协调程序 成员上实施。 此条件跟踪的活动包括:
- 类型为 DML 的协调程序活动。
- 从用户逻辑中派生的嵌套 DML 活动。 数据库管理器通过内部 SQL 启动的活动不受此条件影响。
- ACTIVITYTOTALTIME > integer-value DAY | DAYS | HOUR | HOURS | MINUTE | MINUTES | SECONDS
- 此条件定义数据库管理器允许活动执行的时间量的上限(包括活动的排队时间)。 此条件的定义域必须是 DATABASE、工作操作(工作操作定义域的阈值是使用 CREATE WORK ACTION SET 或 ALTER WORK ACTION SET 语句创建的,并且工作操作集必须应用于工作负载或数据库)、SERVICE SUPERCLASS、SERVICE SUBCLASS 或 WORKLOAD,并且执行作用域必须是 DATABASE(SQLSTATE 5U037)。 在协调程序 成员上逻辑上强制实施此条件。
指定的 integer-value 必须是大于零的整数 (SQLSTATE 42820)。 使用有效的持续时间关键字来指定 integer-value 的相应时间单位。 如果指定的时间单位为 SECONDS,那么该值必须是 10 的倍数 (SQLSTATE 42615)。 可针对此阈值指定的最大值为 2 147 483 640 秒。 如果任何值(使用 DAY、HOUR、MINUTE 或 SECONDS 时间单位)对应的秒数大于最大值,那么将返回一个错误 (SQLSTATE 42615)。
- UOWTOTALTIME > integer-value DAY | DAYS | HOUR | HOURS | MINUTE | MINUTES | SECONDS
- 此条件定义数据库管理器允许工作单元执行的时间量的上限。 此值可以是任何非零正整数 (SQLSTATE 42820)。 使用有效的持续时间关键字来指定 integer-value 的相应时间单位。 如果指定的时间单位为 SECONDS,那么该值必须是 10 的倍数 (SQLSTATE 42615)。 此条件的定义域必须是 DATABASE、SERVICE SUPERCLASS 或 WORKLOAD,并且执行作用域必须是 DATABASE (SQLSTATE 5U037)。 此条件在协调程序 成员上实施。
可针对此阈值指定的最大值为 2 147 483 640 秒。 如果任何值(使用 DAY、HOUR、MINUTE 或 SECONDS 时间单位)对应的秒数大于最大值,那么将返回一个错误 (SQLSTATE 42615)。
- SQLTEMPSPACE > integer-value K | M | G
- 此条件定义 成员上的 SQL 语句可以使用的最大系统临时空间量。 此值可以是任何正整数(非零)(SQLSTATE 42820)。
如果指定了 integer-value K(采用大写或小写形式),那么最大大小为 integer-value 的 1024 倍。 如果指定了 integer-value M,那么最大大小为 integer-value 的 1 048 576 倍。 如果指定了 integer-value G,那么最大大小为 integer-value 的 1 073 741 824 倍。
此条件的定义域必须是 DATABASE、工作操作(工作操作定义域的阈值是使用 CREATE WORK ACTION SET 或 ALTER WORK ACTION SET 语句创建的,并且工作操作集必须应用于工作负载或数据库)、SERVICE SUPERCLASS、SERVICE SUBCLASS 或 WORKLOAD,并且执行作用域必须是 MEMBER (SQLSTATE 5U037)。 此条件跟踪的活动包括:- 类型为 DML 的协调程序活动,及相应的子代理程序工作(子节执行)。
- 派生自用户逻辑及其对应子代理程序工作(子节执行)的嵌套 DML 活动。 由数据库管理器通过内部 SQL 启动的活动不受此条件影响。
- AGGSQLTEMPSPACE > integer-value K | M | G
此条件定义 成员上服务类中的一组语句可以使用的最大系统临时空间量。 此值可以是任何正整数(非零)(SQLSTATE 42820)。
如果指定了 integer-value K(采用大写或小写形式),那么最大大小为 integer-value 的 1024 倍。 如果指定了 integer-value M,那么最大大小为 integer-value 的 1 048 576 倍。 如果指定了 integer-value G,那么最大大小为 integer-value 的 1 073 741 824 倍。
此条件的定义域必须是 SERVICE SUBCLASS,并且执行作用域必须是 MEMBER (SQLSTATE 5U037)。
此条件跟踪的聚合所涉及的活动包括:
- 类型为 DML 的协调程序活动和相应的子代理程序工作(如子节执行)。
- 派生自用户逻辑及其相应子代理程序工作(如子节执行)的嵌套 DML 活动。 数据库管理器通过内部 SQL 语句启动的活动不受此条件影响。
- SQLROWSREAD > bigint-value
- 此条件定义特定 成员上活动在其生存期内可读取的行数的上限。 此值可以是任何正整数(非零)(SQLSTATE 42820)。 请注意,读取的行数与返回的行数不同,后者由 SQLROWSRETURNED 条件控制。
此条件的定义域必须是 DATABASE、SERVICE CLASS、服务子类(指定 UNDER 子句的 SERVICE CLASS)、WORKLOAD 或工作操作(工作操作定义域的阈值是使用 CREATE WORK ACTION SET 或 ALTER WORK ACTION SET 语句创建的,并且工作操作集必须应用于工作负载或数据库),并且执行作用域必须是 MEMBER (SQLSTATE 5U037)。 此条件在每个 成员上独立实施。
此条件跟踪的活动包括:
- 类型为 DML 的协调程序活动和相应的子代理程序工作(如子节执行)。
- 内部 SQL 活动(例如,通过设置约束或刷新具体化查询表而启动的活动)也不计入此阈值,因为它们是由数据库管理器启动的,而不是由用户逻辑直接调用的。
- CHECKING EVERY integer-value SECOND | SECONDS
- 指定检查活动阈值条件的频率。 将在每个请求(例如,访存操作)的末尾并按 CHECKING 子句定义的时间间隔检查该阈值。 CHECKING 子句定义可能未检测到阈值违例的时间的上限。 缺省值是 60 秒。 该值可以是任何正整数(非零),最大值为 86400 秒 (SQLSTATE 42820)。 设置较低的值可能会对系统性能产生负面影响。
- SQLROWSREADINSC > bigint-value
- 此条件定义特定 成员 上的活动在服务子类中执行时可以读取的行数的上限。 在指定的服务子类中执行之前读取的行不计入在内。 此值可以是任何正整数(非零)(SQLSTATE 42820)。 请注意,读取的行数与返回的行数不同,后者由 SQLROWSRETURNED 条件控制。
此条件的定义域必须是服务子类(指定 UNDER 子句的 SERVICE CLASS),并且执行作用域必须是 MEMBER (SQLSTATE 5U037)。 此条件在每个 成员上独立实施。
此条件跟踪的活动包括:
- 类型为 DML 的协调程序活动和相应的子代理程序工作(如子节执行)。
- 内部 SQL 活动(例如,通过设置约束或刷新具体化查询表而启动的活动)也不计入此阈值,因为它们是由数据库管理器启动的,而不是由用户逻辑直接调用的。
- CHECKING EVERY integer-value SECOND | SECONDS
- 指定检查活动阈值条件的频率。 将在每个请求(例如,访存操作)的末尾并按 CHECKING 子句定义的时间间隔检查该阈值。 CHECKING 子句定义可能未检测到阈值违例的时间的上限。 缺省值是 60 秒。 该值可以是任何正整数(非零),最大值为 86400 秒 (SQLSTATE 42820)。设置较低的值可能会对系统性能产生负面影响。
- CPUTIME > integer-value HOUR | HOURS | MINUTE | MINUTES | SECOND | SECONDS
- 此条件定义特定 成员上的活动在其生存期内可能耗用的处理器时间量的上限。 此阈值跟踪的处理器时间是从活动开始执行的时间开始测量的。 此值可以是任何正整数(非零)(SQLSTATE 42820)。
此条件的定义域必须是 DATABASE、服务超类 (SERVICE CLASS)、服务子类(指定 UNDER 子句的 SERVICE CLASS)、WORKLOAD 或工作操作(工作操作定义域的阈值是使用 CREATE WORK ACTION SET 或 ALTER WORK ACTION SET 语句创建的,并且工作操作集必须应用于工作负载或数据库),并且执行作用域必须是 MEMBER (SQLSTATE 5U037)。 此条件在每个 成员上独立实施。
此条件跟踪的活动包括:
- 类型为 DML 的协调程序活动和相应的子代理程序工作(如子节执行)。
- 内部 SQL 活动(例如,通过设置约束或刷新具体化查询表启动的活动)也不会被此阈值跟踪,因为它们是由数据库管理器启动的,而不是由用户逻辑直接调用。
- 类型为 CALL 的活动。 对于 CALL 活动,过程跟踪的处理器时间不包括任何子活动或任何受防护方式进程使用的处理器时间。 仅当从用户逻辑返回到数据库引擎时,才会检查阈值条件。 例如:在执行可信例程期间,仅当例程向数据库引擎发出请求时,才会检查阈值条件。
- CHECKING EVERY integer-value SECOND | SECONDS
- 指定检查活动阈值条件的频率。 CPUTIME 阈值的粒度大约是这个数字乘以活动的并行度。 例如:如果每 60 秒检查一次阈值,并且并行度为 2,那么在检测到阈值违例之前,活动可能使用额外 2 分钟(而不是 1 分钟)的处理器时间。 缺省值是 60 秒。 该值可以是任何正整数(非零),最大值为 86400 秒 (SQLSTATE 42820)。 设置较低的值可能会对系统性能产生负面影响。
- CPUTIMEINSC > integer-value HOUR | HOURS | MINUTE | MINUTES | SECOND | SECONDS
- 此条件定义活动在特定 成员 上执行特定服务子类时可能耗用的处理器时间量的上限。 此阈值跟踪的处理器时间是从活动开始在阈值域中标识的服务子类中执行的时间开始测量的。 在该点之前使用的任何处理器时间都不会计入此阈值所强加的限制。 此值可以是任何正整数(非零)(SQLSTATE 42820)。
此条件的定义域必须是服务子类(指定 UNDER 子句的 SERVICE CLASS),并且执行作用域必须是 MEMBER (SQLSTATE 5U037)。 此条件在每个 成员上独立实施。
此条件跟踪的活动包括:
- 类型为 DML 的协调程序活动和相应的子代理程序工作(如子节执行)。
- 内部 SQL 活动(例如,通过设置约束或刷新具体化查询表启动的活动)也不会被此阈值跟踪,因为它们是由数据库管理器启动的,而不是由用户逻辑直接调用。
- 类型为 CALL 的活动。 对于 CALL 活动,过程跟踪的处理器时间不包括任何子活动或任何受防护方式进程使用的处理器时间。 仅当从用户逻辑返回到数据库引擎时,才会检查阈值条件。 例如:在执行可信例程期间,仅当例程向数据库引擎发出请求时,才会检查阈值条件。
- CHECKING EVERY integer-value SECOND | SECONDS
- 指定检查活动阈值条件的频率。 CPUTIMEINSC 阈值的粒度大约是这个数字乘以活动的并行度。 例如:如果每 60 秒检查一次阈值,并且并行度为 2,那么在检测到阈值违例之前,活动可能使用额外 2 分钟(而不是 1 分钟)的处理器时间。 缺省值是 60 秒。 该值可以是任何正整数(非零),最大值为 86400 秒 (SQLSTATE 42820)。 设置较低的值可能会对系统性能产生负面影响。
- ACTIVITYTOTALRUNTIME > integer-value DAY | DAYS | HOUR | HOURS | MINUTE | MINUTES | SECONDS
- 此条件用于定义数据库管理器允许活动运行的时间量的上限。 时间量不包括 WLM 并行阈值对活动进行排队的时间。 此条件的定义域必须是以下阈值之一 (SQLSTATE 5U037):
- 数据库
- 服务超类
- 服务子类
- 语句
- 工作负载
- 工作操作 1
- 工作操作定义域的阈值是使用 CREATE WORK ACTION SET 或 ALTER WORK ACTION SET 语句创建的。 工作操作集必须应用于工作负载或数据库。
执行作用域必须是 DATABASE (SQLSTATE 5U037)。
指定的 integer-value 必须是大于零的整数 (SQLSTATE 42820)。 使用有效的持续时间关键字来指定 integer-value 的相应时间单位。 如果指定的时间单位为 SECONDS,那么该值必须是 10 的倍数 (SQLSTATE 42615)。 可针对此阈值指定的最大值为 2 147 483 640 秒。 如果 DAY、HOUR、MINUTE 或 SECONDS 时间单位的任何值对应的秒数大于最大值,那么将返回一个错误 (SQLSTATE 42615)。
- ACTIVITYTOTALRUNTIMEINALLSC > integer-value DAY | DAYS | HOUR | HOURS | MINUTE | MINUTES | SECONDS
- 此条件用于定义数据库管理器允许活动运行的时间量的上限。 时间量不包括 WLM 并行阈值对活动进行排队的时间。 此阈值跟踪的执行时间是从活动开始运行的时间开始测量的。
此条件的定义域必须是服务子类(指定 UNDER 子句的 SERVICE CLASS),并且执行作用域必须是 DATABASE (SQLSTATE 5U037)。
指定的 integer-value 必须是大于零的整数 (SQLSTATE 42820)。 使用有效的持续时间关键字来指定 integer-value 的相应时间单位。 如果指定的时间单位为 SECONDS,那么该值必须是 10 的倍数 (SQLSTATE 42615)。 可针对此阈值指定的最大值为 2 147 483 640 秒。 如果 DAY、HOUR、MINUTE 或 SECONDS 时间单位的任何值对应的秒数大于最大值,那么将返回一个错误 (SQLSTATE 42615)。
- DATATAGINSC IN (integer-constant, ...)
- 此条件定义活动触及的表空间上指定的一个或多个数据标记值。 表空间或其底层存储组(如果适用)上的数据标记不能设置或不能设置为 1 到 9 之间的值。 如果活动触及未设置数据标记的表空间(在表空间或存储组级别),那么此阈值不会对该活动产生任何影响。 此条件的定义域必须是服务子类(指定 UNDER 子句的 SERVICE CLASS),并且执行作用域必须是 DATABASE PARTITION (SQLSTATE 5U037)。 将在每个数据库分区中单独执行此条件。
此条件跟踪的活动包括:
- 类型为数据操作语言 (DML) 的协调程序活动。
- 直接从用户逻辑中调用的嵌套 DML 活动。
此条件将不跟踪数据库管理器可通过内部 SQL 启动的 DML 活动。
仅当对表打开扫描操作或对表执行插入操作时,才会检查此阈值。 打开扫描操作后从表中访存数据将不会违反该阈值。
- DATATAGINSC NOT IN (integer-constant, ...)
- 此条件定义活动触及的表空间上指定的一个或多个数据标记值。 表空间或其底层存储组(如果适用)上的数据标记不能设置或不能设置为 1 到 9 之间的值。 如果活动触及未设置数据标记的表空间(在表空间或存储组级别),那么此阈值不会对该活动产生任何影响。 此条件的定义域必须是服务子类(指定 UNDER 子句的 SERVICE CLASS),并且执行作用域必须是 DATABASE PARTITION (SQLSTATE 5U037)。 将在每个数据库分区中单独执行此条件。
此条件跟踪的活动包括:
- 类型为数据操作语言 (DML) 的协调程序活动。
- 直接从用户逻辑中调用的嵌套 DML 活动。
此条件将不跟踪数据库管理器可通过内部 SQL 启动的 DML 活动。
仅当对表打开扫描操作或对表执行插入操作时,才会检查此阈值。 打开扫描操作后从表中访存数据将不会违反该阈值。
- threshold-exceeded-actions
- 指定在超出条件时要执行的操作。 每次超过条件时,都会在阈值违例事件监视器中记录一个事件 (如果一个事件处于活动状态)。
- COLLECT ACTIVITY DATA
- 指定在活动完成时,将已超出阈值的每个活动的相关数据发送到任何处于活动状态的活动事件监视器。 缺省值为 COLLECT ACTIVITY DATA NONE。 如果指定了 COLLECT ACTIVITY DATA,那么缺省值为 WITHOUT DETAILS。 COLLECT ACTIVITY DATA 设置不适用于非活动阈值,例如:CONNECTIONIDLETIME、TOTALDBPARTITIONCONNECTIONS、TOTALSCPARTITIONCONNECTIONS、CONCURRENTWORKLOADOCCURRENCES、UOWTOTALTIME。
- NONE
- 指定不应对超出阈值的每个活动收集活动数据。
- ON COORDINATOR MEMBER
- 指定仅在活动的协调程序 成员 处收集活动数据。
- ON ALL MEMBERS
- 指定要在处理活动的所有 成员 处收集活动数据。 在远程 成员上,随着活动的出现和对这些 成员执行操作,可能会多次捕获该活动的记录。 对于预测阈值,仅当您还为超出阈值指定了 CONTINUE 操作时,才会在所有 成员 处收集活动信息。 对于反应阈值, ON ALL MEMBERS 子句不起作用,活动信息始终仅在协调程序 成员处收集。 对于预测阈值和反应阈值,将仅在协调程序 成员处收集任何活动详细信息,区段信息或值。
- WITHOUT DETAILS
- 指定在活动执行完毕时,将与定义此工作操作的工作类相关联的每个活动的相关数据发送到任何处于活动状态的活动事件监视器。 将不发送有关语句、编译环境和节环境数据的详细信息。
- WITH
- 详细信息
- 指定将语句和编译环境数据发送到其所属活动的任何处于活动状态的活动事件监视器。 将不发送节环境数据。
- SECTION
- 指定将语句、编译环境、节环境数据和节实际值发送到其所属活动的任何处于活动状态的活动事件监视器。 如果指定了 SECTION,那么必须指定 DETAILS。 对于预测阈值,将在收集活动数据的任何 成员 上收集节实际值。 对于反应阈值,将仅在协调程序 成员上收集部分实际值。
- AND VALUES
- 指定将输入数据值发送到其所属活动的任何处于活动状态的活动事件监视器。 此数据不包含使用 REOPT ALWAYS 绑定选项编译的 SQL 语句。
- STOP EXECUTION
- 将停止执行活动并返回一个错误 (SQLSTATE 5U026)。 如果使用的是 UOWTOTALTIME 阈值,那么将回滚工作单元。
- CONTINUE
- 将不停止执行活动。
- FORCE APPLICATION
- 应用程序被强制退出系统 ( SQLSTATE 55032)。 只能对 UOWTOTALTIME 阈值指定此操作。
- remap-activity-action
- REMAP ACTIVITY TO service-subclass-name
- 此活动将映射到 service-subclass-name。 将不停止执行活动。 此操作仅适用于 in-service-class 和 in-all-service-class 阈值,例如 CPUTIMEINSC、SQLROWSREADINSC、DATATAGINSC IN 和 DATATAGINSC NOT IN 以及 ACTIVITYTOTALRUNTIMEINALLSC 阈值 (SQLSTATE 5U037)。 service-subclass-name 必须标识与阈值相关联的超类下的现有服务子类 (SQLSTATE 5U037)。 service-subclass-name 不能与阈值的关联服务子类相同 (SQLSTATE 5U037)。
- NO EVENT MONITOR RECORD
- 指定不写入任何阈值违规记录。
- LOG EVENT MONITOR RECORD
- 指定当 THRESHOLD VIOLATIONS 事件监视器存在且处于活动状态时将在其中写入一个阈值违规记录。
注意
- 可以在数据库行为的不同方面定义阈值以监视和控制该行为。 如果在活动上定义了阈值,除非另有指定,否则仅在实际执行 SQL 语句(不包括编译时间)和装入实用程序期间实施此阈值。
- CONCURRENTWORKLOADOCCURRENCES 阈值与 CONCURRENTWORKLOADACTIVITIES 阈值的作用域有所不同。 CONCURRENTWORKLOADOCCURRENCES 将控制可同时映射到工作负载定义的连接数,而 CONCURRENTWORKLOADACTIVITIES 将控制映射到工作负载定义的每个连接可同时提交的活动数。
- 更改将写入到系统目录中,但在 COMMIT 语句之后才会生效,即使对于发出该语句的连接也是如此。
- 在所有分区中每次只允许有一个未落实的 WLM 独占 SQL 语句。 如果未落实的 WLM 独占 SQL 语句正在执行,那么后续 WLM 独占 SQL 语句将等到当前 WLM 独占 SQL 语句落实或回滚为止。
- 超出阈值操作 CONTINUE 和事件监视器数据: 超过阈值条件时,每个 成员 仅收集一次事件监视器数据。 如果超出阈值的操作为 CONTINUE ,那么活动将继续执行,并且不会在受影响的 成员上收集该阈值的进一步事件监视器数据。 例如,考虑对 CONTINUE 操作使用时间阈值 10 分钟。 活动超过 10 分钟上限后,将在受影响的 成员上收集阈值的事件监视器数据。
- 停顿服务类: TOTALSCPARTITIONCONNECTIONS 阈值条件可用于模拟无法正常停顿的停顿服务类(例如,缺省用户类或缺省系统类)。 这很有用,因为阈值不适用于在 SYSDEFAULTADMWORKLOAD 中运行的具有 DBADM 权限的用户,而任何人都无法使用停顿的服务类。 因此,不能直接停顿缺省服务类,只能通过阈值来停顿该服务类,这允许具有 DBADM 权限的用户在使用 SYSDEFAULTADMWORKLOAD 连接到数据库时加入这些类。
- 语法替换选择:与先前版本的 DB2 及其他数据库产品的兼容性支持下列替换。 这些备用项是非标准的,不应使用。
- 可以指定 DATABASE PARTITION 来代替 MEMBER,除非 DB2_ENFORCE_MEMBER_SYNTAX 注册表变量设置为 ON。
- 可以指定 DATABASE PARTITIONS 来代替 MEMBERS,除非 DB2_ENFORCE_MEMBER_SYNTAX 注册表变量设置为 ON。
- 可以指定 TOTALDBPARTITIONCONNECTIONS 来代替 TOTALMEMBERCONNECTIONS,除非 DB2_ENFORCE_MEMBER_SYNTAX 注册表变量设置为 ON。
- 可以指定 TOTALSCPARTITIONCONNECTIONS 来代替 TOTALSCMEMBERCONNECTIONS,除非 DB2_ENFORCE_MEMBER_SYNTAX 注册表变量设置为 ON。
示例
- 示例 1:创建一个阈值,对数据库中的任何活动强制使用 50M(每个数据库分区)的最大临时表空间。 将停止任何违反此阈值的活动。
CREATE THRESHOLD DBMAX50MEGTEMPSPACE FOR DATABASE ACTIVITIES ENFORCEMENT MEMBER WHEN SQLTEMPSPACE > 50 M STOP EXECUTION - 示例 2:创建第二个阈值以将数据库中任何活动的缺省运行时间限制为最多 1 小时。 将停止任何违反此阈值的活动。
CREATE THRESHOLD DBMAX1HOURRUNTIME FOR DATABASE ACTIVITIES ENFORCEMENT DATABASE WHEN ACTIVITYTOTALTIME > 1 HOUR STOP EXECUTION - 示例 3: 假设已创建了一个名为 BIGQUERIES 的服务超类来托管查询,其使用的临时空间多于平均水平并且运行时间超过 1 小时。 此服务类中定义的阈值将覆盖先前示例中在数据库级别设置的值。 请注意,允许违反此超类中的阈值的活动继续执行,但会收集其详细信息以便执行进一步分析。
CREATE THRESHOLD BIGQUERIESMAX500MEGTEMPSPACE FOR SERVICE CLASS BIGQUERIES ACTIVITIES ENFORCEMENT DATABASE MEMBER WHEN SQLTEMPSPACE > 500 M COLLECT ACTIVITY DATA WITH DETAILS AND VALUES CONTINUE CREATE THRESHOLD BIGQUERIESLONGRUNNINGTIME FOR SERVICE CLASS BIGQUERIES ACTIVITIES ENFORCEMENT DATABASE WHEN ACTIVITYTOTALTIME > 10 HOURS COLLECT ACTIVITY DATA WITH DETAILS AND VALUES CONTINUE - 示例 4: 假设存在名为 PAYROLL 的工作负载,创建一个阈值以要求工作负载中的最大活动数小于或等于 10。
CREATE THRESHOLD MAXACTIVITIESINPAYROLL FOR WORKLOAD PAYROLL ACTIVITIES ENFORCEMENT WORKLOAD OCCURRENCE WHEN CONCURRENTWORKLOADACTIVITIES > 10 STOP EXECUTION - 示例 5: 创建一个阈值以要求在服务类 BIGQUERIES 中最多执行 2 个并发活动。
CREATE THRESHOLD MAXBIGQUERIESCONCURRENCY FOR SERVICE CLASS BIGQUERIES ACTIVITIES ENFORCEMENT DATABASE WHEN CONCURRENTDBCOORDACTIVITIES > 2 STOP EXECUTION - 示例 6: 创建一个阈值以用于捕获特定语句的活动信息,该语句的运行时间超过 1 分钟,但不会停止语句执行。
CREATE THRESHOLD TH1 FOR STATEMENT TEXT 'SELECT DISTINCT PARTS_BIN FROM STOCK WHERE PART_NUMBER = ?' ACTIVITIES ENFORCEMENT DATABASE WHEN ACTIVITYTOTALTIME > 1 MINUTE COLLECT ACTIVITY DATA WITH DETAILS, SECTION AND VALUES CONTINUE
