数据库服务器将共享内存的虚拟部分主要用于用户会话。每个用户会话分配的内存大部分都用于 SQL 语句。所用内存量可能根据语句的不同而不同。可以确定哪个会话和哪些语句具有高内存利用率。
图: onstat -g mem 输出
onstat -g mem Pool Summary: name class addr totalsize freesize #allocfrag #freefrag ... 14 V a974020 45056 11960 99 10 16 V a9ea020 90112 10608 159 5 17 V a973020 45056 11304 97 13 ... Blkpool Summary: name class addr size #blks mt V a235688 798720 19 global V a232800 0 0
图: onstat -g stm 输出
onstat -g stm session 25 -------------------------------------------------- sdblock heapsz statement (‘*' = Open cursor) d36b018 9216 select sum(i) from t where i between -1 and ? d378018 6240 *select tabname from systables where tabid=7 d36b114 8400 <SPL statement>
图 2 中输出内的 heapsz 列显示由语句使用的内存量。如果该语句上有一个打开的游标,语句文本前会显示一个星号 (*)。输出不显示 SPL 例程中的单个 SQL 语句。
要只显示一个会话的内存,可在 onstat -g stm 选项中指定会话标识。有关示例,请参阅使用 onstat -g mem 和 onstat -g stm 输出监视会话内存。