WEB开发网
开发学院数据库DB2 DB2数据库性能优化的几个小技巧 阅读

DB2数据库性能优化的几个小技巧

 2008-12-31 16:36:54 来源:WEB开发网   
核心提示: SHEAPTHRES 是一个数据库管理器配置参数,私有和共享排序所使用内存的来源不一样,DB2数据库性能优化的几个小技巧(5),共享排序内存区的大小是在第一次连接到数据库时根据 SHEAPTHRES 值以静态方式预先确定的,私有排序内存区的大小是不受限制的,发生这种情况时,增加 SORTH

SHEAPTHRES 是一个数据库管理器配置参数。私有和共享排序所使用内存的来源不一样。共享排序内存区的大小是在第一次连接到数据库时根据 SHEAPTHRES 值以静态方式预先确定的。私有排序内存区的大小是不受限制的。对于私有排序和共享排序,应用 SHEAPTHRES 参数的方式不同:

对于私有排序,SHEAPTHRES 是对私有排序在任何给定的时间可以消耗的全部内存的实例级"软"限制。当实例的总私有排序内存消耗量达到这一限制时,为其它进入的私有排序请求而分配的内存会大大减少。

对于共享排序,SHEAPTHRES 是对共享排序在任何给定的时间可以消耗的全部内存的数据库级"硬"限制。当达到这一限制时,不允许有其它共享排序内存请求,直到总的共享内存消耗量回落到 SHEAPTHRES 所指定的限制以下。

使用排序堆的操作示例包括内存中表的散列连接和操作。阈值的显式定义防止数据库管理器将过多数量的内存用于大量排序。

建议

使用数据库系统监视器来跟踪排序活动。

使用合适的索引使排序堆的使用降到最低。

当需要频繁进行大型排序时,增加 SORTHEAP 的值。

如果增加 SORTHEAP,请确定是否还需要调整数据库管理器配置文件中的 SHEAPTHRES 参数。

优化器用排序堆大小来确定存取路径。在更改该参数后请考虑重新绑定应用程序(使用 REBIND PACKAGE 命令)。

理想情况下,应当将排序堆阈值(SHEAPTHRES)参数合理地设置为在数据库管理器实例中设置的 SORTHEAP 参数最大值的倍数。该参数至少应当是实例中任何数据库所定义的最大 SORTHEAP 的两倍。

如何更改这些参数

要更改 SORTHEAP 和 SHEAPTHRES 的值,请运行以下命令:

-- SORTHEAP should be changed for individual database --

db2 "update db cfg for DB_NAME using SORTHEAP a_value"

-- SHEAPTHRES is a database manager parameter --

db2 "update dbm cfg using SHEAPTHRES b_value"

研究步骤

OLTP 应用程序不应该执行大型排序。大型排序在 CPU 和 I/O 资源方面的成本太高了。通常,SORTHEAP 大小的缺省值(256 个 4KB 页)就足够了。事实上,对于高并发性 OLTP,可能希望降低这个缺省值。当需要进一步研究时,可以发出下面这条命令:

db2 "update monitor switches using sort on"

然后,让应用程序运行一会,然后输入:

db2 "get snapshot for database on DBNAME"

根据该输出,可以计算每个事务的排序数目,并可以计算溢出了可用于排序的内存的那部分排序的百分比。

SortsPerTransaction

= (Total Sorts) / (Commit statements attempted + Rollback statements attempted)

PercentSortOverflow

= (Sort overflows * 100 ) / (Total sorts)

经验:如果 SortsPerTransaction 大于 5,它可能表明每个事务的排序太多。如果 PercentSortOverflow 大于 3%,那么可能发生了严重的、未曾预料到的大型排序。发生这种情况时,增加 SORTHEAP 只会隐藏性能问题 - 却无法修正它。这个问题的正确解决方案是通过添加正确的索引改进有问题的 SQL 语句的存取方案。

上一页  1 2 3 4 5 

Tags:DB 数据库 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接