Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Всем привет! Разбираюсь с DB2 и простая вещь меня ставит в тупик :-( Есть две таблички мастер-деталь (хранилище чеков): Код: 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. ChequeHead ~11млн ChtquePos ~60млн Статистика полностью собрана Имею простейший запрос: Код: plaintext 1. 2. 3. Стоит увеличить период и все, по ChequePos идет TBSCAN и все виснет намертво :-((( db2advis выдает какую-ту хрень и обещает увеличение производительности на 3.2%, что меня ни как не устроит. Хочу отметить, что с DB2 только разбираюсь. Плотно же работаю с Firebird и MSSQL, но обе эти СУБД позволяют "указать" оптимизатору подхватить индекс. Что же мне сделать в DB2??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 23:43 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
На вскидку: Я бы поменял порядок колонок в индексах Код: plaintext 1. 2. 3. 4. 5. А запрос переписал бы с помощью WITH. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Причем до кучи указал бы селективность. Поищите SELECTIVITY тут на форуме. И еще, когда вы указываете явно параметры запроса - это одно. А когда вы будите связывать их в будущем через переменные - это другое. Имейте ввиду что можете получить разные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 01:08 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Добрый день. uchuDB2Хочу отметить, что с DB2 только разбираюсь. Плотно же работаю с Firebird и MSSQL, но обе эти СУБД позволяют "указать" оптимизатору подхватить индекс. Что же мне сделать в DB2???Какая у вас версия db2 и фикспак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 11:52 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinКакая у вас версия db2 и фикспак?[/quot] Добрый день. У меня установлен DB2 Express-C 9.1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 12:23 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
uchuDB2У меня установлен DB2 Express-C 9.1.2К сожалению не уверен, что на express-c будет работать, но вы можете попробовать использовать optimization profiles . Это те же указания оптимизатору. Вкратце: 1. Создаете таблицу SYSTOOLS.OPT_PROFILE: db2 "call sysinstallobjects('opt_profiles', 'c', '', '')" 2. У себя на диске создаете somefile.xml: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext Из командного окна db2cmd, соединившесь с базой, вставляете 1 запись в SYSTOOLS.OPT_PROFILE: Код: plaintext В command center при соединении с базой выполняем: Код: plaintext Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 13:07 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
На мой субъективный взгляд хранить дата_время в одном поле timestamp не есть очень хорошо... Всегда пытаюсь разбить на 2 поля... Мне кажется так ищется гораздо быстрее... Кстати, предметная облать та же: чеки, товары в них... ну и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 13:28 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
TORTНа мой субъективный взгляд хранить дата_время в одном поле timestamp не есть очень хорошо... Всегда пытаюсь разбить на 2 поля... Мне кажется так ищется гораздо быстрее... Кстати, предметная облать та же: чеки, товары в них... ну и т.д. +1 У меня еще есть вопрос к uchuDB2 . Ну и ко всемв том числе. Почему на этапе создания чека общую сумму по всем позициям не поместить в WAREHOUSE.CHEQUEHEAD? Почему сделано именно так как сделано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 13:34 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein Марк, спасибо! Обязательно попробую, когда добирусь до базы. TORT, gardenman На мой субъективный взгляд хранить дата_время в одном поле timestamp не есть очень хорошо... Всегда пытаюсь разбить на 2 поля... Мне кажется так ищется гораздо быстрее... А на мой - без разницы :) (тем более, что я храню и дату и таймштамп) И, должен заметить, что индек по полю DateOperation задействован. У меня в голове не укладывается почему не берется индекс по внешнему ключу. Причем, задаю период сутки - отрабатывает в момент, задаю период сутки + 1мин (кол-во чеков увеличивается на 3!) - индекс отваливается и идет таблскан на 20мин!!!!! gardenmanУ меня еще есть вопрос к uchuDB2. Ну и ко всемв том числе. Почему на этапе создания чека общую сумму по всем позициям не поместить в WAREHOUSE.CHEQUEHEAD? Почему сделано именно так как сделано? Как нету? А поле Summa и Disc_Summ в табл. WAREHOUSE.CHEQUEHEAD Просто я показал упращенный вариант запроса, а мне нада сделать НДС, Sum(Сумма) group by НДС, а для этого мне необходимо перебрать позиции чеков :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 15:26 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Имхо, но строить DWH на Express-C идея по меньшей мере сомнительная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 16:03 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
mitekИмхо, но строить DWH на Express-C идея по меньшей мере сомнительная. Жить вообще глупо. От этого даже умирают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 16:10 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein Mark Barinstein5. Сообщите, что получилось. Я добавил в xml-файл строку, надеюсь я правильно все понял :) Код: plaintext Получился план с индексными чтениями! Но если вместо знаков "?" я подставляю период, то все как и прежде ;-( Оппа. Попробовал запустить "свежий" редактор (Command Editor), подсоединился к базе без указания Код: plaintext :-((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 17:47 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Да, и если со знаками "?" план удачный, значит ли это, что используя, например, в Delphi в запросе :dt1 and :dt2 будет такой же план. Или DB2 будет перестроивать план в зависимости от конкретных значений dt1 и dt2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 17:49 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
uchuDB2Да, и если со знаками "?" план удачный, значит ли это, что используя, например, в Delphi в запросе :dt1 and :dt2 будет такой же план. Или DB2 будет перестроивать план в зависимости от конкретных значений dt1 и dt2Никогда не работал с дельфи, но мне кажется, что оно должно делать prepare c маркерами, т.е. должно работать. Оптимизатор db2 ищет точное совпадение текстов запросов, исключая лишние пробелы и управляющие символы. Т.е. если вы будете использовать константы, то оно не будет оптимизироваться по профилю. Другой способ, как вам выше советовали, сделать так (из db2cmd): Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 18:06 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein Еще раз спасибо. Небольшое уточнение: индекс по Код: plaintext Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 18:53 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 19:55 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein Какая у вас версия db2 и фикспак? Добрый день Mark, не покажите как это должно выглядеть, для версии 8.2 FixPack 15. Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2008, 05:42 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Переделал индекс по внешнему ключу как кластерный, и он стал подхватываться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 09:56 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Добрый день. OlegA67Добрый день Mark, не покажите как это должно выглядеть, для версии 8.2 FixPack 15. Заранее спасибоК сожалению, мне не удалось заставить v8 подхватывать optimization profile, несмотря на то, что, вроде бы, это возможно, как описано здесь . C selectivity должно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 14:04 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
мне кажется была какая-то статья примерно на эту тему, как правильно собирать статистику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 15:44 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
OlegA67 Mark Barinstein Какая у вас версия db2 и фикспак? Добрый день Mark, не покажите как это должно выглядеть, для версии 8.2 FixPack 15. Заранее спасибоДобрался до v8.1.14 на linux. При установленной переменной db2_optprofile, т.е. после db2set db2_optprofile=YES db2stop db2start похоже, что точно такой же оптимизационный профиль подхватывается, т.к. я на одних и тех же тестовых запросах получаю разные планы в зависимости от того, выполняю я команду SET CURRENT OPTIMIZATION PROFILE=MY_SCHEMA.MY_NAME или нет перед построением плана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2008, 12:38 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Спасибо буду пробовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2008, 15:03 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, У меня вот такой запрос: Код: sql 1. Я добавил индекс IDX_DELETE_DATE, но так как по результатам выполнения выдаются примерно 90% записей, то выполняется TBLSCAN. Я разбираюсь с профилями оптимизации и хочу принудить оптимизатор использовать в этом запросе индекс IDX_DELETE_DATE, для этого я написал следующий профиль: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Я выполнил приведенные выше рекомендации: Mark Barinstein uchuDB2У меня установлен DB2 Express-C 9.1.2К сожалению не уверен, что на express-c будет работать, но вы можете попробовать использовать optimization profiles . Это те же указания оптимизатору. Вкратце: 1. Создаете таблицу SYSTOOLS.OPT_PROFILE: db2 "call sysinstallobjects('opt_profiles', 'c', '', '')" 2. У себя на диске создаете somefile.xml: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. И файл somefile.txt для импорта: Код: sql 1. 3. Из командного окна db2cmd, соединившесь с базой, вставляете 1 запись в SYSTOOLS.OPT_PROFILE: Код: sql 1. 4. В command center при соединении с базой выполняем: Код: sql 1. и смотрим план запроса Код: sql 1. 2. 3. 4. 5. Сообщите, что получилось. и Mark Barinstein OlegA67пропущено... Добрый день Mark, не покажите как это должно выглядеть, для версии 8.2 FixPack 15. Заранее спасибоДобрался до v8.1.14 на linux. При установленной переменной db2_optprofile, т.е. после db2set db2_optprofile=YES db2stop db2start похоже, что точно такой же оптимизационный профиль подхватывается, т.к. я на одних и тех же тестовых запросах получаю разные планы в зависимости от того, выполняю я команду SET CURRENT OPTIMIZATION PROFILE=MY_SCHEMA.MY_NAME или нет перед построением плана. Но запрос все равно не использует профиль оптимизации, а выполняет TBLSCAN. Вопрос : Как мне сделать, чтобы этот профиль оптимизации использовался при выполнении моего запроса??? P.S. при добавлении Код: sql 1. используется индекс IDX_DELETE_DATE, но я хочу этого добиться с помощью профиля оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2015, 14:15 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
ASukhov1986, Control Center по какой-то причине не реагирует на текущие установки профиля для сессии. Но он реагирует на переменную CURRENTOPTIMIZATIONPROFILE в db2cli.ini. Т.е. вы можете выставить этот профиль на клиенте (там, где, скажем, база зарегистрирована под алиасом mydbalias ) так: Код: plaintext Либо получать план не в гарфическом виде, а при установленной в сессии CURRENT OPTIMIZATION PROFILE (в т.ч. и в сессии DB2 Command Center) командой: Код: plaintext IBM Data Studio лишена этого недостатка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2015, 21:12 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Исходя из рекомендаций: Mark BarinsteinASukhov1986, Control Center по какой-то причине не реагирует на текущие установки профиля для сессии. Но он реагирует на переменную CURRENTOPTIMIZATIONPROFILE в db2cli.ini. Т.е. вы можете выставить этот профиль на клиенте (там, где, скажем, база зарегистрирована под алиасом mydbalias ) так: Код: plaintext Либо получать план не в гарфическом виде, а при установленной в сессии CURRENT OPTIMIZATION PROFILE (в т.ч. и в сессии DB2 Command Center) командой: Код: plaintext IBM Data Studio лишена этого недостатка. выполнил следующие шаги: 1. в командной строке подключился к БД с помощью команды Код: sql 1. ; 2. в командной строке установил для текущей сессии профиль оптимизации с помощью команды Код: sql 1. ; 3. в командной строке получил план в не графическом виде с помощью команды: Код: sql 1. ; 4. в командной строке получил отображение плана с помощью команды: Код: sql 1. . В результате индекс опять не использовался. Журнал моих действий: Код: xml 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 10:00 |
|
||
|
Опять про игнорирование индексов
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Также выполнил шаги исходя их первой рекомендации с db2cli.ini, в результате выполнения действий индекс опять не использовался. Вот шаги которые я выполнял: Код: xml 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. 73. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 10:39 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=35238712&tid=1600852]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 273ms |
| total: | 402ms |

| 0 / 0 |
