六内存排序
OLTP 应用程序不应该执行大的排序它们在 CPUI/O 和所用时间方面的成本极高而且将使任何 OLTP 应用程序慢下来因此 个 K 页(MB)的缺省SORTHEAP大小(MB)应该是足够了您也应该知道排序溢出的数量和每个事务的排序数
请发出以下命令
Db get snapshot for database on DBNAME
并查找以下行
Total sort heap allocated=
Total sorts =
Total sort time (ms)=
Sort overflows =
Active sorts =
Commit statements attempted =
Rollback statements attempted =
Let transactions = Commit statements attempted + Rollback
statements attempted
Let SortsPerTX= Total sorts / transactions
Let PercentSortOverflows = Sort overflows * / Total sorts
如果PercentSortOverflows ((Sort overflows * ) / Total sorts )大于 个百分点那么在应用程序 SQL 中会出现严重的或意外的排序问题因为正是溢出的存在表明发生了大的排序所以理想的情况是发现没有排序溢出或至少其百分比小于一个百分点
如果出现过多的排序溢出那么应急解决方案是增加SORTHEAP的大小然而这样做只是掩盖了真实的性能问题相反您应该确定引起排序的 SQL 并更改该 SQL索引或群集来避免或减少排序开销
如果SortsPerTX大于 (作为一种经验之谈)那么每个事务的排序数可能很大虽然某些应用程序事务执行许多小的组合排序(它们不会溢出并且执行时间很短)但是它消耗了过多的 CPU当SortsPerTX很大时按我的经验这些机器通常会受到 CPU 的限制确定引起排序的 SQL 并改进存取方案(通过索引群集或更改 SQL)对提高事务吞吐率是极为重要的
七表访问
对于每个表确定 DB 为每个事务读取的行数您必须发出两个命令
db get snapshot for database on DBNAME
[] [] [] [] [] [] [] [] []