你通过这个SQL监控下该session占用的内存是不是超过了200MB select * FROM v$sesstat a,v$statname b WHERE a.statistic#=b.statistic# AND NAME LIKE '%mem%' and sid=<sid>然后检查v$sort_usage表看该session是不是使用到了临时段来存储中间数据。如果都查出结果的话,表明那条SQL已经占用太多内存,所以改用磁盘空间来读写,速度将会变慢,这时可以考虑调整_pga_max_size参数或优化sql
能否具体些楼上的,ORACLE不是太熟。另外,SID如何获取
sid的定位不太容易讲清楚,你可以试着在那条SQL运行的时候执行下面语句,在得出的结果集里找一下: select a.sid,a.sql_id,b.sql_text FROM v$session a,v$sqlarea b WHERE a.sql_id=b.sql_id 当然,更粗暴的办法是啥都不管,直接执行 alter system set "_pga_max_size"=400M,然后再运行SQL看速度有没有提高
程序名称 上传速度 下载速度
TNSLSNR 23K/S 8.4M/S
我的程序 8.4M/S 23k/S这个流量速度正常不正常
select * FROM v$sesstat a,v$statname b WHERE a.statistic#=b.statistic# AND NAME LIKE '%mem%' and sid=<sid>然后检查v$sort_usage表看该session是不是使用到了临时段来存储中间数据。如果都查出结果的话,表明那条SQL已经占用太多内存,所以改用磁盘空间来读写,速度将会变慢,这时可以考虑调整_pga_max_size参数或优化sql
select a.sid,a.sql_id,b.sql_text FROM v$session a,v$sqlarea b WHERE a.sql_id=b.sql_id
当然,更粗暴的办法是啥都不管,直接执行 alter system set "_pga_max_size"=400M,然后再运行SQL看速度有没有提高
1 138 20 301852 20 session uga memory 1 1856888586
2 138 21 301852 21 session uga memory max 1 3840343119
3 138 25 640728 25 session pga memory 1 4148600571
4 138 26 5359320 26 session pga memory max 1 507777907
5 138 164 0 164 redo k-bytes read (memory) 2 399143205
6 138 166 0 166 redo k-bytes read (memory) by LNS 2 3857180019
7 138 439 0 439 workarea memory allocated 64 2433935387
8 138 462 10 462 sorts (memory) 64 2091983730