会话内存

数据库服务器将共享内存的虚拟部分主要用于用户会话。每个用户会话分配的内存大部分都用于 SQL 语句。所用内存量可能根据语句的不同而不同。可以确定哪个会话和哪些语句具有高内存利用率。

使用以下实用程序选项确定哪个会话和准备就绪的 SQL 语句内存利用率高:
onstat -g mem 选项显示所有会话的内存使用情况。可以通过查看 totalsizefreesize 输出列找到正使用大多数内存的会话。下图显示 onstat -g mem 的样本输出。此样本输出显示三个用户会话的内存利用率,这三个用户会话在 names 输出列中值为 141617

图: 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 的样本输出。

图: 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 输出监视会话内存