IBM Support

IC72058: IN DPF SYSTEM, LOAD FROM CURSOR WITH LOBS LARGER THAN 32KB COULD CAUSE A MEMORY LEAK.

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • In DPF system, LOAD from CURSOR with LOBs larger than 32KB could
    cause memory leak such as
    
    PoolID     PoolName   TotalSize(Bytes)     %Bytes TotalCount
    %Count LOC   File
    5          utilh      592                  52.86  4
    4.76   968   sqlrkrpc.C
    
    (in v97 it would be from the application heap instead of util
    heap, such as
    
    PoolID     PoolName   TotalSize(Bytes)     %Bytes TotalCount
    %Count LOC   File
    1          apph       1480                 0.36   10
    0.86   1077  sqlrkrpc.C
    
    To detect the leak monitor a database partition other that the
    coord partition.
    

Local fix

  • To work around the problem do not load from cursor. Load from a
    file for example does not exhibit the same behavior.
    

Problem summary

  • ****************************************************************
    * USERS AFFECTED:                                              *
    * All DB2 V9.1 and later versions performing a LOAD from       *
    * cursor in a DPF environment.                                 *
    ****************************************************************
    * PROBLEM DESCRIPTION:                                         *
    * In a DPF system running DB2 V9.1, 9.5 or 9.7 a LOAD from     *
    * CURSOR with LOBs larger that 32KB could cause                *
    * a memory leak in the utility heap (in V9.1) or application   *
    * heap (in 9.5 or 9.7) leading to increased memory usage on    *
    * the server.                                                  *
    *                                                              *
    * Secondary symptoms include:                                  *
    * - LOAD may fail with error SQL0973, out of utility heap.     *
    * - Degraded load/backup performance on v9.1 since load/backup *
    * are basing resource usage on remaining utility heap.         *
    * - Increased system memory usage over time.                   *
    * - Potential out-of-memory failures if any enforced limits    *
    * are reached.                                                 *
    *                                                              *
    * Depending on the DATABASE_MEMORY configuration setting, if   *
    * set to a fixed value, you may see the following message in   *
    * the db2diag.log file indicating out of memory errors for     *
    * utility heap.                                                *
    *                                                              *
    * 2010-08-09-20.11.52.089542-300 E366984A702        LEVEL:     *
    * Warning                                                      *
    * PID    : 570528              TID  : 1          PROC :        *
    * db2lfrm0 1                                                   *
    * INSTANCE: db2inst1            NODE : 001        DB  : SAMPLE *
    * APPHDL  : 0-912                APPID:                        *
    * 12.34.56.789.1234.100810000320                               *
    * AUTHID  : USER1                                              *
    * FUNCTION: DB2 UDB, SQO Memory Management,                    *
    * sqloMemLogPoolConditions, probe:30                           *
    * DATA #1 : <preformatted>                                     *
    * Out of memory failure for Backup/Restore/Util Heap           *
    * (UTIL_HEAP_SZ) on node 1.                                    *
    * Requested block size          : 34500 bytes.                 *
    * Physical heap size            : 551616512 bytes.             *
    * Configured heap size          : 409600000 bytes.             *
    * Unreserved memory used by heap : 142016512 bytes.            *
    * Unreserved memory left in set  : 0 bytes.                    *
    *                                                              *
    * The db2pd command can be used to identify the memory leak,   *
    * for example after the load from cursor is complete use the   *
    * db2pd command on a non-coordinator  database partition :     *
    *                                                              *
    * db2pd -dbp partition# -db <db_name> -memb 5 |grep 896367698  *
    *                                                              *
    * which should return output similar to                        *
    *                                                              *
    * Address            PoolID    PoolName    BlkAge              *
    * Size(Bytes)  I LOC  File                                     *
    * 0x07800003166E0068 5          utilh        55174      42943  *
    *       1 968  896367698                                       *
    *                                                              *
    * The hash ID 896367698  identifies the specific DB2 source    *
    * file.                                                        *
    *                                                              *
    * Or you can monitor memory usage in the utility heap and      *
    * observe an increasing pattern after the execution of each    *
    * LOAD, for example:                                           *
    *                                                              *
    * db2pd -dbp partition# -db <db_name> -memp |egrep             *
    * "Address|utilh"                                              *
    * Address            MemSet  PoolName  Id    Overhead  LogSz   *
    *    LogUpBnd    LogHWM      PhySz      PhyUpBnd    PhyHWM     *
    *  Bnd BlkCnt CfgParm                                          *
    * 0x07800002200012E0 SAMPLE  utilh      5    0          352    *
    *     20512768    352        65536      20512768    65536      *
    * Ovf 2      UTIL_HEAP_SZ                                      *
    *                                                              *
    * after the LOAD is complete issue again the same command      *
    *                                                              *
    * db2pd -dbp partition# -db <db_name> -memp |egrep             *
    * "Address|utilh"                                              *
    * Address            MemSet  PoolName  Id    Overhead  LogSz   *
    *    LogUpBnd    LogHWM      PhySz      PhyUpBnd    PhyHWM     *
    *  Bnd BlkCnt CfgParm                                          *
    * 0x07800002200012E0 SAMPLE  utilh      5    0          648    *
    *     20512768    6039059    65536      20512768    9568256    *
    * Ovf 4      UTIL_HEAP_SZ                                      *
    *                                                              *
    * You should observe increasing values in at least LogSz,      *
    * LogHWM and BlkCnt.                                           *
    *                                                              *
    * Note that in DB2 9.5 and 9.7 the memory leak would be from   *
    * the application heap instead of utility                      *
    * heap:                                                        *
    *                                                              *
    * db2pd -dbp partition# -db <db_name> -memb appctl |grep       *
    * 896367698                                                    *
    *                                                              *
    * which should return output similar to                        *
    *                                                              *
    * Address            PoolID    PoolName    BlkAge Size(Bytes)  *
    * I LOC  File                                                  *
    * 0x0700000010022208 1          apph        75    148          *
    * 1 1025  896367698                                            *
    *                                                              *
    * Or you can monitor increasing memory usage in apph using the *
    * -memp option like :                                          *
    *                                                              *
    * db2pd -dbp partition# -db <db_name> -memp |egrep             *
    * "Address|apph"                                               *
    * Address            MemSet  PoolName  Id    Overhead  LogSz   *
    *    LogUpBnd    LogHWM      PhySz      PhyUpBnd    PhyHWM     *
    *  Bnd BlkCnt CfgParm                                          *
    * 0x0700000010000868 AppCtl  apph      1    0          6682    *
    *     524288      6682        65536      524288      65536     *
    *  Phy 10    APPLHEAPSZ                                        *
    * 0x0700000010000720 AppCtl  apph      1    0          10488   *
    *    524288      11224      65536      524288      65536       *
    * Phy 16    APPLHEAPSZ                                         *
    * 0x0700000010000490 AppCtl  apph      1    0          13576   *
    *    524288      85522      131072      524288      262144     *
    *  Phy 32    APPLHEAPSZ                                        *
    *                                                              *
    * and after a load is complete execute the same command:       *
    *                                                              *
    * db2pd -dbp partition# -db <db_name> -memp |egrep             *
    * "Address|apph"                                               *
    * Address            MemSet  PoolName  Id    Overhead  LogSz   *
    *    LogUpBnd    LogHWM      PhySz      PhyUpBnd    PhyHWM     *
    *  Bnd BlkCnt CfgParm                                          *
    * 0x0700000010000868 AppCtl  apph      1    0          6682    *
    *     524288      6682        65536      524288      65536     *
    *  Phy 10    APPLHEAPSZ                                        *
    * 0x0700000010000720 AppCtl  apph      1    0          10488   *
    *    524288      11224      65536      524288      65536       *
    * Phy 16    APPLHEAPSZ                                         *
    * 0x0700000010000490 AppCtl  apph      1    0          13872   *
    *    524288      86286      131072      524288      262144     *
    *  Phy 34    APPLHEAPSZ                                        *
    *                                                              *
    * Monitor LogSz, LogHWM, and BlkCnt which should all increase  *
    * after each LOAD execution.                                   *
    ****************************************************************
    * RECOMMENDATION:                                              *
    * Upgrade to DB2 Version 9.7 Fix Pack 4.                       *
    ****************************************************************
    

Problem conclusion

  • The fix in included in DB2 Version 9.7 Fix Pack 4.
    

Temporary fix

Comments

APAR Information

  • APAR number

    IC72058

  • Reported component name

    DB2 FOR LUW

  • Reported component ID

    DB2FORLUW

  • Reported release

    970

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2010-10-20

  • Closed date

    2011-04-19

  • Last modified date

    2011-04-19

  • APAR is sysrouted FROM one or more of the following:

    IZ83724

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    DB2 FOR LUW

  • Fixed component ID

    DB2FORLUW

Applicable component levels

  • R970 PSN

       UP

[{"Business Unit":{"code":"BU048","label":"IBM Software"},"Product":{"code":"SSEPGG","label":"DB2 for Linux, UNIX and Windows"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"9.7","Edition":"","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
19 April 2011