PGA(program global areas) 保存服务进程的数据和控制信息的内存结构,这个内存结构是非共享的,只有服务进程本身才能够访问它自已的PGA区。每个服务进程都有它自已的PGA区,各个服务进程PGA的总和即为实例的PGA区的大小
show parameter pga;
show parameter sga;
show sga;---显示内存分配量(Total SGA与sga_max_size有关,可能比v$sgastat的和要多一些)
show parameter size;
select * from v$pgastat;
select sum(bytes) from v$sgastat;---显示实际内存使用量
--查查看都是哪些process占用内存多(从下面这个查询可以看到v$session s, v$sesstat st, v$statname sn, v$process p这四个动态视图之间的关系)
SELECT s.SQL_ADDRESS,s.MACHINE,s.PROGRAM,s.LOGON_TIME,s.P ROCESS,server, s.username, s.osuser, sn.NAME, st.VALUE / 1024 / 1024, s.SID, s.serial#, p.spid
FROM v$session s, v$sesstat st, v$statname sn, v$process p
WHERE st.SID = s.SID
AND st.statistic# = sn.statistic#
AND sn.NAME LIKE 'session pga memory'
AND p.addr = s.paddr
AND VALUE > 10 * 1024 * 1024 --only show pga > 10M
ORDER BY VALUE DESC
---然后通过查询v$sqlarea可得到该process正在执行的sql语句
select t.SQL_TEXT,t.ADDRESS from v$sqlarea t where t.ADDRESS='上面的SQL_ADDRESS'
-------------------------------------------------- --------
Usage: orakill sid thread
where sid = the Oracle instance to target
thread = the thread id of the thread to kill
The thread id should be retrieved from the spid column of a query such as:
select spid, osuser, s.program from
v$process p, v$session s where p.addr=s.paddr
或者:
select sid,serial#,username,program,machine,status from v$session;
然后
alter system kill session 'SID,SERIAL#';
注意,上例中SID为1到7(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何操作。
-------------------------------------------------- --------
v$process
这个视图提供的信息,都是oracle服务进程的信息,没有客户端程序相关的信息
服务进程分两类,一是后台的,一是dedicate/shared server
pid, serial# 这是oracle分配的PID
spid 这才是操作系统的pid(实际上是oracle进程中的线程)
program 这是服务进程对应的操作系统进程名
|
|