在部署数据库服务工件之后改善性能

在部署数据服务工件之后,会创建一些索引,这会使 DB2® 选择性能糟糕的存取方案。在部署之后,启动任何数据服务组件服务器之前,必须立即执行一些步骤,以确保创建理想的存取方案。

糟糕的存取方案的一个症状,表现为数据不再出现在运行时和历史数据库中,因为长时间地执行了“目标生命周期”组件的查询任务。通常,这种情况还会伴随出现 DB2 进程占用的 CPU 资源上升。

请完成以下步骤来解决该问题:

对于运行时数据库

  1. 使用选择的查询工具连接到运行时数据库。
    1. 如果再部署用户在本地运行

      db2 connect to <Runtime_Database>

    2. 如果远程运行

      db2 connect to <Runtime_Database> user <User_Name>

  2. 创建文件 createCCDindexesDrops.sql,其中包含以下文本:

    SELECT 'DROP INDEX ' || CREATOR || '.' || NAME || ';'

    FROM

    SYSIBM.SYSINDEXES, WBIRMADM.RMMETADATA RM

    WHERE

    REPLACE(LTRIM(TBCREATOR) || '.' || LTRIM(TBNAME),' ','') = RM.TGT_RM_APP_STG_TAB_NAME

    AND CREATOR='APP'

    AND NAME LIKE 'CCD%'

    ;

  3. 创建以上 SQL 语句之后运行它,并将输出重定向到一个文件。

    db2 -txf createCCDindexesDrops.sql > dropRuntimeCCDIndexes.sql

  4. 检查该文件。您应当看到类似下面的语句:

    DROP INDEX APP .CCDIX_CCD_45;

    DROP INDEX APP .CCDIX_CCD_6;

    DROP INDEX APP .CCDIX_CCD_7;

  5. 如下所示,运行生成的文件:

    db2 -tvf dropRuntimeCCDIndexes

  6. 创建文件 createrebindDSRuntimeStoredProcedures.sql,并添加以下内容:

    SELECT ' CALL SYSPROC.REBIND_ROUTINE_PACKAGE(''P'', ''' || TGT_RM_SPETL_NAME || ''', ''ANY'');'

    FROM

    WBIRMADM.RMMETADATA

    WHERE

    Service_Name='State to Runtime';

    SELECT ' CALL SYSPROC.REBIND_ROUTINE_PACKAGE(''P'', ''' || TGT_RM_APP_PRUNE_SP_NAME || ''', ''ANY'');'

    FROM

    WBIRMADM.RMMETADATA

    WHERE

    Service_Name='State to Runtime';

  7. 运行该文件。

    db2 -txf createrebindDSRuntimeStoredProcedures.sql > rebindDSRuntimeStoredProcedures.sql

  8. 检查生成的文件。您会看到以下内容:

    CALL SYSPROC.REBIND_ROUTINE_PACKAGE('P', 'WBIRMADM.WBIRMSP_10', 'ANY');

    CALL SYSPROC.REBIND_ROUTINE_PACKAGE('P', 'WBIRMADM.WBIRMSP_14', 'ANY');

    CALL SYSPROC.REBIND_ROUTINE_PACKAGE('P', 'WBIRMADM.WBIRMSP_47', 'ANY');

  9. 运行生成的文件,以便在除去索引之后,重新绑定 DS 存储过程。

    db2 -tvf rebindDSRuntimeStoredProcedures.sql

对于历史数据库

  1. 使用选择的查询工具连接到运行时数据库。
    1. 如果再部署用户在本地运行

      db2 connect to <Historical_Database>

    2. 如果远程运行

      db2 connect to <Historical_Database> user <User_Name>

  2. 创建文件 createCCDindexesDrops.sql,其中包含以下文本。您可以将它复用为运行时数据库创建的文件:

    SELECT 'DROP INDEX ' || CREATOR || '.' || NAME || ';'

    FROM

    SYSIBM.SYSINDEXES, WBIRMADM.RMMETADATA RM

    WHERE

    REPLACE(LTRIM(TBCREATOR) || '.' || LTRIM(TBNAME),' ','') = RM.TGT_RM_APP_STG_TAB_NAME

    AND CREATOR='APP'

    AND NAME LIKE 'CCD%'

    ;

  3. 创建以上 SQL 语句之后运行它,并将输出重定向到一个文件。

    db2 -txf createCCDindexesDrops.sql > dropRuntimeCCDIndexes.sql

  4. 检查该文件。您应当看到类似下面的语句:

    DROP INDEX APP .CCDIX_CCD_45;

    DROP INDEX APP .CCDIX_CCD_6;

    DROP INDEX APP .CCDIX_CCD_7;

  5. 如下所示,运行生成的文件:

    db2 -tvf dropRuntimeCCDIndexes

  6. 创建文件 createrebindDSRuntimeStoredProcedures.sql,并添加以下内容:

    SELECT ' CALL SYSPROC.REBIND_ROUTINE_PACKAGE(''P'', ''' || TGT_RM_SPETL_NAME || ''', ''ANY'');'

    FROM

    WBIRMADM.RMMETADATA

    WHERE

    Service_Name='Runtime to Historical';

    SELECT ' CALL SYSPROC.REBIND_ROUTINE_PACKAGE(''P'', ''' || TGT_RM_APP_PRUNE_SP_NAME || ''', ''ANY'');'

    FROM

    WBIRMADM.RMMETADATA

    WHERE

    Service_Name='Runtime to Historical';

  7. 运行该文件。

    db2 -txf createrebindDSRuntimeStoredProcedures.sql > rebindDSHistoryStoredProcedures.sql

  8. 检查生成的文件。您会看到以下内容:

    CALL SYSPROC.REBIND_ROUTINE_PACKAGE('P', 'WBIRMADM.WBIRMSP_10', 'ANY');

    CALL SYSPROC.REBIND_ROUTINE_PACKAGE('P', 'WBIRMADM.WBIRMSP_14', 'ANY');

    CALL SYSPROC.REBIND_ROUTINE_PACKAGE('P', 'WBIRMADM.WBIRMSP_47', 'ANY');

  9. 运行生成的文件,以便在除去索引之后,重新绑定 DS 存储过程。

    db2 -tvf rebindDSHistoryStoredProcedures.sql


Copyright IBM Corporation 2005, 2006. All Rights Reserved.