Dsvolk > > Oracle > > Faq > > My Blog | Search | About
(Not Logged In)
[ welcome! ] [ news ] [ install ] [ jump-jet ] [ app ] [ rac ] [ papers ] [ dba ] [ dvp ] [ racdd4d ] [ oem ] [ statspack ] [ education ] [ tuning ] [ ias ] [ backup ] [ dataprotection ] [ security ] [ oid ] [ options ] [ integration ] [ sales ] [ sun ] [ linux ] [ consulting ] [ faq ]

ЧАВО

Соглашение о материалах на этом сайте

Мой oracle blog
true dsvolk!
ЧАсто задаваемые ВОпросы  

DBA2

 

 

Links:

www.ixora.com.au

tahiti.oracle.com

asktom.oracle.com

metalink.oracle.com

otn.oracle.com

hotsos.com

jlcomp.demon.co.uk

www.orafaq.net

oraperf.sourceforge.net


Q: Как выполнять export или import в parallel'ом режиме   ? (создан 28.05.2004)

A: Итак, у Вас есть (или вы собираетесь создать) большой dmp файл, в нем масса объектов, и Вы устали дожидаться завершения работы процедур exp/imp. Если вы уже попробовали поиграться с ключами, то в голову приходит идея выполнять эти операции в параллельном режиме.. 

Oracle 10g принес нам хорошую новость: теперь в новой утилите Oracle DataPump есть ключ parallel (посмотреть на пример работы с ней).

У счастливых пользователей 8i и 9i остается 2 варианта:

  • купить коммерческий продукт, работающий по заверениям производителя в несколько раз быстрее чем стандартный exp/imp. PATROL® DB-Import™ for Oracle или  BMC Fast Import for Oracle. 

  • найти или написать самому shell, который разбивает задачу на несколько. Вот пример ребят из Sun, вот свободно распространяемый проект PePi

Q: Как рассчитать service time (в отчете statspack )   ? 

A: В классической работе Yet Another Performance Profiling Method мы читаем:

The service time is equal to the statistic “CPU used by this session” which is shown through entries in V$SYSSTAT or V$SESSTAT by selecting for this event. Казалось бы все очень понятно.

Но. В отчете statspack находим рядышком статистику "CPU used when call started". См. ее описание: "The CPU time used when the call is started". В принципе все ясно, да ? 

Дальше больше. Steve Adams в своем скрипте response_time_breakdown.sql использует  "CPU used when call started"

Анализируя некоторое кол-во statspack'ов я обнаружил, что эти два параметра могут быть как близки, так и различаться, причем в разные стороны (один больше другого и наоборот). Честно говоря я так и не понял какой статистике верить.

Вот интересный эксперимент описанный в  Microstate Response-time Performance Profiling, Part 1 by Danisment Gazi Unal. Если прочитать внимательно начиная с Exhibit 8, мы увидим что, в CPU used by this session включается процессорное время, даже если пользовательский процесс ожидал чего-либо.  

Q: Зачем нужен и как использовать параметр statistics_level  ?  (создан 24.05.2004, Oracle 9.2)

A: Данные параметр был введен в Oracle 9.2 и, вероятно, призван упростить управление параметрами, отвечающими за сбор той или иной статистики. Согласно документации он может принимать значения:

STATISTICS_LEVEL = ALL | TYPICAL | BASIC

Уровень BASIC не предполагает сбора статистики. Прочие статистики активируются на соответсвующем уровне параметра statistics_level: 

SQL> select statistics_name, activation_level, description from v$statistics_level
STATISTICS_NAME                ACTIVAT DESCRIPTION
------------------------------ ------- --------------------------------------------------
Buffer Cache Advice           TYPICAL Predicts the impact of different cache sizes on nu
                                       mber of physical reads

MTTR Advice                 TYPICAL Predicts the impact of different MTTR settings on
                                       number of physical I/Os

Timed Statistics              TYPICAL Enables gathering of timed statistics

Segment Level Statistics       TYPICAL Enables gathering of segment access statistics


PGA Advice                  TYPICAL Predicts the impact of different values of pga_agg
                                    regate_target on the performance of memory intensi
                                    ve SQL operators

Shared Pool Advice            TYPICAL Predicts the impact of different values of shared_
                                    pool_size on elapsed parse time saved
-------------------------------------------------------------------------------------------
Plan Execution Statistics       ALL     Enables collection of plan execution statistics
Timed OS Statistics           ALL      Enables gathering of timed operating system statis tics


Документация любезно сообщает нам, что если мы установим значение параметров DB_CACHE_ADVICE, TIMED_STATISTICS, or TIMED_OS_STATISTICS вручную, то будут действовать установленные нами значение вне зависимости от значения параметра STATISTICS_LEVEL. 

Если же мы захотим вернуться к управлению, скажем,  значением параметра TIMED_STATISTICS с помощью  STATISTICS_LEVEL нам необходимо выполнить команду:

ALTER SYSTEM RESET timed_statistics SCOPE=spfile; 

Ссылки:

Digging Deeper: Segment Level Statistics in Oracle 9iR2

http://www.oracle-base.com/articles/9i/StatisticsLevel9i.php

http://www.databasejournal.com/features/oracle/article.php/2172801

Q: Что такое recursive sql в Oracl'овской статистике ? (создан 24.03.2004, благодаря Алексею Козлову)
(для начинающих, Oracle 9.2, тестировался на платформе Windows )

A: Согласно документации,

Recursive SQL: When a DDL statement is issued, Oracle implicitly issues recursive SQL statements that modify data dictionary information. Users need not be concerned with the recursive SQL internally performed by Oracle.

Вопросов вроде нет, все понятно. Но анализируя отчет statspack я обнаружил бешенное кол-во этих самых 'recursive calls'. С чего бы это ? Одна из возможных причин - управление местом (extent management), но табличные пространства - локальные (local management). 

Оказалось (благодаря Алексею Козлову и Тому Кайту), что в статистику recursive calls включаются все sql, выполнявшиеся внутри pl/sql кода. 

Делаем несложный код:

set serveroutput on;

create or replace function stats return number 
is
v_result number;
begin 
select b.value into v_result from v$statname a, v$mystat b 
where a.statistic# = b.statistic# and lower(a.name) = 'recursive calls';
return v_result;

end;
/

create or replace procedure p
is
v varchar2(1);
begin 

dbms_output.put_line ('Before ' || stats);
FOR i IN 1..99 LOOP
select 'x' into v from dual;
END LOOP;
dbms_output.put_line ('After ' || stats);
end;
/
alter session set sql_trace=true;
exec p;


Честно видим в output'е что кол-во recursive calls увеличилось на 100. В ужасе залезаем в trace файл, видим там 

SELECT 'x' from dual
END OF STMT
PARSE #3:c=0,e=1456,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=2858053838
EXEC #3:c=0,e=115,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=2858055041
FETCH #3:c=0,e=169,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=4,tim=2858055455

Важно r=1 напротив Fetch. 

Тот же trace файл обработанный с помошью tkprof 

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 2 0.01 0.01 0 0 0 0
Execute 3 0.04 0.06 0 0 0 2
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 5 0.05 0.07 0 0 0 2

Misses in library cache during parse: 2
Misses in library cache during execute: 1


OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 7 0.03 0.07 0 3 0 0
Execute 106 0.02 0.00 0 0 0 0
Fetch 106 0.03 0.02 0 309 0 106
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 219 0.08 0.10 0 312 0 106
106 Recursive Execute. 

Так что оказалось что приложение вызывало в массовом порядке, не отдельные запросы, а хранимые процедуры. Что не может не вызвать восхищения. 

Dsvolk > > Oracle > > Faq > > Last Modified: 31-05-2004 12:29