使用 vprocess和vprocess 和 vprocess和vsession 视图查询:
SELECT b.sid oracleID,b.username Oracle用户,b.serial#,spid 操作系统ID,paddr,sql_text 正在执行的SQL,b.machine 计算机名,PGA_USED_MEM/1024/1024 as PGA_USED_MEM,PGA_ALLOC_MEM/1024/1024 as PGA_ALLOC_MEM,PGA_FREEABLE_MEM/1024/1024 as PGA_FREEABLE_MEM,PGA_MAX_MEM/1024/1024 as PGA_MAX_MEM
FROM v$process a, v$session b, v$sqlarea c
WHERE a.addr = b.paddr
AND b.sql_hash_value = c.hash_value
AND b.username = 'xxx'
PGA_USED_MEM:PGA可用空间
PGA_ALLOC_MEM:PGA分配的空间
PGA_FREEABLE_MEM:可释放空间
PGA_MAX_MEM:PGA最大空间
查看进程真正占用的操作系统内存:
ps aux | grep oraclecrmd | grep -v grep
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDoracle 415 0.1 0.0 152056 31896 ? Ss Sep22 4:21 oraclecrmd1 (LOCAL=NO)oracle 417 0.1 0.0 152048 31932 ? Ss Sep22 5:43 oraclecrmd1 (LOCAL=NO)oracle 15258 0.1 0.0 152040 31720 ? Ss Sep23 3:32 oraclecrmd1 (LOCAL=NO)oracle 15423 0.0 0.0 154100 31688 ? Ss Sep23 3:59 oraclecrmd1 (LOCAL=NO)
RSS列为真正的进程占用内存大小,可以看到每个ORACLE进程都差不多占用了30M的操作系统内存。
当然通过TOP命令来看也是最方便的。
Tasks: 526 total, 1 running, 525 sleeping, 0 stopped, 0 zombieCpu(s): 3.8%us, 0.5%sy, 0.0%ni, 95.4%id, 0.1%wa, 0.0%hi, 0.2%si, 0.0%stMem: 49448636k total, 31725736k used, 17722900k free, 825208k buffersSwap: 20482864k total, 289672k used, 20193192k free, 1430524k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND17954 oracle 18 0 22.5g 34m 24m D 15.5 0.1 8:49.84 oracle
415 oracle 15 0 22.5g 31m 24m S 0.0 0.1 4:21.48 oracle
417 oracle 15 0 22.5g 31m 25m S 0.0 0.1 5:43.78 oracle
419 oracle 15 0 22.5g 33m 25m S 0.0 0.1 5:19.47 oracle
456 oracle 15 0 22.5g 29m 23m S 0.0 0.1 6:42.85 oracle
RES列为进程占用的操作系统内存大小,基本在30M左右。
我们平时为ORACLE分配内存除了考虑ORACLE自身占用的内存外,还要考虑进程本身占用的操作系统内存。