确定在工作负载定义中使用的连接属性
您可以通过使用 DB2 工作负载管理器表函数确定定义连接到数据库的每个应用程序的工作负载对象的连接属性。例如:
SELECT COUNT(*) COUNT, SUBSTR(APPLICATION_NAME, 1, 10) APPLNAME,
SUBSTR(SYSTEM_AUTH_ID,1,10) SYSTEM_USER ,
SUBSTR(SESSION_AUTH_ID,1,10) SESSION_ID ,
SUBSTR(CLIENT_USER,1,10) CLIENT_USER,
SUBSTR(CLIENT_WRKSTNNAME,1,21) CLIENT_WRKSTNNAME ,
SUBSTR(CLIENT_ACCTNG,1,10) CLIENT_ACCTNG,
SUBSTR(CLIENT_APPLNAME,1,10) CLIENT_APPLNAME
FROM TABLE(WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES('', '', -
2)) A
GROUP BY
APPLICATION_NAME, SYSTEM_AUTH_ID, SESSION_AUTH_ID ,
CLIENT_WRKSTNNAME, CLIENT_ACCTNG, CLIENT_USER, CLIENT_APPLNAME;
这个查询返回的输出显示当前运行的应用程序的数量和以下连接属性,这些连接属性可也用于以下 DB2 工作负载定义:APPLNAME (应用程序名)、SYSTEM_USER (系统授权 ID )、SESSION_ID (会话授权 ID )、CLIENT_USER (客户机用户 ID )、CLIENT_WRKSTNNAME (客户机工作站名)、CLIENT_ACCTNG (客户机帐户字符串) 和 CLIENT_APPLNAME (客户机应用程序名)。
COUNT APPLNAME SYSTEM_USER SESSION_ID CLIENT_USER
CLIENT_WRKSTNNAME CLIENT_ACCTNG CLIENT_APPLNAME
----- -------- -------- -------- ----------- ------
--------- --------- ------------
501 db2batch DB2INST3 DB2INST3 - -
- -
1 db2bp DB2INST3 DB2INST3 nela
appl#1.torolab.ibm.c 123-456 boss
2 record(s) selected.
要完成一个特定用户的连接属性列表,发送一个如下查询,该查询返回用户 DB2INST3 的 SESSION_USER GROUP (用户组)和 SESSION_USER ROLE (用户角色名)。
SELECT GROUP as “SESSION_USER GROUP” FROM TABLE
(SYSPROC.AUTH_LIST_GROUPS_FOR_AUTHID('DB2INST3')) AS T;
SELECT ROLENAME as “SESSION_USER ROLE” FROM
TABLE(SYSPROC.AUTH_LIST_ROLES_FOR_AUTHID ('DB2INST3','U')) AS T;
应用程序可以使用 WLM_SET_CLIENT_INFO 流程设置客户机信息属性,以便记录当前在 DB2 数据服务器上使用该连接的应用程序或最终用户的身份,如果没有其他可区分的连接属性可用,则这个身份是必须的。
例如,以下语句设置此前检索到的应用程序识别信息:
CALL SYSPROC.WLM_SET_CLIENT_INFO('nela',
'appl#1.torolab.ibm.com', 'boss', '123-456', 'AUTOMATIC');
一旦您已经识别了在您的数据服务器上运行的工作,根据应用程序和用户的类型和业务优先权将它们划分为不同的组。在一个数据仓储环境中,以下示例小组可能适用:
日常报告查询——通过系统授权 ID 这样的连接属性识别。
特殊的或复杂的查询——通过客户机用户 ID 或应用程序名识别。
用于实时数据仓库的 ETL 作业——通过应用程序名识别。
通过优先权设置获取一致的响应时间
响应时间的一致性在数据仓库环境中很关键。在服务级别协议生效的地方,响应时间可能是强制性的。
通常,至少有两个用户或应用程序组存在于一个数据仓库环境中,一个“轻型”小组运行拥有较短运行时间并需要较少资源(比如日常报告)的简单或至多是中度程度开销的查询,一个“重型”或高级用户小组运行需要较多资源的复杂的特殊查询。有些用户可能获准提交其他关键查询,这些查询(有时称为“VIP ”或“CEO ”查询)拥有比其他工作更高的优先权。
一个服务类的优先权需要与其他服务类的优先权相比较,以便确定资源分配。为了确保短期和关键查询拥有一致的响应时间,允许这些查询在一个具有更高优先权的独立服务类中执行。将由高级用户提交的复杂查询放置到一个具有较低优先权的独立服务子类中。
首先,创建一个带有两个子类的服务类,然后创建两个识别较重要和较不重要的应用程序或用户的工作负载。将这些工作负载分配给两个不同的服务子类:
CREATE SERVICE CLASS POWER;
CREATE SERVICE CLASS LOW_PRIO UNDER POWER;
CREATE SERVICE CLASS HIGH_PRIO UNDER POWER;
CREATE WORKLOAD HIGH_PRIO APPLNAME('db2bp') SYSTEM_USER
('DB2INST3') SERVICE CLASS HIGH_PRIO UNDER POWER;
CREATE WORKLOAD LOW_PRIO APPLNAME('db2batch') SERVICE CLASS
LOW_PRIO UNDER POWER;
GRANT USAGE ON WORKLOAD HIGH_PRIO TO PUBLIC;
GRANT USAGE ON WORKLOAD LOW_PRIO TO PUBLIC;
在每个语句后提交或使用自动提交命令。应用程序名区分大小写,用户名必须用大写字母指定。
下面,将可能的最高优先权分配给 HIGH_PRIO 服务子类中的应用程序。您可以分配代理优先权和预取优先权。
ALTER SERVICE CLASS HIGH_PRIO UNDER POWER AGENT PRIORITY -20
PREFETCH PRIORITY HIGH;
将可能的最低优先权分配给 LOW_PRIO 服务子类中的应用程序。
ALTER SERVICE CLASS LOW_PRIO UNDER POWER AGENT PRIORITY 20
PREFETCH PRIORITY LOW;
不属于 LOW_PRIO 或 HIGH_PRIO 工作负载的应用程序被映射到默认工作负载,从而映射到默认用户服务类 SYSDEFAULTUSERCLASS ,该类已经被保留为默认优先权(PREFETCH PRIORITY MEDIUM 和 AGENT PRIORITY 0 )。
要确保系统工作在用户工作之前执行,将系统服务类的代理优先权设置为等同于或高于您为用户服务类设置的最高优先权。
ALTER SERVICE CLASS SYSDEFAULTSYSTEMCLASS AGENT PRIORITY -20
PREFETCH PRIORITY HIGH;
如果您在创建或更改工作负载管理对象后想要查看当前 DB2 工作负载管理设置,检查系统目录或使用 db2look 命令。例如,以下命令创建一个 wlm.definitions.out 输出文件,该文件包含数据库 PROD 的当前 DB2 工作负载管理设置。
db2look -d PROD -wlm -o wlm.definitions.out
定义工作操作集以区分工作类型
如果用户定义的工作负载中出现不同的工作类型,您可以使用工作操作集来区分这些工作类型并对它们区别对待,如 “DB2 服务类”小节的图 2 和图 3 所示。
要使用工作操作集,可以使用以下语句将工作负载分配给一个服务超类而不是一个子类:
CREATE WORKLOAD ALL_PRIO APPLNAME('db2bp') SYSTEM_USER
('DB2INST3') SERVICE CLASS POWER;
要区分短期、中期和长期工作,创建一个定义工作类型标准的工作类型组。例如,对于 READ 类型,使用 timerons 中通过优化程序估计的查询成本:
CREATE WORK CLASS SET control_cost
(WORK CLASS long
WORK TYPE READ FOR TIMERONCOST FROM 2000001 To UNBOUNDED,
WORK CLASS medium
WORK TYPE READ FOR TIMERONCOST FROM 20001 TO 2000000,
WORK CLASS short
WORK TYPE READ FOR TIMERONCOST FROM 0 TO 20000);
现在,您可以使用这个工作类组创建一个工作操作集以将该工作映射到 POWER 超类的 HIGH 、MEDIUM 和 LOW 优先权子类。
CREATE WORK ACTION SET query_cost FOR SERVICE CLASS POWER
USING WORK CLASS SET control_cost
(WORK ACTION MAP_LONG ON WORK CLASS long
MAP ACTIVITY TO LOW_PRIO,
WORK ACTION MAP_SHORT ON WORK CLASS short
MAP ACTIVITY TO HIGH_PRIO);
您还可以使用相同的工作类组来限制开销高的工作类型的并发性(类似于 Query Patroller 方法,只在数据库级别可行):
CREATE WORK ACTION SET query_concur FOR DATABASE
USING WORK CLASS SET control_cost
(WORK ACTION limit_long ON WORK CLASS long
WHEN CONCURRENTDBCOORDACTIVITIES > 2 CONTINUE,
WORK ACTION limit_medium ON WORK CLASS medium
WHEN CONCURRENTDBCOORDACTIVITIES > 10 CONTINUE,
WORK ACTION no_limit_short ON WORK CLASS short COUNT ACTIVITY);
集成 AIX Workload Manager
在下一个示例中,DB2 工作负载服务类被直接映射到 AIX Workload Manager (WLM) 类,以便集成 DB2 工作负载管理和 AIX WLM 。上述映射完成后,DB2 数据服务器将忽略 DB2 服务类的代理优先权设置。要将此前创建的 DB2 服务类映射到 AIX WLM 类(将在稍后定义),发出以下语句(这个步骤也可以作为原始 CREATE 语句的一部分):
ALTER SERVICE CLASS POWER OUTBOUND CORRELATOR 'Power';
ALTER SERVICE CLASS LOW_PRIO UNDER POWER AGENT PRIORITY DEFAULT
OUTBOUND CORRELATOR 'Power.LowPrio';
ALTER SERVICE CLASS HIGH_PRIO UNDER POWER AGENT PRIORITY DEFAULT
OUTBOUND CORRELATOR 'Power.HighPrio';
ALTER SERVICE CLASS sysdefaultsystemclass agent