Базы данных Oracle - статьи


Сравнение стоимостей запросов, выполняемых на разных системах.


Как видим из формулы (1), итоговая стоимость получается путем умножения оценок на среднюю скорость выполнения операции в данной системе. Средняя скорость выполнения операций в разных системах будет разной. Поэтому запрос 1, имеющий стоимость Cost в системе 1 будет иметь другую стоимость в системе 2. Или переходя к векторному обозначению, система 1 и система 2 будут иметь разные базисы. Для сравнения векторов стоимости в этих системах их нужно привести к одному базису. При этом одного значения длины вектора Cost будет недостаточно - необходимо знать все компоненты вектора и все оценки времени выполнения операций в системе. Только в случае одинаковых значений (#sreadtim, #mreadtim, #CPUSpeed) можно сравнивать стоимости выполнения запросов.

С точки зрения корректности сравнения стоимостей разными системами можно считать не только разные физически системы, но и одну и ту же физическую систему в разные моменты времени. Это происходит вследствие того, что базисный вектор в разные моменты времени может иметь разные значения (#sreadtim, #mreadtim, #CPUSpeed) - например, в случае изменения настроек или обновления системной статистической информации.

Пример 2. Стоимость запроса в разных системах

/* Тестовая система */

test@ORA9i> execute dbms_random.seed(0);

PL/SQL procedure successfully completed.

test@ORA9i> create table t1 2 as select 3 rownum id, 4 trunc(100*dbms_random.normal) val 5 from all_objects, all_objects 6 where rownum < 1000*1000 7 ;

Table created.

... Я Сбор статистики

test@ORA9i> set autotrace traceonly explain test@ORA9i> select count(*) from t1;

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=784 Card=1) 1 0 SORT (AGGREGATE) 2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=784 Card=999999)

/* Рабочая система */

work@ORA9i> select count(*) from t1;

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1062 Card=1) 1 0 SORT (AGGREGATE) 2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=1062 Card=999999)

/* Параметры рабочей системы */

work@ORA9i> set autotrace off; work@ORA9i> select pname, pval1 2 from sys.aux_stats$ 3 where sname= 'SYSSTATS_MAIN';

PNAME PVAL1 ------------------------------ ---------- CPUSPEED 151 MAXTHR 85332992 MBRC 7 MREADTIM 3,188 SLAVETHR -1 SREADTIM 1,84

6 rows selected.




Начало  Назад  Вперед