 |
|
Improper PGA Setup
Oracle Tips by Mike Ault |
I don’t believe there is anyone out there that
believes disk based sorts and hashes are good things. A disk based
operation will take anywhere from 17 to hundreds of times as long as a
memory based operation depending on buffering, IO bandwidth, memory
and disk speeds.
Oracle provides AWRRPT or statspack reports to track
and show the number of sorts. Unfortunately hashes are not so easily
tracked. Oracle tracks disk and memory sorts, number of sort rows and
other sort related statistics. Hashes on the other hand only can be
tracked usually by the execution plans for cumulative values, and by
various views for live values.
In versions prior to 9i the individual areas were set
using the sort_area_size and hash_area_size parameters, after 9i the
parameter PGA_AGGREGATE_TARGET was provided to allow automated setting
of the sort and hash areas. For currently active sorts or hashes the
script in Figure 19 can be used to watch the growth of temporary
areas.
column now format
a14
column operation format a15
column dt new_value td noprint
set feedback off
select to_char(sysdate,'ddmonyyyyhh24miss') dt from dual;
set lines 132 pages 55
@title132 'Sorts and Hashes'
spool rep_out\&&db\sorts_hashes&&td
select
sid,work_area_size,expected_size,actual_mem_used,max_mem_used,tempseg_size,to_char(sysdate,'ddmonyyyyhh24miss')
now, operation_type operation
from v$sql_workarea_active
/
spool off
clear columns
set lines 80 feedback on
ttitle off
Figure 19: Live Sorts and
Hashes Report
Figure 20 shows an example output from this report.
Date:
01/04/06
Page: 1
Time: 01:27 PM Sorts and
Hashes SYS
whoville database
Work Area
Expected Actual Mem Max Mem Tempseg
SID
Size Size Used Used Size Now
Operation
---- --------- -------- ---------- ------- ------- ---------------
---------------
1176 6402048 6862848 0 0 04jan2006132711
GROUP BY (HASH)
582 114688 114688 114688 114688 04jan2006132711
GROUP BY (SORT)
568 5484544 5909504 333824 333824 04jan2006132711
GROUP BY (HASH)
1306 3469312 3581952 1223680 1223680 04jan2006132711
GROUP BY (HASH)
Figure 20: Example Sorts and hashes Report
As you can see the whoville database had no hashes, at
the time the report was run, going to disk. We can also look at the
cumulative statistics in the v$sysstat view for cumulative sort data.
Date:
12/09/05 Page: 1
Time: 03:36 PM Sorts Report
PERFSTAT
sd3p
database
Type
Sort Number Sorts
-------------------- --------------
sorts (memory) 17,213,802
sorts (disk) 230
sorts (rows) 3,268,041,228
Figure 21: Cumulative Sorts
Another key indicator that hashes are occurring are if
there is excessive IO to the temporary tablespace yet there are few or
no disk sorts.
The PGA_AGGREGATE_TARGET is the target total amount of
space for all PGA memory areas. However, only 5% or a maximum of 200
megabytes can be assigned to any single process. The limit for
PGA_AGGREGATE_TARGET is 4 gigabytes (supposedly) however you can
increase the setting above this point. The 200 megabyte limit is set
by the _pga_max_size undocumented parameter, this parameter can be
reset but only under the guidance of Oracle support. But what size
should PGA_AGGREGATE_TARGET be set? The AWRRPT report in 10g provides
a sort histogram which can help in this decision. Figure 22 shows an
example of this histogram.
PGA Aggr Target
Histogram DB/Inst: OLS/ols Snaps: 73-74
-> Optimal Executions are purely in-memory operations
Low High
Optimal Optimal Total Execs Optimal Execs 1-Pass Execs M-Pass
Execs
------- ------- -------------- -------------- ------------
------------
2K 4K 1,283,085 1,283,085 0
0
64K 128K 2,847 2,847 0
0
128K 256K 1,611 1,611 0
0
256K 512K 1,668 1,668 0
0
512K 1024K 91,166 91,166 0
0
1M 2M 690 690 0
0
2M 4M 174 164 10
0
4M 8M 18 12 6
0
-------------------------------------------------------------
Figure 22: Sort Histogram
In this case we are seeing 1-pass executions
indicating disk sorts are occurring with the maximum size being in the
4m to 8m range. For an 8m sort area the PGA_AGGREGATE_TARGET should be
set at 320 megabytes (sorts get 0.5*(.05*PGA_AGGREGATE_TARGET)). For
this system the setting was at 160 so 4 megabytes was the maximum sort
size, as you can see we were seeing 1-pass sorts in the 2-4m range as
well even at 160m.
By monitoring the realtime or live hashes and sorts
and looking at the sort histograms from the AWRRPT reports you can get
a very good idea of the needed PGA_AGGREGATE_TARGET setting. If you
need larger than 200 megabyte sort areas you may need to get approval
from Oracle support through the i-tar process to set the _pga_max_size
parameter to greater than 200 megabytes.
SEE CODE DEPOT FOR FULL SCRIPTS
 |
For more information on this topic, I recommend Don
Burleson's latest book "Oracle
Tuning: The Definitive Reference".
You can buy it direct from the publisher for 50%-off and get
instant access to the code depot of Oracle tuning scripts: |
http://www.rampant-books.com/book_1002_oracle_tuning_definitive_reference_2nd_ed.htm
 |
Expert Remote DBA
BC is America's oldest and largest Remote DBA Oracle support
provider. Get real Remote DBA experts, call
BC Remote DBA today. |
 |
|