Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть тестовая база 9.1.8 на файловой системе jfs2 поверх RAID10 (16HDD, 128K disk segment size) Тестовая таблица создана в TS с PAGESIZE=16K, EXTENSIZE=32, PREFETCHSIZE=AUTOMATIC и одним контейнером. NUM_IOSERVERS=AUTOMATIC=4 При включении DB2_PARALELL_IO=*:4 и выше тестовый запрос, генерирующий фуллскан, начинает работать в 3 раза медленнее чем при невключенном DB2_PARALELL_IO, что есть очень странно, учитывая, что в мануале как бы настойчиво рекомендуется использовать DB2_PARALEL_IO, если контейнер TS лежит на RAID-девайсе. Игрища с изменением PREFETCHSIZE картину сильно не меняют. (+/- 10%) При EXTENTSIZE < 32 запрос начинает выполняться еще дольше, увеличение EXTENSIZE > 32 результат не улучшает. Переразбить рейд на 4x4, увы, не вариант. Нужно соптимизировать текущий конфиг. При компрессии тестовой таблицы результаты выполнения запроса те же только скорость чтения с диска меньше в 3 раза. Может быть еще что-то необходимо включить/изменить для распараллеливания I/O ? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2010, 13:00 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Добрый день. 16 дисков в RAID10 - это 8 параллельных зеркал. Т.е. full stripe будет 128k*8=1024k Поэтому при странице в 16k устанавливаем: - EXTENTSIZE=8, чтоб extent попадал в segment size - DB2_PARALELL_IO=*:8 Таким образом, при каждом префетче будет генерироваться 8 параллельных запросов, каждый на 128k (PAGESIZE*EXTENTSIZE). В теории такой характер запроса должен быть оптимальным - все диски загружены. Если не выставлять DB2_PARALLEL_IO, то при странице в 16k загрузить все диски сразу можно при EXTENTSIZE=64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2010, 14:46 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinДобрый день. 16 дисков в RAID10 - это 8 параллельных зеркал. Т.е. full stripe будет 128k*8=1024k Поэтому при странице в 16k устанавливаем: - EXTENTSIZE=8, чтоб extent попадал в segment size - DB2_PARALELL_IO=*:8 Таким образом, при каждом префетче будет генерироваться 8 параллельных запросов, каждый на 128k (PAGESIZE*EXTENTSIZE). В теории такой характер запроса должен быть оптимальным - все диски загружены. Если не выставлять DB2_PARALLEL_IO, то при странице в 16k загрузить все диски сразу можно при EXTENTSIZE=64. Спасибо за совет. Сделал тесткейс с тремя размерами экстента (8,32,64) При выключенном DB2_PARALLEL_IO тестовый запрос выполняется : extentsize 8 - ~70 сек extentsize 32 - ~50 сек extentsize 64 - ~70 сек Т.е. запрос выполняется с одинаковой скоростью при размере экстента как 8 так и 64 страницы. Что есть весьма странно. При DB2_PARALLEL_IO=*:8 extentsize 8 - ~320 сек extentsize 32 - ~215 сек extentsize 64 - ~200 сек После каждого выполнения тестового запроса инстанс перестартовывал. Каждый вариант выполнял 3 раза и взял среднее время выполнения. Опыты показывают явную деградацию перфоманса при включении DB2_PARALLEL_IO. Как-то это ненормально, имхо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2010, 18:20 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Надо бы этот запрос db2batch'ем выполнять. Смотреть на io статистику по табличному пространству и сравнивать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2010, 19:06 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinНадо бы этот запрос db2batch'ем выполнять. Смотреть на io статистику по табличному пространству и сравнивать... Очень хорошо использовать db2top, db2pd (вместе с iostat, topas или nmon). С уважением, Вадим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2010, 20:18 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Я вряд ли могу сказать полезное по данной конкретной проблеме, но, абстрактно говоря, все эти RAID'ы (кроме первого) мне кажутся опасными с точки зрения настройки производительности. Вот, full stripe получился в 1024k. А действительно ли выравнены экстенты по этому размеру? (Я не знаю, как устроена jfs2). Это не говоря о том, что, кроме fullscan'а, бывает и random reading. Спокойнее было бы просто сделать 8 зеркал и разместить на них по 8 контейнеров каждого tablespace. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2010, 20:41 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2testДобрый день! Есть тестовая база 9.1.8 на файловой системе jfs2 поверх RAID10 (16HDD, 128K disk segment size) Тестовая таблица создана в TS с PAGESIZE=16K, EXTENSIZE=32, PREFETCHSIZE=AUTOMATIC и одним контейнером. NUM_IOSERVERS=AUTOMATIC=4 При включении DB2_PARALELL_IO=*:4 и выше тестовый запрос, генерирующий фуллскан, начинает работать в 3 раза медленнее чем при невключенном DB2_PARALELL_IO, что есть очень странно, учитывая, что в мануале как бы настойчиво рекомендуется использовать DB2_PARALEL_IO, если контейнер TS лежит на RAID-девайсе. Игрища с изменением PREFETCHSIZE картину сильно не меняют. (+/- 10%) При EXTENTSIZE < 32 запрос начинает выполняться еще дольше, увеличение EXTENSIZE > 32 результат не улучшает. Переразбить рейд на 4x4, увы, не вариант. Нужно соптимизировать текущий конфиг. При компрессии тестовой таблицы результаты выполнения запроса те же только скорость чтения с диска меньше в 3 раза. Может быть еще что-то необходимо включить/изменить для распараллеливания I/O ? Спасибо. FAQ: http://www-01.ibm.com/support/docview.wss?rs=71&uid=swg21298716 C.16 When using a RAID device for tablespaces, what should I set the EXTENTSIZE of the tablespace to? It is recommended that you set the EXTENTSIZE to match the stripe set of the RAID device for efficient data retrieval. Further tuning may be required depending on benchmark tests run on your individual systems. Example:- If you have a RAID 5 (4+1) system with 128k strip size you could set your EXTENTSIZE at 64k and your PAGESIZE at 8k. (as a rule of thumb, EXTENTSIZE X PAGESIZE - 64X8, should equal to strip size X no of disks, - 128X4) Посмотри глубину очередей и число серверов AIO - Best Practices for DB2 on AIX 6.1 for POWER Systems http://www.redbooks.ibm.com/redbooks/pdfs/sg247821.pdf PS: Database Performance Tuning on AIX - http://www.redbooks.ibm.com/redbooks/pdfs/sg245511.pdf С уважением, Вадим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2010, 09:58 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinНадо бы этот запрос db2batch'ем выполнять. Смотреть на io статистику по табличному пространству и сравнивать... Спасибо. Прогнал батчем вариант с EXTENTSIZE=8 со сборкой снэпшотов Без DB2_PARALLEL_IO : Код: 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. C установленным DB2_PARALLEL_IO=*:8 Код: 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. Во втором случае Total elapsed asynchronous read time во много раз больше, правда не очень понятно из-за чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2010, 14:33 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
GVF112GVF Посмотри глубину очередей и число серверов AIO - Best Practices for DB2 on AIX 6.1 for POWER Systems http://www.redbooks.ibm.com/redbooks/pdfs/sg247821.pdf PS: Database Performance Tuning on AIX - http://www.redbooks.ibm.com/redbooks/pdfs/sg245511.pdf Спасибо. В моей системе для диска c базой queue_depth=10 и число запущенных aioserver'ов =120 (судя по ps -elfk | grep aio). В редбуке пишут, что для FC-дисков нужно число шпинделей умножать на 16, т.е. в моем случае 16*16=256=MAX. Думается, что это будет многовато :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2010, 15:05 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2testВо втором случае Total elapsed asynchronous read time во много раз больше, правда не очень понятно из-за чего.Похоже, что массив гораздо хуже обрабатывает параллельные запросы, чем последовательные. Xотя вроде бы должно быть наоборот... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2010, 18:46 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Думаю, что проблема кроется в физическом планировании базы данных. - Нужно смотреть на план выполнения запрос (db2 explain tools). - Как объекты базы данных затрагивает запрос (таблицы, индексы). - Какие табличные пространства наиболее интенсивно используются (операции I/O - read/write). Это легко посмотреть,используя утилиты - db2top (или db2pd). На уровне ОС - можно использовать nmon/topas или iostat, sar. Далее, можно понять, насколько эффективно выполняются параллельные операции I/O - в каких табличных пространствах и по каким контейнерам. Может он у Вас вообще не расспаралеливает I/O на определенном уровне выполнения SQL-запроса .... ;) Посмотри в db2top как читаются/обновляются таблицы и что происходит на уровне табличных пространств в момент выполнения SQL-запроса. Сколько контейнеров в табличном пространстве. Где выполняются сортировки. Как стратегия размещение - таблиц, индексов и т.д. Где затык - на уровне OC, адаптеров I/O, дисковой подсистемы и т.д. С уважением, Вадим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 00:15 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
GVF112GVFMark Barinstein, Думаю, что проблема кроется в физическом планировании базы данных. - Нужно смотреть на план выполнения запрос (db2 explain tools) в том и другом случае. - Какие объекты базы данных затрагивает SQL-запрос (таблицы, индексы). - Какие табличные пространства наиболее интенсивно используются (операции I/O - read/write). Это легко посмотреть,используя утилиты - db2top (или db2pd). На уровне ОС - можно использовать nmon/topas или iostat, sar. Далее, можно понять, насколько эффективно выполняются параллельные операции I/O - в каких табличных пространствах и по каким контейнерам. Может он у Вас вообще не расспаралеливает I/O на определенном уровне выполнения SQL-запроса .... ;) Посмотри в db2top как читаются/обновляются таблицы и что происходит на уровне табличных пространств в момент выполнения SQL-запроса. Сколько контейнеров в табличном пространстве. Где выполняются сортировки. Какая стратегия размещения используется для таблиц, индексов и т.д. Где затык (очереди на обслучивание) - на уровне OC, адаптеров I/O, дисковой подсистемы и т.д. С уважением, Вадим. Марк, sorry - это не в твой адреc .... this is message for db2test ... Thanks! Vadim. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 00:23 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
А ларчик просто открывался (с) Как-то я забыл, что для 9.1 по дефолту таблспейсы создаются с FILE SYSTEM CACHING. Ниже (если кому интересно) результаты тестовых прогонов (по 5 раз) запроса по таблицам с размером экстента соответственно 2,8,32 и 64 страницы по 16к при отсутствии/наличии DB2_PARALLEL_IO и FILESYSTEM CACHING test_without_DB2_PARALLEL_IO_and_ FILESYSTEM_CACHING Код: plaintext 1. 2. 3. 4. 5. 6. test_without_DB2_PARALLEL_IO_and_ NO_FILESYSTEM_CACHING Код: plaintext 1. 2. 3. 4. 5. 6. test_ DB2_PARALLEL_IO-8 _and_ FILESYSTEM_CACHING Код: plaintext 1. 2. 3. 4. 5. 6. test_ DB2_PARALLEL_IO-8 _and_ NO_FILESYSTEN_CACHING Код: plaintext 1. 2. 3. 4. 5. 6. Мысли по полученным результатам : 1. Включение DB2_PARALLEL_IO на таблспейсах с FILESYSTEM CAСHING приводит к существенному падению производительности запросов с фуллсканом (исходная проблема). 2. EXTENTSIZE=2 - наихудший вариант для исходной дисковой конфигурации (raid10, 16hdd, 128к disk segment size, 1024k full stripe), что, собственно, неудивительно. 3. При NO FILE SYSTEM CACHING (что по дефолту для таблспейсов начиная с 9.5) установка DB2_PARALLEL_IO повышает производительность и чем больше EXTENTSIZE приближается к RAID full stripe тем выше. 4. Кэш файловой системы иногда не так уж плох, как о нем говорят :) 5. etc.... Посмотрим на результаты с компрессией таблиц. To be continued .... P.S. Понятно, что это все "сферический тест в вакууме" и как оно будет на реальном продакшене с миксом коротких запросов по индексу и периодическими фуллсканами еще "бабушка надвое сказала". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 13:06 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Исследования продолжаются .... В полученных выше результатах для симуляцмм фуллскана использовал простейший запрос вида select date, count(*) from table group by date Теперь просто дергаю данные из тех же таблиц простым select * from table Таблицы, напомню, с разным размером экстента. Наблюдаю очень медленное чтение (db2top показывает 14-15 тыс. записей в секунду) Не помогает ни вкл/выкл FILE SYSTEM CACHING, ни установка/снятие DB2_PARALLEL_IO, ни изменение PREFETCHSIZE, ни компрессия таблицы : на всех тестовых таблицах (extentsize=2,8,32) одна и та же скорость линейного чтения в ~15 000 записей в сек. При этом запрос с группировкой в зависимости от extentsize в db2top'е показывает от 100 000 до 500 000 rows read в сек. Где еще можно копнуть, чтоб скорость чтения таблицы простым селектом увеличить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2010, 14:31 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2test В моей системе для диска c базой queue_depth=10 и число запущенных aioserver'ов =120 (судя по ps -elfk | grep aio). В редбуке пишут, что для FC-дисков нужно число шпинделей умножать на 16, т.е. в моем случае 16*16=256=MAX. Думается, что это будет многовато :) aioservers много не бывает, во всяком случае пишут, что неиспользуемые aioserverы ресурсов не кушают. Если их количества недостаточно, то максимально параллельных запросов будет в Вашем случае 120, а не 256. Не знаю, поможет ли в Вашем случае, но я пользуюсь nmon для мониторинга (в режиме регистрации, а не в интерактиве), он показывает дисковые нагрузки и т.п. Возможно есть смысл посмотреть. Буферпулы - это другая история, но они тоже влияют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 12:21 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Vladimir Kiselev aioservers много не бывает, во всяком случае пишут, что неиспользуемые aioserverы ресурсов не кушают. Если их количества недостаточно, то максимально параллельных запросов будет в Вашем случае 120, а не 256. Не знаю, поможет ли в Вашем случае, но я пользуюсь nmon для мониторинга (в режиме регистрации, а не в интерактиве), он показывает дисковые нагрузки и т.п. Возможно есть смысл посмотреть. Буферпулы - это другая история, но они тоже влияют. iostat -AQ во время выполнения запроса показывает что AIO "курит бамбук". nmon+db2top тоже использую (больше правда в интерактиве). Буфферпул 4 Gb. Тут скорее интересно то, что FILE SYSTEM CACHING показывает лучший результат чем при отключенном кэшировании. Меня сейчас больше беспокоит последняя проблема. Непонятно почему запрос с группировкой лупит по 300000/сек. строк по таблице, а простой select * from table в 20 раз меньше. Кто-нибудь может привести свои цифры по rows read/s из db2top для простого select * from table на достаточно большой таблице (> 10 млн) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 13:49 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2testНепонятно почему запрос с группировкой лупит по 300000/сек. строк по таблице, а простой select * from table в 20 раз меньше. Думаю, что узкое место здесь - вывод результатов запроса на экран (или куда они там выводятся). Я почти уверен, что производительность "export to /dev/null of ixf select * from table" будет работать существенно быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 16:03 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2testМеня сейчас больше беспокоит последняя проблема. Непонятно почему запрос с группировкой лупит по 300000/сек. строк по таблице, а простой select * from table в 20 раз меньше. Кто-нибудь может привести свои цифры по rows read/s из db2top для простого select * from table на достаточно большой таблице (> 10 млн) ?У db2batch есть rows_fetch и rows_out параметры. Советую rows_out=0 и сравнить время выполнения запроса для rows_fetch=0 и rows_fetch=-1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 16:41 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
mustaccio, Все тесты провожу через db2batch c параметром SET ROWS_OUT 0. Т.е, если я правильно понимаю, то все записи фетчит сам db2batch, но на диск не вываливает. Прогнал db2 "export to /dev/null of ixf select * from db2inst1.testtab32" testtab32 - 21 млн. записей, pagesize=16k, extentsize=32, prefetchsize=auto Во время прогона наблюдал за чтением в db2top Снял скриншоты, как сюда картинки вставлять на разобрался сорри, архив с жипегами приаттачил. Сразу после запуска наблюдаю картину (db2top1.jpg) Идет зачем-то запись в какую-то временную таблицу со скоростью ~1 100 000 rows/s Потом через момент времен равный как раз фетчу 21-мл записей с такой скоростью начинается чтение записей из этой же временной таблицы со скоростью ~800000 rows/s. (db2top2.jpg) Потом опять как раз примерно через 25 секунд начинается третья фаза собственно с чтением почему-то из обеих таблиц (временной и рабочей testtab32) со скоростью ..... ~10 000 rows/s (db2top3.jpg). И так до самого конца еле-еле. "Все чудесатее и чудесатее" (c) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 17:12 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
а не может быть проблемы с мультиблочным чтением (scattered read) ? на сколько я знаю через кеш файловой системы мультиблочно читать не возможно принципиально т.к. это фича железяки. значит при FILESYSTEM_CACHING мультиблочно не мог бы читать, а с NO_FILESYSTEM_CACHING у вас явно разрыв не тот который должено было бы дать мультиблочное чтение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 17:57 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
А вы не пробовали планы запросов смотреть? Так, на всякий случай спрашиваю, наверное, пробовали... set current explain mode yes select * from db2inst1.testtab32 set current explain mode no db2exfmt -d <database name> -1 | more ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 18:33 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2testVladimir Kiselev aioservers много не бывает, во всяком случае пишут, что неиспользуемые aioserverы ресурсов не кушают. Если их количества недостаточно, то максимально параллельных запросов будет в Вашем случае 120, а не 256. Не знаю, поможет ли в Вашем случае, но я пользуюсь nmon для мониторинга (в режиме регистрации, а не в интерактиве), он показывает дисковые нагрузки и т.п. Возможно есть смысл посмотреть. Буферпулы - это другая история, но они тоже влияют. iostat -AQ во время выполнения запроса показывает что AIO "курит бамбук". nmon+db2top тоже использую (больше правда в интерактиве). Буфферпул 4 Gb. Тут скорее интересно то, что FILE SYSTEM CACHING показывает лучший результат чем при отключенном кэшировании. Меня сейчас больше беспокоит последняя проблема. Непонятно почему запрос с группировкой лупит по 300000/сек. строк по таблице, а простой select * from table в 20 раз меньше. Кто-нибудь может привести свои цифры по rows read/s из db2top для простого select * from table на достаточно большой таблице (> 10 млн) ? Нужно смотреть план выполнение запросов и сравнить их. Да и вот еще, Вы смотрели как ведет себя страничный файл (swap file) ? С уважением, Вадим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 20:19 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2testmustaccio, Все тесты провожу через db2batch c параметром SET ROWS_OUT 0. Т.е, если я правильно понимаю, то все записи фетчит сам db2batch, но на диск не вываливает. Прогнал db2 "export to /dev/null of ixf select * from db2inst1.testtab32" testtab32 - 21 млн. записей, pagesize=16k, extentsize=32, prefetchsize=auto Во время прогона наблюдал за чтением в db2top Снял скриншоты, как сюда картинки вставлять на разобрался сорри, архив с жипегами приаттачил. Сразу после запуска наблюдаю картину (db2top1.jpg) Идет зачем-то запись в какую-то временную таблицу со скоростью ~1 100 000 rows/s Потом через момент времен равный как раз фетчу 21-мл записей с такой скоростью начинается чтение записей из этой же временной таблицы со скоростью ~800000 rows/s. (db2top2.jpg) Потом опять как раз примерно через 25 секунд начинается третья фаза собственно с чтением почему-то из обеих таблиц (временной и рабочей testtab32) со скоростью ..... ~10 000 rows/s (db2top3.jpg). И так до самого конца еле-еле. "Все чудесатее и чудесатее" (c) Кодовые страницы базы и OS - такие же (совпадаю) ? Как на счет сортировок ? Как ведет себя страничный файл OS ? С уважением, Вадим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 20:29 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein[У db2batch есть rows_fetch и rows_out параметры. Советую rows_out=0 и сравнить время выполнения запроса для rows_fetch=0 и rows_fetch=-1. Спасибо. Да, я с самого начала запускал с --#SET ROWS_OUT 0 Теперь добавил ROWS_FETCH 0, получил : --#SET ROWS_FETCH 0 ROWS_OUT 0 Код: plaintext 1. 2. 3. --#SET ROWS_FETCH -1 ROWS_OUT 0 Код: plaintext 1. 2. 3. Только вот чем поможет время без фетча.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 22:46 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Yo.!а не может быть проблемы с мультиблочным чтением (scattered read) ? "мультиблочное чтение" это в смысле параллельное чтение экстентов несколькими префетчерами c одного контейнера ? Ну как бы это и было целю изначального тестирования. Пока не понятно то ли это проблема c DB2, то ли это ..."it depend's (c) :) Yo.! на сколько я знаю через кеш файловой системы мультиблочно читать не возможно принципиально т.к. это фича железяки. значит при FILESYSTEM_CACHING мультиблочно не мог бы читать Тогда это объясняет ухудшение результата в разы при выставлении DB2_PARALLEL_IO и при FILE SYSTEM CACHING (например для EXTENTSIZE=32 это 44 сек. vs 215 сек.). Yo.! а с NO_FILESYSTEM_CACHING у вас явно разрыв не тот который должено было бы дать мультиблочное чтение. Ну вот оно и непонятно, при включении DB2_PARALLEL_IO=*:8 и при NO_FILESYSTEM_CACHING результат все равно хуже чем при кэшировании и без DB2_PARALLEL_IO (при EXTENTSIZE=32 52 сек. vs 44 сек). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2010, 08:51 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2testТолько вот чем поможет время без фетча....Это проверка типа "куда время уходит". Т.е. fetch такого огромного кол-ва записей даже не через сеть - дело весьма затратное. Теперь по поводу:db2testСразу после запуска наблюдаю картину (db2top1.jpg) Идет зачем-то запись в какую-то временную таблицу со скоростью ~1 100 000 rows/s Потом через момент времен равный как раз фетчу 21-мл записей с такой скоростью начинается чтение записей из этой же временной таблицы со скоростью ~800000 rows/s. (db2top2.jpg) Потом опять как раз примерно через 25 секунд начинается третья фаза собственно с чтением почему-то из обеих таблиц (временной и рабочей testtab32) со скоростью ..... ~10 000 rows/s (db2top3.jpg). И так до самого конца еле-еле.Для любого селекта оно должно построить курсор на сервере. Не вдаваясь в детели, курсор - таблица указателей на строки данных. Для такого большого курсора организуется временная таблица, куда оно сначало и быстро пишет. После этого надо параллельно со сканированием курсора обращаться к строкам и передавать эти строки клиенту. Абсолютно некорректно сравнивать скорости работы count(*) и *, так как в последнем случае делается гораздо больше работы, ведь в случае count(*) не надо строить огромный курсор и передавать ещё более огромный результат клиенту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2010, 09:54 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Yo.!а не может быть проблемы с мультиблочным чтением (scattered read) ? на сколько я знаю через кеш файловой системы мультиблочно читать не возможно принципиально т.к. это фича железяки. значит при FILESYSTEM_CACHING мультиблочно не мог бы читать, а с NO_FILESYSTEM_CACHING у вас явно разрыв не тот который должено было бы дать мультиблочное чтение.Не можете привести ссылку, где вы это прочитали? scattered read - это readv , которому всё равно, с каким флагом открыт файл. Да и Код: plaintext 1. Ну, вроде на win ещё оно может использоваться только если файл открыт c O_DIRECT (или как он там у них называется - прямое чтение в обход файлового кэша), но при чём здесь "фича железяки"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2010, 10:08 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2test "мультиблочное чтение" это в смысле параллельное чтение экстентов несколькими префетчерами c одного контейнера ? Ну как бы это и было целю изначального тестирования. Пока не понятно то ли это проблема c DB2, то ли это ..."it depend's (c) :) мне кажется префеч один, db2 это Vector I/O похоже называет: Read requests typically require "x" bytes to be placed in a single I/O buffer. This I/O buffer is a contiguous area of memory and, if very large, may have to be broken down into smaller chunks and copied into other areas of memory to be used by an application, such as DB2. For example, DB2 may choose to pre-fetch multiple extents of data into the bufferpool in response to a query. An extent by default is 32 (4 KB) pages. From here, the extent is broken up into 4 KB chunks (the individual pages) and copied to the bufferpool. Vector I/O allows the allocation of smaller I/O buffers; in this case, of size 4 KB. A single vector read fills these buffers, which directly relate to pages in the bufferpool, eliminating the need to perform the copies. To enable Vector I/O on Linux, you must set the DB2 registry variable DB2_SCATTERED_IO (shown in the command below) and restart DB2. http://www.ibm.com/developerworks/data/library/techarticle/dm-0509wright/ [quot Mark Barinstein]Не можете привести ссылку, где вы это прочитали? scattered read - это readv , которому всё равно, с каким флагом открыт файл. под виндой http://msdn.microsoft.com/en-us/library/aa365469%28VS.85%29.aspx The file handle must be created with the GENERIC_READ right, and the FILE_FLAG_OVERLAPPED and FILE_FLAG_NO_BUFFERING flags. чтение через кеш файловой системы совершенно не стыкуется с моим представлением процесса. я себе это представляю как задание контроллеру считать одной io операцией допустим 128 блоков, коньтроллер считывает и через DMA кладет все 128 в bufferpool. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2010, 12:35 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
предыдущее сообщение чего-то покарежилось, дублирую: db2test "мультиблочное чтение" это в смысле параллельное чтение экстентов несколькими префетчерами c одного контейнера ? Ну как бы это и было целю изначального тестирования. Пока не понятно то ли это проблема c DB2, то ли это ..."it depend's (c) :) мне кажется префеч один, db2 это Vector I/O похоже называет: Read requests typically require "x" bytes to be placed in a single I/O buffer. This I/O buffer is a contiguous area of memory and, if very large, may have to be broken down into smaller chunks and copied into other areas of memory to be used by an application, such as DB2. For example, DB2 may choose to pre-fetch multiple extents of data into the bufferpool in response to a query. An extent by default is 32 (4 KB) pages. From here, the extent is broken up into 4 KB chunks (the individual pages) and copied to the bufferpool. Vector I/O allows the allocation of smaller I/O buffers; in this case, of size 4 KB. A single vector read fills these buffers, which directly relate to pages in the bufferpool, eliminating the need to perform the copies. To enable Vector I/O on Linux, you must set the DB2 registry variable DB2_SCATTERED_IO (shown in the command below) and restart DB2. http://www.ibm.com/developerworks/data/library/techarticle/dm-0509wright/ Mark BarinsteinНе можете привести ссылку, где вы это прочитали? scattered read - это readv , которому всё равно, с каким флагом открыт файл. под виндой http://msdn.microsoft.com/en-us/library/aa365469%28VS.85%29.aspx The file handle must be created with the GENERIC_READ right, and the FILE_FLAG_OVERLAPPED and FILE_FLAG_NO_BUFFERING flags. чтение через кеш файловой системы совершенно не стыкуется с моим представлением процесса. я себе это представляю как задание контроллеру считать одной io операцией допустим 128 блоков, коньтроллер считывает и через DMA кладет все 128 в bufferpool. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2010, 12:37 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinАбсолютно некорректно сравнивать скорости работы count(*) и *, так как в последнем случае делается гораздо больше работы, ведь в случае count(*) не надо строить огромный курсор и передавать ещё более огромный результат клиенту. Марк, большое спасибо за explain :) А каким образом можно увеличить скорость фетча ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2010, 13:20 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2testА каким образом можно увеличить скорость фетча ? select * from ... FOR READ ONLY и тут читать: Specifying row blocking to reduce overhead Т.е. в зависимости от типа соединения делать побольше aslheapsz или rqrioblk. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2010, 18:43 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Развернул базу с тестовой таблицей на 9.7.2 под AIX (на той же файловой системе поверх RAID10 16HDD) и под SLES10 SP2 на VMWare (десктоп, 1 SATA HDD) На SLES10 тестовый запрос с группировкой (без фетча большого курсора) с включенным кэшированием файловой системы (Ext3) выполняется на 50% медленнее чем с NO FILE SYSTEM CACHING (ну т.е как и задумано) На AIX все также в 2,5-3 раза быстрее при FILE SYSTEM CACHING Оба теста без DB2_PARALLEL_IO. Как так выходит, что с кэшем FS на AIX'е получается быстрее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2010, 16:48 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein select * from ... FOR READ ONLY и тут читать: Specifying row blocking to reduce overhead Т.е. в зависимости от типа соединения делать побольше aslheapsz или rqrioblk. Спасибо. Правда никого эффекта не произошло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2010, 16:51 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
db2testРазвернул базу с тестовой таблицей на 9.7.2 под AIX (на той же файловой системе поверх RAID10 16HDD) и под SLES10 SP2 на VMWare (десктоп, 1 SATA HDD) На SLES10 тестовый запрос с группировкой (без фетча большого курсора) с включенным кэшированием файловой системы (Ext3) выполняется на 50% медленнее чем с NO FILE SYSTEM CACHING (ну т.е как и задумано) На AIX все также в 2,5-3 раза быстрее при FILE SYSTEM CACHING Оба теста без DB2_PARALLEL_IO. Как так выходит, что с кэшем FS на AIX'е получается быстрее ?Ну, можно ещё с block based bufferpool поиграться. Проведите тесты с размером блока в extentsize и разными процентами блочности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 14:19 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinНу, можно ещё с block based bufferpool поиграться. Проведите тесты с размером блока в extentsize и разными процентами блочности. Спасибо, помогло. Намотаю на ус :) При BLOCKSIZE=EXTENTSIZE и размере block area в 10% от размера буферпула результаты сравнялись. При этом, чем меньше BLOCKSIZE относительно EXTENTSIZE, тем хуже время выполнения запроса. Компрессия таблицы также сравнивает результат с FILESYSTEM CACHING и блочным БП. Т.е кролики это не только ценный мех компрессия не только уменьшает объем БД (у меня таблицы жмутся в 4-5 раз), но и значительно улучшает перфоманс запросов с sequential I/O. Но в любом случае получить результат лучше, чем у FILESYSTEM CACHING, не получилось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2010, 14:05 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, что вмешиваюсь. Как я понимаю Вы используете AIX в качестве операционной системы, это так? На уровне ОС настраивался ли асинхронный ввод-вывод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2010, 17:03 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
Провел тест еще раз, но уже на другом хосте (тоже AIX 5.3. TL10 SP1 + DB2 9.1.8) Файловая система базы на LUN'е c того же RAID10 (16 HDD) AUTOMATIC STORAGE таблспейс, EXTENTSIZE=32, PAGESIZE=16K, PREFETCHSIZE=AUTO Т.е. все тоже самое. Тест с NO FILE SYSTEM CACHING прошел быстрее FILE SYSTEM CACHING на 10% Повторил раз 20-ть. С таким же результатом. На исходном хосте опять повторил тест. Все так же в 2,5-3 раза хуже с NO FILE SYSTEM CACHING (без блочного буферпула) Проверил наcтройки vmo, ioo, параметры файловых систем на обоих хостах, настройки кэширования лунов на стородже - все одинаковое. "Где собака зарыта" - непонятно :( Куда дальше копать - тоже. Еще любопытно, что запрос по таблице созданной в обычном DMS-пространстве с теми же параметрами работает на 50% медленнее, чем в случае с automatic storage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 14:13 |
|
||
|
RAID vs. DB2_PARALLEL_IO
|
|||
|---|---|---|---|
|
#18+
CamperИзвиняюсь, что вмешиваюсь. Как я понимаю Вы используете AIX в качестве операционной системы, это так? На уровне ОС настраивался ли асинхронный ввод-вывод? Специально c AIO ничего не делал. В системе 120 aioservers, iostat очередей к AIO не показывает. А что конкретно там настраивать кроме числа aioserver'ов ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 14:18 |
|
||
|
|

start [/forum/topic.php?all=1&fid=43&tid=1602477]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
| others: | 270ms |
| total: | 442ms |

| 0 / 0 |
