Jurijs, What you're saying is one of the key reasons that I pay attention almost always to trace data and almost never to V$ data. The problem with paying attention to sort counts and things like that = (even LIO counts!) is that some sorts are cheap, and some are really = expensive. You cannot tell how long they take by counting how many times they = happen. However, from your trace data, it's pretty simple to see when c has a = value that's larger than is normally explained by your cr+cu value, and you = can corroborate the time consumption by noticing SORT row source operations = in your STAT lines. In 9.2.0.2 and beyond, you can even see elapsed time consumption per row source operation in your STAT output (but watch for = bug 3009359). With V$ data, you have to be lucky to find the problem, because of the = way the information gets aggregated before you can even collect it. For = example, it's entirely possible for a workload A with sorts=3D1 to take more time = than a workload B with sorts=3D1003. All it takes is for the sort of A to be = 1004 times more expensive than the average sort duration of B. It is MUCH = more difficult to tell whether this is happening by looking at your V$ data = (if it's even possible at all)... The big problem with Statspack or ANY other tool that relies upon V$ = data is that, because of the aggregation done inside the Oracle kernel, it = presents very little solid evidence about response time. What you by looking at = event counts and aggregations of response time consumption qualifies = technically as only circumstantial evidence about the response time of an individual user action under inspection. It is also very simple with trace data to find the "time spent = preempted" problem that Dan brought up. It is considerably more difficult to do = with V$ data. I'm not sure how you'd possibly go about it, actually, because = there's no place in the V$ data where you can pick up statistics about = individual executions of dbcalls (parse, exec, fetch, etc.). * There are certain problems (a lot of them in my experience) that you = will never be able to solve reliably with Statspack or ANY other tool that's based upon V$ data. * More generally, the problem is not V$ data in particular, it's ANY performance diagnostic data that is aggregated before you can collect = it. If you're interested in this phenomenon, there is a lot more detail present = in the book "Optimizing Oracle Performance"--especially chapters 1 and 8. Cary Millsap Hotsos Enterprises, Ltd. http://www.hotsos.com * Nullius in verba * Upcoming events: - Performance Diagnosis 101: 6/22 Pittsburgh, 7/20 Cleveland, 8/10 = Boston - SQL Optimization 101: 5/24 San Diego, 6/14 Chicago, 6/28 Denver - Hotsos Symposium 2005: March 6-10 Dallas - Visit www.hotsos.com for schedule details... -----Original Message----- From: oracle-l-bounce@xxxxxxxxxxxxx = [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On Behalf Of J.Velikanovs@xxxxxxxx Sent: Saturday, June 19, 2004 8:01 AM To: oracle-l@xxxxxxxxxxxxx Cc: oracle-l@xxxxxxxxxxxxx; oracle-l-bounce@xxxxxxxxxxxxx Subject: Re: The best CPU usage measurement in Oracle: BUFFER_GETS or CPU_TIME? Thank you all for responses. I totally agree with Daniel regarding "CPU starvation" issues. But if we = have one we cant see it ether from BUFFER_GETS or CPU_TIME any way ;) Lets imagine we have no one. And we would like find TOP SQL on which=20 spending our time we will get most. As Jonathan Lewis note there are can be situations then some activates=20 takes CPU resources, but doesn't reflect in the logical read statistics. = As mentioned Jonathan latch contention can be the issue or buffer is=20 pinned. But I would like to pay your attention to activities which, by my = option,=20 takes place more often then others CPU consuming activates and can takes = much significant CPU resources. It is !SORTING! I have gotten results bellow: 1. Activity=20 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D PL/SQL procedure successfully completed. vvvvvvvvvvvvvvvvv Elapsed: 00:00:01.35 ^^^^^^^^^^^^^^^^^^ NAME VALUE ----------------------------------------------------------------=20 ---------- vvvvvvvvvvvvvvvvv session logical reads 23002 CPU used by this session 137 ^^^^^^^^^^^^^^^^^^ 2. Activity=20 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D PL/SQL procedure successfully completed. vvvvvvvvvvvvvvvvv Elapsed: 00:00:14.22 ^^^^^^^^^^^^^^^^^^ NAME VALUE ----------------------------------------------------------------=20 ---------- vvvvvvvvvvvvvvvvv session logical reads 23006 CPU used by this session 1422 ^^^^^^^^^^^^^^^^^^ =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D As you can see both activities have taken equal amount of "logical = reads",=20 but CPU consuming for second one is 10 times bigger. The key answer why I have gotten such unproportional results is SORTING. For fists activity sorts (memory) 1 For second sorts (memory) 1001 So. I would say, it is better from this perspective to take a look first = on CPU utilization not on BUFFER_GETS, or if you want on both. But not=20 just on BUFFER_GETS as in statspack. Please correct me if I am wrong. Jurijs 9268222 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D http://otn.oracle.com/ocm/jvelikanovs.html PS Activities code 1. declare vn number; begin for f in 1..1000 loop select count(*) into vn from (select * from testsort); end loop; end; / 2. declare=20 vn number; begin for f in 1..1000 loop select count(*) into vn from (select * from testsort order by 1); end loop; end; / "Jonathan Lewis" <jonathan@xxxxxxxxxxxxxxxxxx> Sent by: oracle-l-bounce@xxxxxxxxxxxxx 19.06.2004 10:35 Please respond to oracle-l =20 To: <oracle-l@xxxxxxxxxxxxx> cc:=20 Subject: Re: The best CPU usage measurement in Oracle:=20 BUFFER_GETS or CPU_TIME? There is no one safe measure to pursue - buffer_gets is a good guideline - but different activities on the buffer consume different amounts of CPU - so you can legally have high CPU with relatively low buffer_gets, even buffer_gets is the most significant area of activity. Latch contention pushes up CPU - so two statements with the same number of buffer-gets may report different amounts of CPU because one of them was constantly competing for a hot latch. v$sql doesn't tell you about 'buffer is pinned' activity, which is buffer activity that doesn't require latch access, so SQL with very low buffer_gets can use very large amounts of CPU. In short - neither measure is guaranteed to be sufficiently meaningful to be the better one to monitor. Regards Jonathan Lewis http://www.jlcomp.demon.co.uk http://www.jlcomp.demon.co.uk/faq/ind_faq.html The Co-operative Oracle Users' FAQ http://www.jlcomp.demon.co.uk/seminar.html Optimising Oracle Seminar - schedule updated May 1st ----- Original Message -----=20 From: <J.Velikanovs@xxxxxxxx> To: <oracle-l@xxxxxxxxxxxxx> Sent: Friday, June 18, 2004 8:47 AM Subject: The best CPU usage measurement in Oracle: BUFFER_GETS or=20 CPU_TIME? My regards to all members, Just would like to know your opinion. Since 9i (suppose 9.2) we have CPU_TIME column in the V$SQL view. I wonder which figure is the best measurement of CPU usage BUFFER_GETS = or CPU_TIME? =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D Lets imagine I have system with CPU bottleneck (can see height "load average" from OS) for a 1-3 ours. No particular long sessions have been executed. It is seams mainly OLTP system. Parse CPU usage not the issue. I would like to identify TOP CPU consumers. As we all know I the V$SQL = is the best information source in this case. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D I wonder which figure is the best measurement of CPU usage: BUFFER_GETS = or CPU_TIME? Statspack report, as well as Anjo Kolk www.oraperf.com recommending to look on BUFFER_GETS not to CPU_TIME. Is it just = tradition or there are some arguments not to look on CPU_TIME as main CPU usage indicator. One reason I can imagine why CPU_TIME better indicator then BUFFER_GETS = is sorting. I can imagine that BUFFER_GETS not taking in account CPU spent = to sorting staff. Then from CPU usage perspective better indicator is CPU_TIME. Please correct me if I am wrong. Thanks in advance, Jurijs ---------------------------------------------------------------- Please see the official ORACLE-L FAQ: http://www.orafaq.com ---------------------------------------------------------------- To unsubscribe send email to: oracle-l-request@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //www.freelists.org/help/fom-serve/cache/1.html ----------------------------------------------------------------- ---------------------------------------------------------------- Please see the official ORACLE-L FAQ: http://www.orafaq.com ---------------------------------------------------------------- To unsubscribe send email to: oracle-l-request@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //www.freelists.org/help/fom-serve/cache/1.html ----------------------------------------------------------------- ---------------------------------------------------------------- Please see the official ORACLE-L FAQ: http://www.orafaq.com ---------------------------------------------------------------- To unsubscribe send email to: oracle-l-request@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //www.freelists.org/help/fom-serve/cache/1.html -----------------------------------------------------------------