Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
06.11.2002, 10:26
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 10:56
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
не в обиду, но "баба-яга против" :-) слишком много неточностей и сам вопрос слишком обширен для фака, это скорее тянет на статью. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 11:01
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Ну так давай замечания по поводу неточностей. Для этого я и опубликовал. А по поводу широты, то я смотрел в FAQ MSSQL, там достаточно большие есть ответы на вопрос. Просто тот так попытался осветить вопрос .dba мне кажется отвечает не этот вопрос, а отвечает на вопрос, "как мне посмотреть план выполнения?" ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 11:27
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Еще бы хорошо было пробежаться по методам объединения таблиц. Скорее даже отдельным пунктом фака. Например, в какойто ветке форума пробежала фраза: используйте HASH JOIN-ы вместо NESTED LOOP-ов. Мол это ВСЕГДА дает лучшую производительность. Хотелось бы, чтобы корифеи местного форума прокомментировали это. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 11:57
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Пункты 1-2. Скрытая предпосылка "индекс эффективнее полного табличного сканирования" неверна. Очень часто преимущества мультиблочного чтения недооценены в плане настройки экземпляра. Прочитав такой фак, человек будет лепить индексы везде где можно и где нельзя. Я насмотрелся таких ситуаций выше крыши, когда работал консультантом. п. 3а Не учитывает ситуацию покрывающего индекса 3b Может быть задействован ведущий(ие) столбцы индекса 3с см. index skip scanning в 9i 3d Хинт - это подсказка (не указатель) 4. Посыл неверен. новый п.3. Не имеет смысла за исключением long/lob полей. п.4 Абстракция. Что такое "много вложенных циклов" ? Nested Loops ??? Если это имелось ввиду, то при RULE такая ситуация будет возникать с 99% вероятности. В целом слишком большой вопрос, который подразумевает знания слишком большого кол-ва деталей для одного вопроса FAQ'a ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 12:48
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Не совсем согласен по замечаниям. "Пункты 1-2. Скрытая предпосылка "индекс эффективнее полного табличного сканирования" неверна. " Естественно, что в определённых случаях полное сканирование эффективнее, чем использование индекса. Это как раз можно включить отдельным пунктом, что запрос может выполняться медленно, потомучто индекс неэффективен, о чём в частности сказано в п.4. Можно включить для спраки правила для оптимизации, использующиеся при регулярном подходе. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Теперь по поводу же п.4: Привожу текст фирменного руководства "Руководство разработчикаприложений Oracle 7": Код: plaintext 1. 2. 3. 4. 5.
Теперь по поводу 3b: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
И про 3a хотелось бы подробнее ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 13:08
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
по поводу пункта 4 Я конечно понимаю, что документация это почти библия... Прежде всего замечу, что этому нелегальному переводу уже много-много лет. Если размышлять логично, тогда уж для 7ки ведущим полем для составного индекса нужно выбирать, то , которое используется в _большинстве_ запросов (для запросов как по всем столбцам индекса, так и по одиночным полям). Значит в приведенном отрывке речь идет только о тех запросах, которые используют _все_ поля индекса. Это подразумевается. В этом случае никакой разницы какой селективностью обладает ведущее поле индекса НЕТ. По определению деревянного индекса B*Tree дерево всегда сбалансировано. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 13:16
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
по поводу 3b вы не учли того, что CBO вообще не знает о каких-то там рангах. Он работает _по_другому_ Исходя из этого я давал ответ по этому пункту. Но если речь в нем идет об RBO (что не было указано), то в принципе то какая разница будет ранг 8 или ранг 10 в этом случае. Не надо на это ссылаться, людей запутаете. Человек прочтет просто "составной индекс не будет использоваться" а это не всегда так. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 13:19
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
по поводу 3а Покрывающий индекс содержит весь перечень столбцов, указанных в кляузе SELECT. Поэтому нет необходимости идти за данными в таблицу. В кляузе WHERE не обязательно указание индексных столбцов. Стоимостной оптимизатор сам разберется. Доступ будет через FAST FULL INDEX SCAN ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 13:28
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Хорошо, можно рассмотреть простой пример. Допустим торговая фирма имеет много клиентов, допустим 10000, которые делают покупки. Каждый отдельный клиент, делает закупки редко, но за каждый день кол-во покупок клиентами в целом состовляет достаточно много, скажем 1000 в день. Один клиент может сделать несколько покупок в один день. Таблица, описывающая покупки: Клиент, дата, номер покупки Необходимо создать индекс позваляющий выбрать клиента за указанный период. Мне кажется достаточно очевидно, что кол-во покупок конкретного клиента за конкретный день, значительно меньше чем общее количество покупок для отдельного дня. И было бы более логичным и эффективным указать в индексе такую последовательность: CREATE INDEX i1_orders ON orders(client, date_pay) чем CREATE INDEX i1_orders ON orders(date_pay, client) Поиск дней входящих в интервал в пределах одного клиента будет быстрее чем поиск клиента в пределах всех заказов кадого дня. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 13:38
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
to killed: по поводу последних замечаний - все эти пункты относятся к оптимизации на основе правил, я же конкретно пишу в тексте, перед перечислением. А чуть ниже пришу про стоимостной подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 14:06
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
зачем вы приводите какой-то субьективный пример с массой условностей, который вцелом мало о чем говорит? Тем не менее если в кляузе WHERE будет client = :a1 and pay_date = :a2 По поводу ФАК'a : По-моему у вас там все в кучу намешано , либо просто невнятно написано что к чему. Пример: пункты 3b, 3c относятся к RULE-оптимизации (как выяснилось), тогда как в пункте 3d вы почему-то начинаете рассуждать о хинтах. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 14:11
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Тем не менее если в кляузе WHERE будет client = :a1 and pay_date = :a2 , то разницы нет никакой. >Мне кажется достаточно очевидно, что кол-во покупок конкретного клиента за конкретный день, значительно меньше чем общее количество покупок для отдельного дня. Вы действительно думаете, чтобы найти кол-во покупок для конкретного клиента за конкретный день, Оракл будет перелопачивать все покупки за этот день? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 14:21
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Пример по поводу 3b: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Мне казалось, этот вопрос не должен был вызывать сомнений ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 14:34
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
"Пример: пункты 3b, 3c относятся к RULE-оптимизации (как выяснилось), тогда как в пункте 3d вы почему-то начинаете рассуждать о хинтах." Ну вот, приехали. А кто сказал, что использование хинтов возможно только в стоимостной оптимизации??? Если я уже в самом хинте могу указать способ оптимизации RULE, это уже говорит о том, что я могу использовать хинты при регулярной оптимизации. Потом, если я правильно написал хинт и он не нарушает никаких правил оптимизатора, то он будет конкретно использовать этот индекс, а не просчитывать какие это варианты. select /*+ RULE INDEX_DESC(test_for_find i1_test_for_find) */ min(serial_key) from test_for_find where serial_key is not null and rownum<4; SQLWKS> select /*+ RULE INDEX_DESC(test_for_find i1_test_for_find) */ 2> min(serial_key) 3> from 4> test_for_find 5> where 6> serial_key is not null and 7> rownum<4; MIN(SERIAL ---------- 5 Выбрана 1 строка. SQLWKS> select operation, options, object_name, optimizer from plan_table 2> OPERATION OPTIONS OBJECT_NAME OPTIMIZER ------------------------------ ------------------------------ ------------------------------ -------------------------------------------------------------------------------- SELECT STATEMENT HINT: RULE SORT AGGREGATE COUNT STOPKEY INDEX FULL SCAN DESCENDING I1_TEST_FOR_FIND Выбрано 4 строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 14:39
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Наверное, надо совершенно разделить ответы на CBO и RBO 2softbuilder Ваш пример не вызывает никаких сомнений сомнений только потому, что по-другому нельзя НИКАК. Если сделать индекс с ведущим date_pay, то при определенных условиях выбор плана будет совершенно неочевиден. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 14:40
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
прежде чем писать FAQ, вам нужно почитать документацию про хинты. Любой хинт кроме RULE означает стоимостную оптимизацию. Хинт RULE _включает_ режим оптимизации по правилам. Сам RBO ничего не знает о хинтах. PS В вашем примере работает стоимостной оптимизатор ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 14:51
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
2killed Везде, где отказались от CBO, обычно вовсю используют хинты. Это обычно набор из ordered, index(index_desc), use_nl(...merge,hash). Пример - заставить RBO использовать составной индекс ,если в запросе только ведущая колонка. Или отказаться от приоретности "<что-то>=<константа>", что нередко бывает выгодным ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 14:57
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Ладно, ребята не хотите как хотите. На примерах доказываешь - не убеждает. Я считал, что это помогло бы народу, хотя бы тем кто только начинает и пока еще не готов окунаться в тонкости. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 15:00
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
2ora600 Еще раз, там где хинты - там работает CBO. Т.е. ни от чего вы не отказались. Как он работал - так он и работает с хинтами. Единственная разница - в последнем случае из всего множества возможных планов, рассматриваются только те, которые удовлетворяют условием хинтов. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 15:06
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
я не против FAQ'a , но он должен быть хорошим. Каждый вопрос - маленький кирпичик, заложенный в общую стену и закрепленный перекрестными ссылками на такие же маленькие кирпичики (вопросы). PS Все ИМХО ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 15:30
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
Я лично не против замечаний и указаний, на ошибки. Просто хочется иметь аргументацию, причём на примерах. И на последок такой вопрос, вот запрос, без указания RULE в хинте: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Обьясните мне, почему я не должен верить плану, в котором написано, что OPTIMIZER = RULE? Наверно это будет последний вопрос по этой теме с моей стороны. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 15:32
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
2killed Да, я неправильно написАл. Вместо "заставить RBO использовать составной индекс " читать "заставить CBO с дефолтной статистикой использовать составной индекс ". Другое дело, что CBO с дефолтной статистикой - это гораздо хуже RBO во многих случаях: тогда народ пишет /*+ rule*/ и на первое время все счастливы :-) 2softbuilder Не обижайтесь :-). Ну просто краткость faq-а будет неизбежно конфликтовать с его качеством и корректностью. Скажем, > 1.Не был создан индекс. > Необходимо создать его. А вдруг мне ОЧЕНЬ важна скорость DML на этих таблицах ? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 15:48
|
|||
---|---|---|---|
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
2sofbuilder а у вас режим какой выставлен в файле параметров? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2002, 16:22
|
|||
---|---|---|---|
|
|||
Вопрос для FAQ: Почему мой запрос работает медленно? |
|||
#18+
OPTIMIZER GOAL = FIRST_ROWS Это единственный рулез для избежания TABLE FULL SCAN в общем случае для SELECT-ов с ORDER BY. Правда, так и не понял, почему для такой банальной операции запрос надо хинтами обкладывать ... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=52&mobile=1&tid=1992788]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 147ms |
0 / 0 |