четверг, 20 декабря 2007 г.

Запуск трассировки

1. alter session set events '10046 trace name context forever, level 8';
   alter session set events '10046 trace name context off';

2. exec sys.dbms_system.set_ev(&sid, &serial, 10046, 8, '');
   
exec sys.dbms_system.set_ev(&sid, &serial, 10046, 0, '');

3. exec sys.dbms_support.start_trace_in_session(&sid, &serial, waits=>true, binds=> false);
     exec sys.dbms_support.stop_trace_in_session(&sid, &serial);

4. create or replace trigger trace_test_user after logon on database
     begin
        if user like '%\_test' escape '\' then
           execute immediate 'alter session set timed_statistics=true';
           execute immediate 'alter session set max_dump_file_size=unlimited';
           execute immediate 'alter session set events ''10046 trace name context forever, level 8''';
        end if;
     end;

     /

5. Включение трассировки, если известен PID в OC(только для UNIX)

   oradebug setospid 12449 
   oradebug event 10046 trace name context forever, level 12;
   oradebug event 10046 trace name context off;

6. Узнать какие события включены для текущей сессии(оригинал):

  rem List the events that are set this this current session.
  rem
  declare
     event_level number;
     counter number;
  begin
   counter:=0;
   for i in 10000..10999 loop
     dbms_system.read_ev(i,event_level);
     if (event_level > 0) then
        dbms_output.put_line('Event '||to_char(i)||' set at level '|| to_char(event_level));
        counter:=counter+1;
     end if;
   end loop;
   if (counter= 0 ) then
      dbms_output.put_line('No events set for this session');
   end if;
  end;
  /

7. Запуск трассировки CBO оптимизатора

ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL 1';

среда, 19 декабря 2007 г.

Книги по настройке производительности СУБД Oracle



1. Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning,
by Richmond Shee, Kirtikumar Deshpande and K Gopalakrishnan Osborne ORACLE Press
 © 2004 (350 pages) ISBN:007222729x

   Очень хорошо расписаны события ожидания и анализ в случае их возникновения.
   Описываются версии 8i, 9i и 10g. Есть 2 небольших разделов по RAC и по новым возможностям 10g.

2. Oracle. Оптимизация производительности. Миллсап К., Хольт Д. Пер. с англ. - СПб: Символ-Плюс, 2006. - 464с. ISBN 5-93286-078-2

   Расписана общая методология настройки производительности на основе настройки времени отклика. Подробна расписана интерпретация данных расширенной трассировки SQL.

вторник, 18 декабря 2007 г.

Анализ и настройка защелок (latch)

Параметр _spin_count содержит кол-во попыток получения защелки, после чего процесс "засыпает".
Параметр является динамическим.

Просмотреть текущее значение:

  select v.ksppstvl value
  from sys.x_$ksppi p,
       sys.x_$ksppsv v
  where p.inst_id = userenv('Instance')
    and v.inst_id = userenv('Instance')
    and p.indx = v.indx
    and p.ksppinm = '_spin_count';


Для 9i значение по-умолчанию равно 2000. Многие отмечают, что это значение уже устарело, т.к. производительность современных процессоров значительно увеличилась. В связи с этим часто рекомендуется увеличивать это значение.
 (см.  1. Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning, by Richmond Shee, Kirtikumar Deshpande and K Gopalakrishnan, McGraw-Hill/Osborne 2004,  ISBN:007222729x
         2. Resolving Oracle Latch Contention, By Guy Harrison, Principal Software Architect, Quest Software )


Но крутить этот параметр следует в последнюю очередь, после того как решены основные проблемы с конкуренцией защелок.

Проверить эффективность параметра можно запросом:
  select sum(l.misses) misses,
         sum(l.spin_gets) spin_gets,
         sum(l.sleeps) sleeps,
         lpad( to_char(100 * sum(l.spin_gets) / sum(l.misses), '990.00') || '%', 13) hit_rate,
         &spin_count * sum(l.sleeps) / sum(l.misses) spin_cost
  from sys.v_$latch l
  where l.misses > 0;




Oracle ini параметры

Список скрытых параметров

set linesize 128
column name format a42

select x.ksppinm name,
       decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE') sesmod,
       decode( bitand(ksppiflg/65536,3),
               1,'IMMEDIATE',
               2,'DEFERRED',
               3,'IMMEDIATE',
             'FALSE' ) sysmod,
       ksppdesc description
from sys.x_$ksppi x
where x.inst_id = userenv('Instance')
  and translate(ksppinm,'_','#') like '#%'
order by 1;