首页 -> DB2 -> 正文

DB2 V9.5工作负载管理之阈值(THRESHOLD)

来源:网络摘录 日期:2008-09-16 00:46 点击:0

在 DB2 V9.5 中,新引入的工作负载管理功能( WLM )可以帮助您标识、管理和监视数据服务器的工作负载。本文将重点介绍 DB2 V9.5 关于工作负载管理(WLM)的阈值(THRESHOLD)设置相关的概念,并结合实际的例子帮助大家理解和提高。

阈值( THRESHOLD )

可以通过创建阈值的方式对服务类所使用的资源进行控制,阈值可以根据不同的类型进行创建。阈值提供一种方法,用来控制每种工作能够使用的资源数量。在工作负载管理( WLM )解决方案中,你可以使用阈值来防止系统过载或者资源被滥用现象的发生。通过阈值,你可以直接对特定的资源设置限定,当超过限定时,就会触发特定的动作。

支持的动作有:

STOP EXECUTION:停止违反阈值的相关动作

CONTINUE:继续执行

收集违反阈值的相关动作信息

不管违反阈值的特定动作被停止还是继续执行,你都可以收集该动作的详细信息。当特定动作完成后,其相关信息会被活动的 ACTIVITIES 事件监控器收集到。

每个阈值都有一个应用范围。阈值的作用域定义其可以操作的数据库对象。只有在该阈值范围内发生的动作才会受其影响。阈值的作用域可以是:

数据库(Database)

服务父类(Service superclass )

服务子类(Service subclass )

工作动作(Work action )

工作负载(Workload )

阈值即可以是 predictive ,也可以是 reactive,也就是说,我们可以定义阈值是前触发还是后触发

前触发阈值是在相应的工作开始之前进行检查。数据服务器通过 SQL 编译器得到使用资源的估计值,检查前触发阈值是否会被触发。

后触发阈值是在相应的工作开始之后进行检查的。通过对控制资源的大体运行时间使用估计,来评估是否达到了后触发阈值的边界。运行时间使用估计不是连续获得的,而是在每个(特定工作生命周期中)预先选择的检查点进行获取。

需要注意的是,阈值不是适合所有的语句,比如,阈值不能应用在 COMMIT, ROLLBACK, AVEPOINT 以及 ROLLBACK to SAVEPOINT 等。

你可以使用 CREATE THRESHOLD 创建阈值,使用 ALTER THRESHOLD 修改阈值,还可以使用 DROP THRESHOLD 删除阈值。如果想查询你定义的阈值,可以查询 SYSCAT.THRESHOLDS 系统视图。

下面我们继续在窗口 1 中来创建一个阈值,来限制包含大的查询的服务类,阈值的范围是整个数据库,阈值的边界是当 ESTIMATEDSQLCOST 大于 100000,ESTIMATEDSQLCOST 能够返回优化器分配给 DML 语句相关活动成本的估计值,具体如清单 17 所示:

清单 17 . 在窗口 1 中创建一个阈值,限制包含大查询的服务类

C:\> db2 connect to db2test1 user administrator using passw0rd

数据库连接信息

数据库服务器 = DB2 / NT 9.5.0

SQL 授权标识 = ADMINIST . . .

本地数据库别名 = DB2TEST1

C:\> db2 -tvf createthreshold.sql

ALTER THRESHOLD LargeQuery DISABLE

DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在

SQL 处理期间,它返回:

SQL0204N " LARGEQUERY " 是一个未定义的名称。 SQLSTATE = 42704

DROP THRESHOLD LargeQuery

DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在

SQL 处理期间,它返回:

SQL0204N " LARGEQUERY " 是一个未定义的名称。 SQLSTATE = 42704

CREATE THRESHOLD LargeQuery FOR service class SUPER_CLASS ACTIVITIES

ENFORCEMENT DATABASE WHEN ESTIMATEDSQLCOST > 100000 STOP EXECUTION

DB20000I SQL命令成功完成。

继续在窗口 2 中执行一个大的查询(此时我们的用户是 RHETTE,如果执行查询,该查询会属于 SUPER_CLASS 服务类),这时我们会收到“ SQL4712N 已超过阈值 ‘ LARGEQUERY ’。原因码 = ‘7’。 SQLSTATE = 5U026”的错误信息,这是因为我们执行的查询超过了我们预先定义的边界,具体如清单 18 所示:

清单18 . 在窗口 2 中执行一个大型查询

C:\> db2 connect to db2test1 user rhette using passw0rd

数据库连接信息

数据库服务器 = DB2 / NT 9.5.0

SQL 授权标识 = RHETTE

本地数据库别名 = DB2TEST1

C:\> db2 select count ( * ) from project , project , project , project , project ,

project

SQL4712N 已超过阈值 " LARGEQUERY "。原因码 = " 7 "。 SQLSTATE = 5U026

接下来我们创建一个新的阈值,用来限制同一条 SQL,并发执行数大于 1,我们继续在窗口 1 中发出 CREATE THRESHOLD 语句,创建新的阈值 MYCUNCURRENT,阈值范围是整个数据库,阈值的边界 CONCURRENTDBCOORDACTIVITIES 大于 1。CONCURRENTDBCOORDACTIVITIES 用来表示某个特定动作的并发执行数。具体如清单 19 所示:

清单 19 . 在窗口 1 中创建一个阈值,限制并发执行数

C:\>db2 -tvf crtThresCurrency.sql

ALTER THRESHOLD MYCUNCURRENT DISABLE

DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在

SQL 处理期间,它返回:

SQL0204N " MYCUNCURRENT " 是一个未定义的名称。 SQLSTATE = 42704

DROP THRESHOLD MYCUNCURRENT

DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在

SQL 处理期间,它返回:

SQL0204N " MYCUNCURRENT " 是一个未定义的名称。 SQLSTATE = 42704

CREATE THRESHOLD MYCUNCURRENT FOR SERVICE CLASS subclass_db2admin

UNDER super_class ACTIVITIES ENFORCEMENT DATABASE WHEN CONCURRENTDBCOORDACTIVITIES > 1

STOP EXECUTION

DB20000I SQL命令成功完成。

命令成功完成。我们继续在窗口 2 中用 DB2ADMIN 用户连上示例数据库 DB2TEST1,具体如清单 20 所示:

清单20 . 在窗口 2 中执行一个简单查询

C:\> db2 connect reset

DB20000I SQL命令成功完成。

C:\> db2 connect to db2test1 user db2admin using passw0rd

数据库连接信息

数据库服务器 = DB2 / NT 9.5.0

SQL 授权标识 = DB2ADMIN

本地数据库别名 = DB2TEST1

命令成功完成。我们继续在窗口 3 中用 DB2ADMIN 用户连上示例数据库 DB2TEST1,基本上同时在窗口 2 和窗口 3 执行一个同样的查询,会发现窗口 2 执行成功,窗口3执行失败,报“ SQL4712N 已超过阈值 ‘MYCUNCURRENT’。原因码 = ‘6"。 ’SQLSTATE = 5U026”错误,这是由于在窗口2执行完这条语句后,几乎同时在窗口 3 执行(此时窗口 2 中的查询还没完成),并发数为 2,超过了我们预定义的阈值边界。具体如清单 21 所示:

清单 21-1 . 在窗口 2 中执行一个简单查询

C:\> db2 select count ( * ) from rhette.project , rhette.project , rhette.project ,

rhette.project , rhette.project

1

- - - - - - - - - - - - - - - - - - - - - -

3200000

1 条记录已选择。

清单 21-2 . 在窗口 3 中执行同一个简单查询

C:\> db2 select count ( * ) from rhette.project , rhette.project , rhette.project ,

rhette.project , rhette.project

SQL4712N 已超过阈值 " MYCUNCURRENT "。原因码 = " 6 "。 SQLSTATE = 5U026





发表评论

昵称:    邮箱:
切换编辑器:         默认编辑器:
3~2000 字节 - 禁用BB代码 - 使用HTML代码 - 认证码

 

[JAVA 起点网]

[欢迎投递文章]       [加入我们]

www.startajava.com

Pageloaded in: 0.06535s Queries: 0 Powered By PHPCF.Com