讲解DB2 V9.5工作负载管理之定义服务类



2008-06-28 09:09:40 北京时间
IBM 的 DB2 V9.5 引入并完善了工作负载管理(WORKLOAD MANAGEMENT)功能,使得我们可以更深入地洞察系统的运行情况并更好地控制资源和性能。在 DB2 V9.5 中,新引入的工作负载管理功能(WLM)可以帮助您标识、管理和监视数据服务器的工作负载。本文将重点介绍 DB2 V9.5 关于工作负载管理(WLM)的新特性以及相关的概念,并结合实际的例子帮助大家理解和提高。

构建数据库环境

 

首先我们在 WINDOWS XP 环境下安装 DB2 ESE V9.5,安装完成后,打开一个 DB2CLP 窗口,发出CREATE DB 命令,创建示例数据库 DB2TEST1,命令中需要指定数据库代码页或数据库代码集,因为在 DB2 V9.5 中所有创建的数据库默认情况下数据库代码页都是 1208,数据库代码集都是 UTF-8,这点和之前的版本不一样。如果想把数据库代码页设置成 1386,数据库代码集设置成 GBK,就需要在 CREATE DB 命令中把数据库代码页设置成 1386 或者把数据库代码集设置成 GBK。具体如清单 1 所示:

清单1. 创建示例数据库 DB2TEST1

 

 

C:\> DB2 CREATE DATABASE DB2TEST1 USING CODESET GBK TERRITORY CN COLLATE

USING SYSTEM PAGESIZE 4096

DB20000I CREATE DATABASE 命令成功完成。

命令执行成功,这样我们创建了一个示例数据库 DB2TEST1。继续在这个 DB2CLP 窗口中发出 GET DB CFG 命令,查看示例数据库 DB2TEST1 的配置参数,我们可以看到数据库地域是 CN,数据库代码页被设置成了 1386,数据库代码集被设置成了 GBK。另外,在 DB2 V9.5 新增了几个参数,分别是数字兼容性、Varchar2 兼容性、十进制浮点舍入方式、启用 XML 字符操作和 WLM 收集时间间隔(分钟),这些参数的具体信息可以查看 DB2 信息中心。查看示例数据库 DB2TEST1 配置参数的详细情况请参见清单 2 所示:

清单 2. 查看示例数据库 DB2TEST1 配置参数

 

 

C:\> db2 get db cfg for db2test1

 

数据库 db2test1 的数据库配置

 

数据库配置发行版级别 = 0x0c00

数据库发行版级别 = 0x0c00

 

数据库地域 = CN

数据库代码页 = 1386

数据库代码集 = GBK

数据库国家/地区代码 = 86

数据库整理顺序 = UNIQUE

备用整理顺序 ( ALT_COLLATE ) =

数字兼容性 = OFF

Varchar2 兼容性 = OFF

数据库页大小 = 4096

 

动态 SQL 查询管理 ( DYN_QUERY_MGMT ) = DISABLE

 

对此数据库的发现支持 ( DISCOVER_DB ) = ENABLE

 

限制访问 = NO

缺省查询优化类 ( DFT_QUERYOPT ) = 5

并行度 ( DFT_DEGREE ) = 1

在算术异常时继续 ( DFT_SQLMATHWARN ) = NO

缺省刷新有效期 ( DFT_REFRESH_AGE ) = 0

缺省维护的选项( DFT_MTTB_TYPES )的表类型 = SYSTEM

保留的高频值的数目 ( NUM_FREQVALUES ) = 10

保留的分位点数目 ( NUM_QUANTILES ) = 20

十进制浮点舍入方式 ( DECFLT_ROUNDING ) = ROUND_HALF_EVEN

. . . . . . . . . .

自调整内存 ( SELF_TUNING_MEM ) = ON

数据库共享内存大小(4 KB) ( DATABASE_MEMORY ) = AUTOMATIC

数据库内存阈值 ( DB_MEM_THRESH ) = 10

锁定列表的最大存储量(4 KB) ( LOCKLIST ) = AUTOMATIC

每个应用程序的锁定百分比列表 ( MAXLOCKS ) = AUTOMATIC

程序包高速缓存大小(4 KB) ( PCKCACHESZ ) = AUTOMATIC

共享排序的排序堆域值(4 KB) ( SHEAPTHRES_SHR ) = AUTOMATIC

排序列表堆(4 KB) ( SORTHEAP ) = AUTOMATIC

. . . . . . . . . .

自动维护 ( AUTO_MAINT ) = ON

自动数据库备份 ( AUTO_DB_BACKUP ) = OFF

自动表维护 ( AUTO_TBL_MAINT ) = ON

自动 runstats ( AUTO_RUNSTATS ) = ON

自动语句统计信息 ( AUTO_STMT_STATS ) = OFF

自动统计信息概要分析 ( AUTO_STATS_PROF ) = OFF

自动概要文件更新 ( AUTO_PROF_UPD ) = OFF

自动重组 ( AUTO_REORG ) = OFF

 

启用 XML 字符操作 ( ENABLE_XMLCHAR ) = YES

WLM 收集时间间隔(分钟) ( WLM_COLLECT_INT ) = 0

 

 

 

继续在这个 DB2CLP 窗口中,发出 DB2LEVEL 命令,查看 DB2 的版本信息,需要注意 DB2 代码发行版是 " SQL09050 ",工作负载管理(WLM)是从 DB2 V9.5 开始的,具体如清单 3 所示:

 

清单 3. 查看示例数据库 DB2TEST1 的版本情况

 

C:\> db2level

DB21085I 实例 " DB2_01 " 使用 " 32 " 位和 DB2 代码发行版 " SQL09050 ",级别标识为" 03010107 "。

参考标记为 " DB2 v9.5.0.808 "、" s071001 " 和 " NT3295 ",修订包为 " 0 "。

产品使用 DB2 副本名 " DB2COPY2 " 安装在 " C:\PROGRA~1\IBM\SQLLIB~1 " 中。

我们在操作系统中存在两个用户,分别是 RHETTE,和 DB2ADMIN,密码都是 passw0rd。我们使用RHETTE 用户在 DB2CLP 窗口中连上示例数据库 DB2TEST1,执行带有 CREATE TABLE 语句的脚本 project.sql,创建示例表 PROJECT,具体如清单 4 所示:

清单4 . 创建示例表 PROJECT

 

 

C:\> db2 connect to db2test1

数据库连接信息

 

数据库服务器 = DB2 / NT 9.5.0

SQL 授权标识 = RHETTE

本地数据库别名 = DB2TEST1

 

C:\>db2 -tvf project.sql

CREATE TABLE "RHETTE"."PROJECT" ( "PROJNO" CHAR ( 6 ) NOT NULL ,

"PROJNAME" VARCHAR ( 24 ) NOT NULL WITH DEFAULT '' , "DEPTNO" CHAR ( 3 ) NOT NULL ,

"RESPEMP" CHAR ( 6 ) NOT NULL , "PRSTAFF" DECIMAL ( 5 , 2 ) , "PRSTDATE" DATE ,

"PRENDATE" DATE , "MAJPROJ" CHAR ( 6 ) ) IN "USERSPACE1"

DB20000I SQL命令成功完成。

 

ALTER TABLE "RHETTE"."PROJECT" ADD CONSTRAINT "PK_PROJECT" PRIMARY KEY ( "PROJNO" )

DB20000I SQL命令成功完成。

 

CREATE INDEX "RHETTE"."XPROJ2" ON "RHETTE"."PROJECT" ( "RESPEMP" ASC)

ALLOW REVERSE SCANS

DB20000I SQL命令成功完成。

 

 

 

 

继续在 DB2CLP 窗口中插入测试数据,然后发出 SELECT 语句,我们可以看到这些数据,具体如清单 5 所示:

 

 

清单5 . 插入数据到示例表 PROJECT 中

 

 

C:\> db2 select * from project

 

PROJNO PROJNAME DEPTNO RESPEMP PRSTAFF PRSTDATE PRENDATE MAJPROJ

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

AD3100 ADMIN SERVICES D01 000010 6.50 2002-01-01 2003-02-01 -

AD3110 GENERAL ADMIN SYSTEMS D21 000070 6.00 2002-01-01 2003-02-01

AD3100

AD3111 PAYROLL PROGRAMMING D21 000230 2.00 2002-01-01 2003-02-01

AD3110

AD3112 PERSONNEL PROGRAMMING D21 000250 1.00 2002-01-01 2003-02-01

AD3110

AD3113 ACCOUNT PROGRAMMING D21 000270 2.00 2002-01-01 2003-02-01

AD3110

IF1000 QUERY SERVICES C01 000030 2.00 2002-01-01 2003-02-01 -

IF2000 USER EDUCATION C01 000030 1.00 2002-01-01 2003-02-01 -

MA2100 WELD LINE AUTOMATION D01 000010 12.00 2002-01-01 2003-02-01 -

MA2110 W L PROGRAMMING D11 000060 9.00 2002-01-01 2003-02-01

MA2100

MA2111 W L PROGRAM DESIGN D11 000220 2.00 2002-01-01 1982-12-01

MA2110

MA2112 W L ROBOT DESIGN D11 000150 3.00 2002-01-01 1982-12-01

MA2110

MA2113 W L PROD CONT PROGS D11 000160 3.00 2002-02-15 1982-12-01

MA2110

OP1000 OPERATION SUPPORT E01 000050 6.00 2002-01-01 2003-02-01 -

OP1010 OPERATION E11 000090 5.00 2002-01-01 2003-02-01

OP1000

OP2000 GEN SYSTEMS SERVICES E01 000050 5.00 2002-01-01 2003-02-01 -

OP2010 SYSTEMS SUPPORT E21 000100 4.00 2002-01-01 2003-02-01

OP2000

OP2011 SCP SYSTEMS SUPPORT E21 000320 1.00 2002-01-01 2003-02-01

OP2010

OP2012 APPLICATIONS SUPPORT E21 000330 1.00 2002-01-01 2003-02-01

OP2010

OP2013 DB/DC SUPPORT E21 000340 1.00 2002-01-01 2003-02-01

OP2010

PL2100 WELD LINE PLANNING B01 000020 1.00 2002-01-01 2002-09-15

MA2100

 

20 条记录已选择。

 

 

 

 

定义服务类(SERVICE CLASS)

 

服务类的目的是为工作运行定义一个执行环境,这个环境包含可用的资源和不同的执行阈值,当你定义一个工作负载时,你必须为之指定对应的服务类。如果你没有显式的定义工作负载,用户数据库请求会被认为是系统默认的工作负载,其对应的服务类是系统默认的用户服务类。所有的系统数据库请求,对应的都是默认系统服务类。

 

所有的数据库请求都是在服务类中执行的,并且在服务类中获得相应的资源。所有的连接都是映射到工作负载上的,所有的工作负载都是映射到服务类上的。针对服务类中资源分配的情况,可以定义相应的阈值,来进行限定。DB2 的服务类拥有两层结构:服务父类(Service Superclass)和服务子类(Service Subclass)。

 

当你使用服务类时,你可以通过控制这个服务类的一系列属性,使不同的工作具有不同的优先级。比如,你可以设置服务类中工作的 I/O 页预取优先级,设置服务类中所有代理的 CPU 优先级,你还可以通过不同类型的阈值控制服务类中工作所使用的资源。

 

下面我们打开一个 DB2CLP 窗口,发出 ALTER SERVICE CLASS 命令,使服务类 super_class、服务子类subclass_rhette、subclass_db2admin 失效,接着发出 DROP SERVICE CLASS 命令,删除服务类和服务子类。需要注意的是,如果你想删除一个服务父类(service superclass),需要保证所有相关的服务子类、工作负载、连接、动作、阈值等都无效。DROP SERVICE CLASS 命令成功完成后,发出 CREATE SERVICE CLASS 命令,创建我们需要的服务父类和服务子类,具体如清单 6 所示:

 

 

清单 6 . 创建服务类和服务子类

 

 

C:\> db2 -tvf create_serviceclass.sql

alter service class subclass_rhette under super_class disable

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

SQL 处理期间,它返回:

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

 

alter service class subclass_db2admin under super_class disable

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

SQL 处理期间,它返回:

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

 

alter service class super_class disable

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

SQL 处理期间,它返回:

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

 

drop service class subclass_rhette under super_class

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

SQL 处理期间,它返回:

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

 

drop service class subclass_db2admin under super_class

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

SQL 处理期间,它返回:

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

 

drop service class super_class

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

SQL 处理期间,它返回:

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

 

create service class super_class

DB20000I SQL命令成功完成。

 

create service class subclass_rhette under super_class agent priority

default prefetch priority default collect activity data on all with details

and values collect aggregate activity data base collect aggregate request data base

DB20000I SQL命令成功完成。

 

create service class subclass_db2admin under super_class agent priority 6

prefetch priority high

DB20000I SQL命令成功完成。

 

 

 

名称成功完成,需要注意的是我们在执行 CREATE SERVICE CLASS 命令时,指定了多个选项,下面来分别介绍一下:

 

AGENT PRIORITY DEFAULT or AGENT PRIORITY integer-constant

代理进程的优先级实际是 CPU 的优先级。

 

需要注意的是,使用这个属性只适用于用户请求对应的服务类,不适合系统数据库请求对应的系统服务类。你可以使用这个属性把当前服务类中代理的线程优先级和其他服务类区别开来。

 

AGENT PRIORITY integer-constant:指定运行在服务类中的代理相对于操作系统优先级的相对值。 AGENT PRIORITY DEFAULT:和运行在 DB2 中的线程一样的正常优先级。默认值是 DEFAULT。当代理优先级设置为 DEFAULT 时,没有特殊的操作发生,服务类中的代理将按照所有的 DB2 线程一样的优先级进行调度。DEDAULT 对应的值是 -32768。



发表评论

发表您的评论

请文明参与讨论,禁止漫骂攻击.


相关新闻
dos下执行db2cmd,然后: db2 connect to yourdb user your_user
DB2在控制中心点选数据库或表时,报错: [IBM] [CLI Driver] SQL
DB2在控制中心点选数据库或表时,报错: [IBM] [CLI Driver] SQL
使用 MQT物化查询表(Materialized Query Tables, MQT) MQT 的
◆1.在安装DB2数据库后,你可以通过命令行方式或图形界面方式来

广告
© 2008 The Czz5 Company. All Rights Reserved. 关于我们 - 联系我们 - 广告业务 - 网站地图 - 版权声明 - 友情连接 - 网站投稿 - 致信编辑