1 / 37

DB2 Version 9.5 WorkLoad Management

DB2 Version 9.5 WorkLoad Management. 使用 DB2 工作负载管理的优点( 1 ). 更好地控制系统资源 预定义能够标识数据库活动的工作负载 通过工作负载相关的服务类,可以分配服务类中运行的数据库活动可以使用的资源( CPU 、 I/O 和内存 ) 在 AIX 平台上, DB2 服务类可以直接链接至 AIX WLM 资源组,从而对 CPU 资源进行更精确的控制 增加了系统的可预测性和稳定性 允许预先确定适当的资源分配、活动的优先级划分和排队选项来高效地处理工作,从而可以平滑高峰工作负载 可以通过不同特征建立阈值来控制数据库活动

stian
Download Presentation

DB2 Version 9.5 WorkLoad Management

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DB2 Version 9.5 WorkLoad Management

  2. 使用 DB2 工作负载管理的优点(1) • 更好地控制系统资源 • 预定义能够标识数据库活动的工作负载 • 通过工作负载相关的服务类,可以分配服务类中运行的数据库活动可以使用的资源(CPU、I/O 和内存 ) • 在AIX平台上, DB2 服务类可以直接链接至 AIX WLM 资源组,从而对CPU资源进行更精确的控制 • 增加了系统的可预测性和稳定性 • 允许预先确定适当的资源分配、活动的优先级划分和排队选项来高效地处理工作,从而可以平滑高峰工作负载 • 可以通过不同特征建立阈值来控制数据库活动 • 比如,可以使使工作远离流氓查询的影响

  3. 使用 DB2 工作负载管理的优点(2) • 可以在同一个服务上实现混合类型的工作负载 • 交易系统和查询系统可以在同一个数据库上并存 • 可以对各种数据库活动定制可以使用的资源 • 能够各种数据库活动隔离开来 • 动态监视数据库活动 • 提供了许多表函数来查询数据库活动的状态和内容

  4. 工作负载管理的三个阶段 • 标识阶段(Identification Stage) • 用来对数据库服务器当前运行的工作进行鉴定标识。 • 管理阶段(Management Stage) • 对特定工作进行管理,比如分配资源或严格控制 • 对不符合设定目标的工作,可以进行限制 • 监控阶段(Monitoring Stage) • 监控将持续进行 • 提供一个跟踪进度的机制以确定你是否达到了目标 • 监控还能帮助我们来确定哪些问题阻碍了目标的完成

  5. 工作负载管理流程

  6. 标识阶段两个相关的概念 • 工作负载(WORKLOAD) • 通过工作所在的数据库连接属性来标识数据库活动 • 用来分配工作给服务类(Service Class) • 是一个根据工作的来源(source)标识区分工作的对象 • 来源(source)是由工作所在的数据库连接的属性决定的 • 工作类(WORK CLASS)和工作类集(WORK CLASS SET) • 基于工作的类型来标识数据库活动 • 这些类型属性可以是READ , WRITE , DML , DDL , LOAD , CALL ,ALL • 工作类集(WORK CLASS SET)是一组工作类的集合 • 为了让一个工作类生效,至少需要启用一个工作类上的工作操作(WORK ACTION)

  7. 管理阶段相关的三个概念(1) • 服务类(SERVICE CLASSES)和服务子类(SERVICE SUBCLASSES) • 为工作运行定义一个执行环境 • 这个环境包含可用的资源和不同的执行阈值 • 当你定义一个工作负载时,你必须为之指定对应的服务类 • 如果你没有显式的定义工作负载,用户数据库请求会被认为是系统默认的工作负载,其对应的服务类是系统默认的用户服务类 • 所有的系统数据库请求,对应的都是默认系统服务类

  8. 管理阶段相关的三个概念(2) • 阈值(THRESHOLD) • 可以通过创建阈值的方式对服务类所使用的资源进行控制 • 可以直接控制每种工作能够使用的资源数量 • 阈值可以根据不同的类型进行创建 • 工作操作(WORK ACTION)和工作操作集(WORK ACTION SET) • 当数据库活动满足已经定义好的工作类(WORK CLASS)所涉及的范围时,就会触发相应的工作操作(WORK ACTION)

  9. DB2 WLM Monitor and Control capabilities • 监视的主要目的是确定你的系统和独立运行的工作负载是否健康和高效 • 通过表函数,你可以访问实时操作的数据 • 通过使用事件监控器捕获数据库活动信息的细节和数据库活动统计信息 • 通过存储过程,可以取消特定数据库活动或捕获特定数据库活动相关的信息

  10. WLM的两种方式 • 工作负载(Workload)+ 服务类(Service Classs )+阈值(Threshold) • 根据数据库连接的各种属性对具体的工作进行分类,定义成工作负载(Workload) • 定义工作负载时指定要匹配的服务类(Service Classs ) • 通过控制服务类的一系列属性,可以使不同的工作具有不同的优先级 • 通过不同类型的阈值控制服务类中工作所使用的资源 • 工作类集(Work Class Set)+工作操作集(Work Action Set) • 还可以根据数据库行为的属性对工作进行分类,比如根据SQL语句是READ和 WRITE等定义不同的工作类集,当数据库活动满足已经定义好的工作类(WORK CLASS)所涉及的范围时,就会触发相应的工作操作(WORK ACTION)

  11. DB2 V9.5 默认运行环境(Execution Environment) • 所有的数据库工作都会在特定的DB2服务类中运行 • 包括用户和DB2初始化工作 • 预先定义的服务类 • 默认用户服务类 • 默认系统服务类 • 所有的数据库连接都有相匹配的工作负载 • 预先定义的工作负载 • 默认用户工作负载

  12. DB2 User Requests Default User Class Default workload Default System Class System Requests DB2 V9.5 默认运行环境(Execution Environment)

  13. 定义服务类(SERVICE CLASS) • 可以为一组工作定义一个服务类,作为唯一的运行环境 • 提供独立监控和控制这一组工作的能力 • 可以给每个服务类分配不同的资源优先级 • 可以创建两层结构的服务类 • 服务父类(Service Superclass) • 服务子类(Service Subclass) • 可以控制分配给服务类的资源 • 所有代理的CPU优先级 • 可以设置服务类中工作的I/O页预取优先级 • 还可以通过不同类型的阈值控制服务类中工作所使用的资源 • 对AIX平台,还可以通过和AIX WLM结合进行更深的控制

  14. 默认的服务类 • 默认的三个服务父类 • SYSDEFAULTSYSTEMCLASS • SYSDEFAULTMAINTENANCECLASS • SYSDEFAULTUSERCLASS • 每个服务父类都有一个默认的服务子类SYSDEFAULTSUBCLASS • 可以访问SYSCAT.SERVICECLASSES,或者通过db2pd加–serviceclasses选项查看已定义的服务类

  15. 指定服务类的代理优先级(CPU优先级) • AGENT PRIORITY DEFAULT • 和运行在DB2中的线程一样的正常优先级 ,DEDAULT对应的值是-32768 • 服务父类设成DEFAULT时,代理将按照和操作系统调度DB2线程一样的优先级进行调度 • 服务子类的代理优先级设成DEFAULT时,服务子类继承服务父类的进程优先级。 • 默认的服务子类的代理优先级不能进行修改。 • AGENT PRIORITY integer-constant • 指定运行在服务类中的代理相对于操作系统优先级的相对值 • 比如,如果正常的优先级是20,并且我们把这个参数设置成6,那么服务类中的代理的优先级是20+6=26 • 在Linux和UNIX平台,integer-constant的值可以是-20到20(值越小代表的优先级越高) • 在windows平台,integer-constant的值可以是-6到6(值越小代表的优先级月低) • 注意事项 • 只适用于用户请求对应的服务类,不适合系统数据库请求对应的系统服务类

  16. 设置服务类中工作的I/O页预取优先级 • PREFETCH PRIORITY • 你可以使用这个参数来控制服务类中代理的预取优先级 • 可选的值有high, medium, low • 当你设置了这个参数,服务类中的代理对应的预取顺序在下次将按照你设置的值进行

  17. 例子:创建服务类和服务子类(1) C:\>db2 -tvf create_serviceclass.sql alter service class subclass_rhette under super_class disable DB20000I SQL命令成功完成。 alter service class subclass_db2admin under super_class disable DB20000I SQL命令成功完成。 alter service class super_class disable DB20000I SQL命令成功完成。 drop service class subclass_rhette under super_class DB20000I SQL命令成功完成。 drop service class subclass_db2admin under super_class DB20000I SQL命令成功完成。 drop service class super_class DB20000I SQL命令成功完成。

  18. 例子:创建服务类和服务子类(2) 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命令成功完成。

  19. 服务类和工作负载

  20. 工作负载相关的数据库连接属性 • 工作负载是通过工作所在的数据库连接属性来标识数据库活动 • 数据库连接的属性可以是 : • APPLNAME ( ' application - name ' , . . . ) • SESSION_USER ( ' authorization – name ' , . . . ) • SESSION_USER GROUP ( ' authorization – name ' , . . . ) • 其它

  21. 例子—创建工作负载WL_RHETTE和WL_DB2ADMIN • C:\> db2 -tvf wl_create.sql alter workload wl_rhette disable DB20000I SQL命令成功完成。 alter workload wl_db2admin disable DB20000I SQL命令成功完成。 drop workload wl_rhette DB20000I SQL命令成功完成。 drop workload wl_db2admin DB20000I SQL命令成功完成。 create workload wl_rhette session_user ( 'RHETTE' ) service class subclass_rhette under super_class DB20000I SQL命令成功完成。 create workload wl_db2admin session_user ( 'DB2ADMIN' ) service class subclass_db2admin under super_class DB20000I SQL命令成功完成。

  22. 查看工作负载的定义情况 • db2pd -workloads -db db2test1 • 查看系统视图SYSCAT.WORKLOADS

  23. 和工作负载相关的权限 • 对特定的工作负载(和一个特定的连接相关联)来说,其会话用户必须具有该工作负载的USAGE特权 • 如果想查看工作负载相关的USAGE特权,可以访问系统视图SYSCAT.WORKLOADAUTH • 把工作负载USAGE权限分配给PUBLIC组 • C:\> db2 grant usage on workload WL_RHETTE to public • DB20000I SQL命令成功完成。 • C:\> db2 grant usage on workload WL_DB2ADMIN to public • DB20000I SQL命令成功完成。

  24. 例子—工作负载(窗口1) • 打开三个新的DB2CLP窗口,这样我们就有三个DB2CLP窗口,分别称之为窗口1、窗口2、窗口3 • 在窗口1中,我们发出DB2 CONNECT命令,连上示例数据库DB2TEST1,用户名为admnistrator • C:\> db2 connect to db2test1 user administrator using passw0rd 数据库连接信息 数据库服务器 = DB2 / NT 9.5.0 SQL 授权标识 = ADMINIST . . . 本地数据库别名 = DB2TEST1

  25. 例子—工作负载(窗口2) • 在窗口2中使用RHETTE用户连接示例数据库DB2TEST1 • 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 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 8000 1 条记录已选择。

  26. 例子—工作负载(窗口3) • 在窗口3中用DB2ADMIN用户连接示例数据库DB2TEST1,并执行SELECT语句访问示例表PROJEC,做一个查询量小的查询 • C:\> db2 connect to db2test1 user db2admin using passw0rd 数据库连接信息 数据库服务器 = DB2 / NT 9.5.0 SQL 授权标识 = DB2ADMIN 本地数据库别名 = DB2TEST1 • C:\> db2 select count ( * ) from rhette.project , rhette.project , rhette.project 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 8000 1 条记录已选择。

  27. 例子—工作负载(窗口1) • 通过访问表函数wlm_get_service_class_workload_occurrences来获取当前发生的工作负载列表,在返回的结果集中,还将返回这些工作负载的一些相关信息,比如其所在的服务子类、服务父类 • C:\>db2 select substr ( session_auth_id , 1 , 8 ) as user, substr ( char ( application_handle ) , 1 , 7 ) as apphndl, substr ( workload_name , 1 , 24 ) as workload_name , substr ( service_superclass_name , 1 , 19 ) as superclass_name , substr ( service_subclass_name , 1 , 18 ) as subclass_name , substr ( char ( workload_occurrence_id ) , 1 , 6 ) as wlo_id , uow_id from table ( wlm_get_service_class_workload_occurrences ( cast ( null as varchar ( 128 ) ) , cast( nullas varchar ( 128 ) ) , -2 ) ) as scinfo USER APPHNDL WORKLOAD_NAME SUPERCLASS_NAME SUBCLASS_NAME WLO_ID UOW_ID - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ADMINIST 580 SYSDEFAULTUSERWORKLOAD SYSDEFAULTUSERCLASS SYSDEFAULTSUBCLASS 1 2 RHETTE 599 WL_RHETTE SUPER_CLASS SUBCLASS_RHETTE 1 2 DB2ADMIN 600 WL_DB2ADMIN SUPER_CLASS SUBCLASS_DB2ADMIN 1 4 3 条记录已选择。

  28. 集成DB2和AIX WLM • DB2服务类提供一个可选的功能,用来把DB2进程和AIX WLM服务类紧密集成 • 每个DB2服务类可以分配给特定的AIX WLM服务类 • 在服务类中工作的所有代理将由DB2自动分配给相应的AIX WLM服务类 • AIX WLM 将对CPU进行富有成效的管理,在直接分配资源时使CPU得到更好的利用 • 通过分配给AIX WLM服务类相应的CPU份额,完成CPU资源的分配 • CPU份额可以使用AIX WLM接口进行动态调节 • 提供从其他服务类借用其空闲CPU份额的能力 • 通过AIX 服务类可以提供操作系统基本的统计信息 • 注意:虽然AIX WLM能够为正在运行的进程提供CPU,I/O以及内存方面的控制,但是,在DB2 V9.5中,DB2只能受益于AIX WLM的CPU的部分

  29. 阈值(THRESHOLD) • 支持的动作有: • STOP EXECUTION:停止违反阈值的相关动作 • CONTINUE:继续执行 • 收集违反阈值的相关动作信息 • 阈值即可以是predictive ,也可以是reactive,也就是说,我们可以定义阈值是前触发还是后触发 • CREATE THRESHOLD LargeQuery FOR service class SUPER_CLASS ACTIVITIES ENFORCEMENT DATABASE WHEN ESTIMATEDSQLCOST > 100000 STOP EXECUTION

  30. 在窗口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

  31. 创建限制并发次数的阈值 • CREATE THRESHOLD MYCUNCURRENT FOR SERVICE CLASS subclass_db2admin UNDER super_class ACTIVITIES ENFORCEMENT DATABASE WHEN CONCURRENTDBCOORDACTIVITIES > 1 STOP EXECUTION DB20000I SQL命令成功完成。 • 在窗口2中执行一个简单查询 C:\> db2 select count ( * ) from rhette.project , rhette.project , rhette.project , rhette.project , rhette.project 1 - - - - - - - - - - - - - - - - - - - - - - 3200000 1 条记录已选择。 • 在窗口3中执行同一个简单查询 C:\> db2 select count ( * ) from rhette.project , rhette.project , rhette.project , rhette.project , rhette.project SQL4712N 已超过阈值 " MYCUNCURRENT "。原因码 = " 6 "。 SQLSTATE = 5U026

  32. 取消一个数据库活动 • WLM_CANCEL_ACTIVITY(application_handle,uow_id,activity_id) 可以使用这个存储过程来取消一个正在运行或者正在排队的活动。对某个特定的活动来说,我们可以使用应用程序句柄、工作单元标识和活动标识来唯一标识。使用这个存储过程,我们可以取消任何类型的活动。当这个存储过程执行后,被取消的特定活动将收到SQL4725N的错误信息。 • WLM_CAPTURE_ACTIVITY_IN_PROGRESS(application_handle,uow_id,activity_id) 我们可以使用这个存储过程捕获特定活动的详细信息,并发送给活动事件监控器。这个存储过程会立即发送信息,而不是等待该活动完成再发送。 • WLM_COLLECT_STATS() 使用这个存储过程可以用来收集和重置工作负载对象统计信息。所有跟踪收集的服务类、工作负载、阈值队列和工作动作集统计信息,都会发送给活动统计信息事件监控器(如果存在)并重置。如果没有活动统计信息事件监控器,那么统计信息将只重置,而不收集。

  33. 工作类(WORK CLASS) • 通过基于工作的类型来标识数据库活动 • READ属性对应的活动包括以下语句: • 所有的SELECT或者SELECT INTO语句,并且语句中不包含DELETE , INSERT , MERGE , UPDATE语句; • 所有的VALUES INTO语句; • 所有的XQuery语句。 • WRITE属性对应的活动包括以下语句: • 所有的UPDATE语句; • 所有的DELETE语句; • 所有的INSERT语句; • 所有的MERGE语句; • 所有的包含DELETE, INSERT, UPDATE 的SELECT语句; • 所有的XQuery语句

  34. 工作类(WORK CLASS) • CALL • 此属性对应的活动包括所有的 CALL 语句。如果想让工作类包含一个CALL语句 ,其工作类型可以是CALL或者ALL。 • DML • 所有在READ和WRITE中出现的语句都是DML语句。 • DDL • 此属性对应的活动包括以下语句: • 所有的ALTER语句; • 所有的CREATE语句; • 所有的COMMENT语句; • 所有的DECLARE GLOBAL TEMPORARY TABLE语句; • 所有的DROP语句; • 所有的FLUSH PACKAGE CACHE语句; • 所有的GRANT语句; • 所有的REFRESH TABLE语句; • 所有的RENAME语句; • 所有的REVOKE语句; • 所有的SET INTEGRITY语句; • LOAD • 此属性对应的活动包括所有的LOAD操作。 • ALL • 此属性对应的活动可以是以上属性中出现任意一个活动。

  35. 例子—创建工作类 • create work class set myquery ( work class smallQuery work type dml for timeroncost from 1 to 1000 , work class mediumQuery work type dml for timeroncost from 1000 to 100000 , work class largeQuery work type dml for timeroncost from 100000 tounbounded ) DB20000I SQL命令成功完成。

  36. 例子—创建相应的工作动作 • create work action set MYWORKACTION for database using work class set MYQUERY ( work action smallQueryAction on work class smallQuery count activity, work action mediumQueryAction on work class mediumQuery collect activity data with details and values , work action largeQueryAction on work class largeQuery when concurrentdbcoordactivities > 1 and queuedactivities > 1 stop execution )

More Related