Работаю с Ораклом недавно, стоит
Oracle8i Enterprise Edition Release 8.1.6.3.0 - Production
With the Partitioning option
И есть вопросы, которые могут показаться весьма глупыми... Hо, тем не менее,
вот что хотелось бы узнать:
1) При установке опций
query_rewrite_enabled = true
query_rewrite_integrity = enforced
некая процедура (слишком объемная и затрагивающая слишком много объектов БД,
чтобы ее тут приводить) выходит с ошибкой
ORA-03113: end-of-file on communication channel
а function-based indexes очень хочется. В чем может быть дело? Думаю, что
баг оракла. А вы как думаете?
2) Можно ли относительно безболезненно перейти на Oracle 9i? Hе хочется (да и
практически невозможно) переписывать все пакеты, запросы, формы и отчеты.
3) При установке опции
optimizer_mode = choose
некоторые запросы выполняются в десятки раз медленнее.
"analyze table <tablename> compute statistics" выполнено для всех таблиц,
используемых в запросах.
Почему-то мне раньше казалось, что "choose" не может уменьшить время
выполнения запроса. Судя по всему, я ошибался. Интересно мне, в каких случаях
время запроса при "choose" увеличивается и можно ли что-то с этим делать, кроме
"analyze table <tablename> delete statistics" и установки другого
optimizer_mode?
4) Как определить оптимальное значение для optimizer_index_cost_adj, кроме
интуивного выбора и тестирования? Может быть есть какие-нибудь формальные
рекомендации или ваш личный опыт?
5) Есть ли средства, позволяющие сбросить куда-нибудь в файл/бд все запросы,
выполняющиеся от моего имени (логина), но без участия/прав администратора БД?
"Alter session" тоже не желательно.
bye
DG> 2) Можно ли относительно безболезненно перейти на Oracle 9i? Hе хочется
DG> (да и практически невозможно) переписывать все пакеты, запросы, формы и
DG> отчеты.
конечно можно. поднимаешь тестовую копию базы, и переносишь ее на 9.2
потом тестируешь _все_ приложение
основная причина невалидности некоторых объектов после миграции -
в 9-ке больше зарезервированных слов, которые придется заменить
DG> 3) При установке опции
DG> optimizer_mode = choose
DG> некоторые запросы выполняются в десятки раз медленнее.
DG> "analyze table <tablename> compute statistics" выполнено для всех
DG> таблиц, используемых в запросах.
DG> Почему-то мне раньше казалось, что "choose" не может уменьшить время
DG> выполнения запроса. Судя по всему, я ошибался. Интересно мне, в каких
DG> случаях время запроса при "choose" увеличивается и можно ли что-то с
DG> этим делать, кроме "analyze table <tablename> delete statistics" и
установки
DG> другого optimizer_mode?
choose - если есть статистика по хотя бы одной таблице, участвующей в
запросе,
при выполнении такого запроса будет использован стоимостной оптимизатор,
а именно ALL_ROWS, если явно не указан режим FIRST_ROWS
я не силен в гистограммах, но на опыте свой базы заметил такое:
если статистика собрана как
analyze table <tablename> compute statistics
, то большинство запросов работают хуже чем без статистики
после экспериментов, единственным работающим способом сбора статистики
для моей базы является такой:
BEGIN
DBMS_STATS.GATHER_SCHEMA_STATS(
'<YOUR_SCHEMA_NAME>',
NULL,
FALSE,
'FOR ALL COLUMNS SIZE 1',
NULL,
'DEFAULT',
TRUE,
NULL,
NULL,
'GATHER',
'LIST');
END;
/
при этом собирается статистика каждой таблице в схеме, по всем ее индексам,
и по всем столбцам. чувствуешь разницу с твоим способом?
DG> 4) Как определить оптимальное значение для optimizer_index_cost_adj,
DG> кроме интуивного выбора и тестирования? Может быть есть какие-нибудь
DG> формальные рекомендации или ваш личный опыт?
рекомендую прочитать статью по CBO (на русском)
http://www.oradba.com.ru/tuning/optimizer/articles/a2_srchintellcbo.shtml
я использую метод, уже не помню откуда:
select event, average_wait
from v$system_event
where event like 'db_file s%';
optimizer_index_cost_adj=
(db file sequential read/db file scattered read)*100%
DG> 5) Есть ли средства, позволяющие сбросить куда-нибудь в файл/бд все
DG> запросы, выполняющиеся от моего имени (логина), но без участия/прав
DG> администратора БД? "Alter session" тоже не желательно.
тебе нужны трассировщики на клиенте
вот например некоторые
SQL Statement Tracer (http://www.aboves.com)
SQL Monitor (в составе TOAD от Quest Software)
Дан
DG> Oracle8i Enterprise Edition Release 8.1.6.3.0 - Production
DG> With the Partitioning option
Лучше проапргейдиться до 8.1.7.4 - она стабильнее была.
DG> 3) При установке опции
DG> optimizer_mode = choose
DG> некоторые запросы выполняются в десятки раз медленнее.
DG> "analyze table <tablename> compute statistics" выполнено для всех
таблиц,
DG> используемых в запросах.
DG> Почему-то мне раньше казалось, что "choose" не может уменьшить
время
DG> выполнения запроса. Судя по всему, я ошибался. Интересно мне, в
каких случаях
DG> время запроса при "choose" увеличивается и можно ли что-то с этим
делать, кроме
DG> "analyze table <tablename> delete statistics" и установки другого
DG> optimizer_mode?
Как насчет
analyze index .. compute statistics
or
analyze table .. compute statistics for all indexes ?
Делалось такое ?
Сам по себе choose не ускоряет и не замедляет запросы. Он просто
позволяет генерить "более другие" планы выполнения запросов.
Они в свою очередь приводят к разным временам выполнения запросов.
DG> bye
--
С уважением,
Сергей Косоурихин
Sovtex BI Partner,
Datawarehouse and BI
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
execute immediate присутствует?
DG> 2) Можно ли относительно безболезненно перейти на Oracle 9i? Hе хочется
DG> (да и практически невозможно) переписывать все пакеты, запросы, формы и
DG> отчеты.
Единственная проблема с которой мы в свое время столкнулись это сочетание
распределенных запросов с autonomous_transaction.
DG> 4) Как определить оптимальное значение для optimizer_index_cost_adj,
DG> кроме интуивного выбора и тестирования? Может быть есть какие-нибудь
DG> формальные рекомендации или ваш личный опыт?
http://www.dba-oracle.com/oracle_tips_cost_adj.htm
BR
Michael