|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Вопрос по мотивам топика: http://www.sql.ru/forum/actualthread.aspx?tid=950804 ( В каких СУБД хинты носят чисто директивный характер? ) В качестве собственной ликвидации безграмотности и расширения кругозора хотелось бы узнать в каких рсубд какие есть возможности хинтования. Например: хинтовать нельзя вообще, можно указывать только индексы, можно хинтовать еще план выполнения (стратегию соединений итп.). Если можно, то вкратце хотелось бы что-бы каждый поделился возможностяим по своей субд, с которой работает. В Sybase SA можно хинтовать индексы, задавать вручную статистику распределения значения - хинтовать статистику, менять уровень "заумности" оптимизатора и косвенно влиять на стратегию выполнения (план) запроса через опцию "оптимизировать для OLTP/OLAP/Смешанный режим". Насколько я слышал, что у DB2 прямых хинтов нет, т.к. считается что оптимизатор шибко умный, но ямогу ошибаться либо мои знания устарели. У мсскл/азе точно есть хинтование индексов, про возможности хинтования остального не знаю. У оракла вроде как богатые возможности, но деталей и возможностей не знаю совсем. Про информикс тоже ничего не знаю. Файрбёрд - ничего не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 16:46 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ggg_old, В Oracle хинты синтаксически оформляются как комментарии, при этом если Вы неправильно написали хинт, оптимизатор (компилятор) вам об этом не скажет, а просто проигнорирует его. В Oracle очень богатые возможности хинтования: индексы, способ сканирования индекса, порядок и способ соединения таблиц, трансформации запросов, параллелелизм, проталкивание предикатов, кеширование, возможность задавать параметры оптимизатора и т.д. А так же, что интересно, есть три хинта, меняющих логику выполнения запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 17:18 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
AmKadGgg_old, В Oracle хинты синтаксически оформляются как комментарии, при этом если Вы неправильно написали хинт, оптимизатор (компилятор) вам об этом не скажет, а просто проигнорирует его. В Oracle очень богатые возможности хинтования: индексы, способ сканирования индекса, порядок и способ соединения таблиц, трансформации запросов, параллелелизм, проталкивание предикатов, кеширование, возможность задавать параметры оптимизатора и т.д. А так же, что интересно, есть три хинта, меняющих логику выполнения запросов. А что это за хинты меняющие логику выполнения запросов и следовательно меняющие результат выполнения запросов? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 17:32 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
логику выполнения запросов, CHANGE_DUPKEY_ERROR_INDEX IGNORE_ROW_ON_DUPKEY_INDEX RETRY_ON_ROW_CHANGE ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 17:35 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
AmKad, Правда первый работает с некоторыми недокументированными ограничениями. CHANGE_DUPKEY_ERROR_INDEX. Update ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 17:37 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Проталкивание предикатов и вышеназванные опции влияющие на логику выполнения не отностяся к хинтам оптимизатора, а скорее являются свойством навороченности оптимизмтора вообще (проталкивание предиктов) и возможностей ядра субд. Мне бы хотелось в этом топике сконцентрироваться только на инструментах хинтования. Я еще слышал, что в оракле админ может навзятать план выполнения запроса, не трогая его текст. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 17:43 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ggg_oldПроталкивание предикатов и вышеназванные опции влияющие на логику выполнения не отностяся к хинтам оптимизатораДа ладно? Разве это PUSH_PRED NO_PUSH_PRED RESULT_CACHE NO_RESULT_CACHE DYNAMIC_SAMPLING CACHE MONITOR NO_XML_QUERY_REWRITE и то что я привел выше, не хинты? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 17:53 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ggg_oldЯ еще слышал, что в оракле админ может навзятать план выполнения запроса, не трогая его текст. А указать тип соединения таблиц это навязать план? Если да, то в оракле это можно. Вопрос остается в том обязательно ли оракл будет выполнять этот хинт, т.е. является ли он директивным. Если имеется ввиду указать непосредственно весь план выполнения запроса, то в ORACLE и MSSQL нельзя, но можно в Firebird. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 18:07 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
2AmCad: После изучения док про хинты push_pred, cache и прочее - согласен, это хинты оптимизатора, влияющие на стратегию. Просто в SA протокалкивание предиката это часть возможности оптимизмтора и не хинтуется. А вот CHANGE_DUPKEY_ERROR_INDEX, IGNORE_ROW_ON_DUPKEY_INDEX, RETRY_ON_ROW_CHANGE все-таки параметры скорее ядра а не оптимизмтора. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 18:16 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
а вообще список хинтов оптимизатора оракла впечатляет: http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements006.htm#autoId3 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 18:18 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ggg_oldА вот CHANGE_DUPKEY_ERROR_INDEX, IGNORE_ROW_ON_DUPKEY_INDEX, RETRY_ON_ROW_CHANGE все-таки параметры скорее ядра а не оптимизмтора.Согласно доке, это все-таки хинты. Но если Вы не согласны, я не хочу об этом спорить. Чем они отличаются от остальных - я уже написал. А понятие ядро - для меня несколько абстрактно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 18:20 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ggg_old2AmCad: После изучения док про хинты push_pred, cache и прочее - согласен, это хинты оптимизатора, влияющие на стратегию. Просто в SA протокалкивание предиката это часть возможности оптимизмтора и не хинтуется. А вот CHANGE_DUPKEY_ERROR_INDEX, IGNORE_ROW_ON_DUPKEY_INDEX, RETRY_ON_ROW_CHANGE все-таки параметры скорее ядра а не оптимизмтора. В Оракле это тоже возможность оптимизатора. Вообще, почти все, что можно сделать хинтом, Оракловый оптимизатор способен сделать самостоятельно. Хинты вроде как задумывались на крайний случай. Ggg_oldа вообще список хинтов оптимизатора оракла впечатляет Это потому, что нет ни одного серьезного приложения, которое бы обходилось без хинтов, оракловый оптимизатор, как впрочем и сам оракл, очень богат на баги, хинты в оракле - суровая необходимость. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 18:28 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ggg_oldВ качестве собственной ликвидации безграмотности и расширения кругозора хотелось бы узнать в каких рсубд какие есть возможности хинтования. Например: хинтовать нельзя вообще, можно указывать только индексы, можно хинтовать еще план выполнения (стратегию соединений итп.). Если можно, то вкратце хотелось бы что-бы каждый поделился возможностяим по своей субд, с которой работает.Жаль, что Вы сузили круг допущенных к рассмотрению типов СУБД лишь реляционными. Хотя в других - не РСУБД - тоже есть хинты, например: Query Optimization Options ExtentSize and Selectivity ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 18:32 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
2servit: да, интерисует именно рсубд, как реализующие идею декларативного программирования и имеющие массовое распространение. Да и сравнивать их между собой имеет смысл, а вот с каше как бы нет, т.к. продукты разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 18:36 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ggg_oldНасколько я слышал, что у DB2 прямых хинтов нет, т.к. считается что оптимизатор шибко умный, но ямогу ошибаться либо мои знания устарели.Ну, скажем так, есть, но не хинты :) В самих запросах хинты не указываются. Обычно, если что-то не так, разбираются почему и, например, меняют уровень оптимизации, от которого зависит "вдумчивость" работы оптимизатора. Если все совсем плохо, можно написать optimization profile , который "рекомендует" желаемый план выполнения, не меняя самих запросов/программ. Но это - "последний довод", обычно достаточно разобраться ( db2advise , например), почему план оптимизатора плохой. А так да, действительно "шибко умный", я этими хинтами ни разу не пользовался. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 18:39 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
а подскажет кто-то ссылочку на аналогичный ДБ2-шному механизму указания плана из-вне у оракла? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 19:01 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ggg_oldа подскажет кто-то ссылочку на аналогичный ДБ2-шному механизму указания плана из-вне у оракла? механизм заветься stored outlines вкратце о нем тут: http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-sql-plan-management-11gr2-133099.pdf ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 19:37 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ну, что ж, начнем.. Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2012, 01:22 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2012, 01:36 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Plan Guides Собственно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2012, 01:43 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2012, 02:01 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2012, 02:04 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ага пока выходит такая картина, если есть замечания, дпололняйте: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2012, 11:53 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Под метахинтами понимаются хинты, которые не указывают оптимизатору напрямую что именно делать, а декларативно описывают некие свойства запроса, на основании которых оптимизатор может выбирать стратегию своей работы. Пример: уровень параллельности запроса, уровень "заумности" оптимизатора на конкретном запросе, хинты кардинальности значения в колонке итп. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2012, 11:59 |
|
Сравнение механизмов хинтования.
|
|||
---|---|---|---|
#18+
Ggg_oldпараллельность(?) Почему знак вопроса? Код: sql 1.
Ggg_old[статистика(?) Покрывается этим: Код: sql 1. 2.
Ggg_oldдопхинты(тип нагрузки запроса, уровень глубины оптимизации) А можно на примерах показать планы запросов при таких хинтах и без оных? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2012, 12:04 |
|
|
start [/forum/topic.php?fid=35&msg=37855733&tid=1552536]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 242ms |
total: | 377ms |
0 / 0 |