![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Optimizer=CHOOSE
{bas} © (2002-11-28 15:35:00)Мастера, помогите разобратся со статистикой и индексами...
Есть для всех таблиц нужные индексы, собрал сатистику по всем таблицам как написано в доке (analyze table <table_name> compute statistics) и все равно этот оракул без хинтов не хочет понимать, что нужно юзать индексы...
Даже при таком легком запросе он делает FullScan двух таблиц:
SELECT * FROM t1, t2 where t1.id = t2.id and t1.fk = 10
на t1.id, t2.id и t1.fk есть индексы
ПОМОГИТЕ..........А то уже давано с этим борюсь, но все никак...
{bas} (2002-11-29 18:27:00) [1]petr_v_a © (29.11.02 14:45)
ок
petr_v_a (2002-11-29 14:45:00) [2]> Sergey13 © (29.11.02 13:42)
Sort_area_size - предел, до которого можно выделять память под сортировку,при превышении начинается использование temp, а выделяется-то она по мере необходимости. После окончания сортировки она отдается системе, за исключением Sort_area_retained_size байт.
На этом дискуссию предлагаю в данной ветке прервать, какая-то она уже не по профилю форума получается, а автор удовлетворен :)
> {bas} ©
В общем-то я начал чуть ёрничать ( за что извиняюсь ), не потому что Вы "мало читали" или не "не понимали" ( человека, который ВСЕ прочитал и ВСЕ ПРОЧИТАННОЕ понял, скорее всего, не существует) , а потому, что обиделись ( во всяком случае, мне так показалось ) на предложение прочитать описание КОНКРЕТНОЙ команды
В любом случае, я надеюсь, интересно было всем, несмотря на проскочившую было напряженность :)
{bas} (2002-11-29 14:09:00) [3]petr_v_a © (29.11.02 13:20)
Я не обижаюсь, просто я действительно читал(но наверное мало) и не понимал момента о статистике. Спасибо за помощь.
Сейчас я кстати собрал статистику с помощью, dmbs_stats и в плане запроса я увидел далгожданные индексы
Sergey13 (2002-11-29 13:42:00) [4]2petr_v_a © (29.11.02 13:20)
> Ну прям сразу-то не выделяется, только при первой сортировке
Покажи мне сессию без сортировок. 8-) Разве что системные процессы.
2{bas} © (29.11.02 12:39)
~70*32M = ~2240M только на сортировку!!!(а еще система, буфера...). При 500М физической памяти имеем 1.7Г в свопе - это очень грубый подсчет, но дает представление о порядке чисел. Вот ты и имеешь тормоза. Наверное когда что-то типа OEM на серваке запускаешь - можно чаю попить сходить? 8-) Поставь sort_area_size=1М и sort_area_retained_size=64К ну или около того (поиграйся - посмотри по статистике сколько будет сортировок на диске). А для больших сортировок есть темповое таблспейс.
petr_v_a (2002-11-29 13:20:00) [5]>Sergey13 © (29.11.02 11:20)
>На каждую сессию у тебя выдается по 32м памяти для сортировок
Ну прям сразу-то не выделяется, только при первой сортировке, но все равно значение, ессно, не совсем адекватное. Гораздо хуже другое:
на определение стоимости hash join ( который подразумевает FTS ) и, соответственно, выбор между ним и nested loops ( который подразумевает индекс ) очень сильно влияет параметр hash_area_size, который по умолчанию равен sort_area_size*2
>{bas} © (28.11.02 17:58)
> ...но и там Оракул не хочет использовать индексы...
А на фиг ему использовать, если сказано, стоимость hash join - "копейки"?
К изначальной ситуации ( с fk=10 и "кривым" распределением ) это уже отношения не имеет, просто еще один аргумент все-таки ориентироваться в документации и не обижаться
{bas} (2002-11-29 12:41:00) [6]Sergey13 © (29.11.02 11:20)
Поэтому я и поросил у petr_v_a © прислать свой init.ora файл, что бы сравнить и сделать выводы(о чем читать)
{bas} (2002-11-29 12:39:00) [7]Sergey13 © (29.11.02 11:20)
RAM=500Mb
Count of session ~ 70
sort_area_retained_size - DEFAULT
Sergey13 (2002-11-29 11:20:00) [8]2{bas} © (29.11.02 10:36)
>что после ANALYZE TABLE у вас б. статистика и ее б. юзать оптимизатор Оракула(чего не произошло поэтому и задал вопрос).
А почему ты в этом сомневаешься? Фулскан имеешь - так это не всегда плохо. А может надо индексы пересмотреть? Чего ты хочешь то?
А вот например на вопрос о твоем sort_area_size ты так и не ответил - зачем он тебе такой? 32М это очень (неоправдано) много. На каждую сессиюу тебя выдается по 32м памяти для сортировок. А если у тебя еще sort_area_retained_size стоит по умолчанию =sort_area_size - то вообще труба. У тебя всего памяти сколько? У тебя может свопинг идет страшенный из за этого - отсюда тормоза. Сколько сессий одновременно работает?
petr_v_a (2002-11-29 10:59:00) [9]описание analyze - в SQL Reference
описание dbms_stat - PL/SQL supplied packages reference
Использовать dbms_stat вместо analyze рекомендует техподдержка, хотя analyze проще в использовании
Возможную ( на 99% ) причину проблемы я объяснил, метод решения ( строить гистограммы ) - тоже.
Отсылка ко ВСЕЙ доке - а ниче не поделаешь, прочитать ее надо действительно всю, а некоторые разделы типа Concepts, SQL Reference, Designing and Turning for Performance я лично читал раза три. В любом случае в ней надо ориентироваться, и, честно говоря, я не думал что предложение посмотреть описание конкретной команды и конкретного пакета окажется "отсылкой ко всей доке".
Если я Вам вышлю свой init.ora файл, легче Вам не станет, настройки "как у Вас" не подойдут - это моя система со своими требованиями и своим железом, а у Вас - Ваша
Обидеть не хотел
{bas} (2002-11-29 10:36:00) [10]>>petr_v_a © (28.11.02 21:28)
Я просто просил совета в каком направлении двигатся конкретно в данном вопросе и совсем не хотел, что бы кто-то делал за меня мою работу. Я не просто с бухты барахты спросил : а у меня все тормозит, не пришлете ли свой Oracle, м.б. с ним у меня все б. нормально работать - я достаточно много перелопатил доки, в которой написано, что после ANALYZE TABLE у вас б. статистика и ее б. юзать оптимизатор Оракула(чего не произошло поэтому и задал вопрос). Как всегда не сказали ничего конкретного - в каком направлении двигатся(только понял, что надо юзать не просто ANALYZE, а dbms_stat, хотя я думаю, что от этого ничего не изменится).
И в итоге, спасибо за отсылку ко ВСЕЙдоке(по моим подсчетам около 400М текста с картинками)
petr_v_a (2002-11-29 10:21:00) [11]Sly © (29.11.02 10:17)
> Забыл: Oracle не ставить
Сам упадет :)
Sly (2002-11-29 10:17:00) [12]>petr_v_a © (29.11.02 09:58)
>Документацию не читать, в базу не заходить, пользователей уволить, ружья с собой >не брать, из автобуса не выходить :))
Забыл: Oracle не ставить.
petr_v_a (2002-11-29 09:58:00) [13]Документацию не читать, в базу не заходить, пользователей уволить, ружья с собой не брать, из автобуса не выходить :))
Sergey13 (2002-11-29 09:11:00) [14]2vyalkov (29.11.02 06:38)
Как ты крут!!! 8-)
>Для начала удали всю статистику, которую ты имел смелость неосторожно собрать (сделать analyze).
Действительно, за такое нахальство оракловой поддержки лишать надо. 8-)
>Выстави OPTIMIZER MODE по умолчанию.
И какой он по твоему. По моему(смотрю в доку по 8.0.4) это CHOOSE. Но самое интересное, что при выполнении предыдущего твоего совета будет работать RULE.
>Все - занавес.
Согласен. 8-)
>IMHO, лучше вообще не использовать analyze.
Я предлагаю еще мораторий на EXPLAINE PLAN. 8-)
vyalkov (2002-11-29 06:38:00) [15]Не занимайся садомазохизмом.
Для начала удали всю статистику, которую ты имел смелость неосторожно собрать (сделать analyze).
Выстави OPTIMIZER MODE по умолчанию.
Все - занавес. Оптимизатор теперь сам разберется, какие индексы использовать.
IMHO, лучше вообще не использовать analyze.
petr_v_a (2002-11-28 21:28:00) [16]> {bas} © (28.11.02 19:57)
А не подскажите, как оптимально писать программы на Delphi? :)
1. Изучите архитектуру сервера
2. Поймите назначение этих параметров, поведение каких подсистем они задают
3. Поймите, что Вы хотите от системы
4. Сформулируйте для себя, что Вас в поведении системы не устраивает ( это Вы в данном случае сделали четко )
4. Решите какие из них стоит трогать и как
На все это уйдет от 1-го до 100 лет :) , но оно того стоит, да и альтернативный выход только один - попасть в орешник с вопросом типа {bas} © (28.11.02 19:57) ((:
Про неочевидные вещи ( т.е. те, которые не описаны в документации ) спрашивайте.
Удачи :)
petr_v_a (2002-11-28 20:02:00) [17]команда analyze и пакет dbms_stat
правда, при использовании bind-переменных про гистограммы оно :) забудет
За подробностями отсылаю к документации
Удачи :)
{bas} (2002-11-28 19:57:00) [18]petr_v_a © (28.11.02 19:32)
а не скажите оптимальные параметры этих настроек(например, как у вас):
db_multiblock_read_count,
hash_area_size,
sort_area_size,
optimizer_index_cost_adj и т.д. и т.п
{bas} (2002-11-28 19:52:00) [19]Sly © (28.11.02 19:06)
ну я же сказал, что во сновном fk=20, так и получилось: .991150442
petr_v_a © (28.11.02 19:32)
как строить гистограмы(какой пакет и проц.)??
petr_v_a (2002-11-28 19:32:00) [20]Если по совместительству администратор, то почему sort_area_size 32 мегабайта, а не 48? Не сочтите за наезд, просто хочу, чтоб Вы задумались и избежали кучи геморроя. Впрочем, это вопрос не этого форума.
>кстати fk=10, всего несколько записей(к примеру)
А оптимайзер откуда это знает? По статистике он видит, что на 20 тыс записей 4 различных значения fk => условию fk=10 удовлетворяет 5 тыс записей из 20 тыс => FTS - то что надо! :)
Чтоб вышеупомянутое чудо интеллектуальной техники :) так не считало, при анализе надо строить гистограммы