赛迪网 > IT技术 数据库 > DB2开发者园地
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

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

发布时间:2008.06.27 04:46     来源:赛迪网    作者:Alizze

【赛迪网-IT技术报道】在 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

1 2 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· DB2 V9.5版本中数据库应用程序移植的改进 (06-03) · DB2 V9.5版本中数据库应用程序移植的改进 (06-03)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 电子商务盈利新招:垂直化渠道管理新趋势
· 互联网加速蜕变 运营商进军搅动市场格局
· 08 IT技术风起云涌 专访 ITIL落地难在哪
· 视频加密保护解决方案 文档安全解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统