|
db2 i/o
|
|||
---|---|---|---|
#18+
Наконец ещё раз смог поиграть - с линухом на отдельной машинке. 10.5.7 Express-c, 6 раздельных SATA-дисков, Core2Duo, 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.
Код: 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.
Итак, 32K страница, 32 страницы в экстенте - итого 1M. Но в iostat на фуллскане по таблице в колонке avgrq-sz показывает 1024 (512-байтовых страниц, т.е. полмега). Присваивание в /sys/block/sdX/queue/max_sectors_kb значений 4096 не помогло. (У винды дела ещё хуже, но на линух я надеялся). Что ещё страннее, между insert'ом и commit'ом avgrq-sz=32, т.е. cleaner пишет по полстраницы. Такое поведение я вообще не понимаю. Там должны были быть непрерывные диапазоны грязных страниц большой длины, так что напрашивается оптимизировать и писать на диск большими кусками. Ну ладно, не оптимизировали. Но делить страницы-то зачем? Может, на AIX'е всё это не имеет значения, а до линуха руки не дошли? С количеством iocleaner'ов тоже не всё понятно. Кажется, что на каждый диск разумно выделить отдельный cleaner, т.е. для этой базы их должно быть четыре, но если параметр automatic, СУБД определяет почему-то по количеству процессоров. А iostat показывает ещё более сомнительную картину - нагрузка (%util) идёт по двум дискам по 50% (потом по другим по 50%), т.е. одномоментно работает только один cleaner (процессор при этом практически не нагружен). Вручную задал num_iocleaners=16, это привело к небольшой смене поведения - cleaner стал дольше работать с одним диском. От DB2_USE_ALTERNATE_PAGE_CLEANING=YES пользы не увидел. Четыре одновременных вставки в разные таблицы, похоже, задействовали два iocleaner'а. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 13:09 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
И fullscan-утилизация далека от 100%. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Можно подумать, что надо по ядру на диск. Или что Express-C придушена в этом месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 13:17 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Victor Metelitsa, Чтения: prefetchsize -> automatic For N=2,...,6 Do DB2_PARALLEL_IO=N num_ioservers=2+N db2stop/db2start Тест на холодную Что показывает, скажем, fio (или аналог) с direct чтениями блоками по 32K на дисках? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 22:51 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Я посмотрю во второй половине дня, но оно и так (без установки DB2_PARALLEL_IO) должно было работать, а в http://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.regvars.doc/doc/r0005658.html?lang=en ничего хорошего не обещают (For example, if a table space has two containers and each of the two containers have each a single disk dedicated to it, setting the registry variable might result in contention on those disks because the two prefetchers will be accessing each of the two disks at once.) а AUTOCONFIGURE поставил num_ioservers в 12 - вроде бы эта каша не была испорчена этим маслом. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 09:26 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Victor Metelitsaно оно и так (без установки DB2_PARALLEL_IO) должно было работать, а в http://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.regvars.doc/doc/r0005658.html?lang=en ничего хорошего не обещают (For example, if a table space has two containers and each of the two containers have each a single disk dedicated to it, setting the registry variable might result in contention on those disks because the two prefetchers will be accessing each of the two disks at once.)Если цель - поссмотреть на то, на что способны диски, то одним простым сканированием их навряд ли можно нагрузить полностью. Да, здесь будет посылаться избыточное количество запросов, но раз у вас такая цель, то попробуйте сравнить показания iostat. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 10:36 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Mark BarinsteinЧтения: ... For N=2,...,6 Do DB2_PARALLEL_IO=N num_ioservers=2+N Ошибся. Надо минимум: num_ioservers=2+N*4 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 11:06 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
И, наверное, DB2_PARALLEL_IO=*:N? Ещё несколько потенциальных мест для проверки: * уменьшить extents size вдвое, с 1М до 512К * старая десктопная материнская плата могла не справиться с нагрузкой одновременно четырёх дисков (но вряд ли) - погонять ораклячий Orion. * изменится ли что-нибудь при замене Express-C на EE * изменится ли что-нибудь при замене двухъядерного процессора на четырёхъядерный А fio - это https://github.com/axboe/fio ? Я незнаком с этой утилитой. Что она должна показать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 11:36 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Mark BarinsteinЕсли цель - поссмотреть на то, на что способны диски, то одним простым сканированием их навряд ли можно нагрузить полностью. Цель - посмотреть, как работает распараллеливание. Я понял прочитанное в документации так, что при N дисках, N контейнерах на каждом диске и prefetch size = N * extent size чтение будет работать одновременно со всех этих дисков. В таком случае должно быть если не 100%, то хотя бы ~90%. Иначе к чему вообще огород городить? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 11:46 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Victor MetelitsaА fio - это https://github.com/axboe/fio ? Я незнаком с этой утилитой. Что она должна показать?Она делает то же, что и все остальные подобные утилиты - нагружает дисковую подсистему тем типом нагрузки, который нужен. Victor MetelitsaЦель - посмотреть, как работает распараллеливание. Я понял прочитанное в документации так, что при N дисках, N контейнерах на каждом диске и prefetch size = N * extent size чтение будет работать одновременно со всех этих дисков. В таком случае должно быть если не 100%, то хотя бы ~90%. Иначе к чему вообще огород городить? Распараллеливание работает, и вы это видите с iostat. Другое дело, что одним сканированием вы не нагружаете полностью диски. По моему мнению это неудивительно. Видимо, db2 вынуждена заниматься еще и другими вещами, кроме чтения с диска при сканировании, поэтому не может одной сессией прогрузить полностью дисковую подсистему. Если цель - это сделать, то либо заставить сессию делать больше io за один вызов, либо создать N таблиц и запустить N сессий одновременно, где каждая сканирует свою таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 12:38 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
То, что несколькими сеансами можно прогрузить - это понятно. Но один сеанс тоже интересен. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 13:01 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Ещё бы научиться avgrq-sz побеждать... Быть может, там у DB2 внутри хитрые алгоритмы выбора. А может, банальная константа, которую никому не приходит в голову трогать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 13:04 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Victor Metelitsa, А при каких именно настройках эти последние цифры получены? Какое DB2_PARALLEL_IO? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 13:18 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
DB2_PARALLEL_IO=*:4 prefetchsize AUTOMATIC num_ioservers 20 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 13:48 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Victor MetelitsaЕщё бы научиться avgrq-sz побеждать... Быть может, там у DB2 внутри хитрые алгоритмы выбора. А может, банальная константа, которую никому не приходит в голову трогать. Попробуйте: Код: plaintext
Blocksize должен быть равен размеру экстента пространства. mybp - буферный пул для пространства с таблицей. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 14:08 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Ну и рестарт базы после этого, чтоб изменения в силу вступили. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 14:09 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2016, 15:31 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
А у меня iostat -x 10 на выделенном ZFS сервере выглядит примерно так (далее) во время бэкапа, когда бэкап не очень много шлет на бэкап сервер через NFS, т.е. как бы чего-то думает (или читает/пишет random) в этом время: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Как думаете, что можно улучшить и как, кроме добавления дисков в пул и наращивания L1ARC и L2ARC? Во время реорганизации w/s на SSD доходит примерно до 1500, а writes в db2top в это же время до 10K-50K ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2016, 13:18 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
Наверно надо сначала изучить что-то похожее на: https://www.psce.com/blog/2012/04/18/analyzing-io-performance/ ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2016, 13:49 |
|
db2 i/o
|
|||
---|---|---|---|
#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. 46. 47.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2016, 14:01 |
|
db2 i/o
|
|||
---|---|---|---|
#18+
При холодном L2ARC рандомное чтение с дисков, как мне кажется, в таком конфиге не может быть быстрее 3MB/sec :) Рассчитывается примерно так: 1 SAS HDD дает около 200 random IOPS Их четыре штуки ... Так что получается: 4HDD * 200 IOPs/HDD * 4KB/IOP = 3200 KB/sec при абсолютно рандомном чтении Понятно, что при последовательном намного быстрее, после прогрева L2ARC рандомные чтения работают быстрее в сотни раз. Но вот ведь какая проблема! У организации на данный момент нет $40 USD :) для апгрейда RAM DDR2 ECC на файлере с 16GB до 32 GB для наращивания таблицы заголовков L2ARC. Хотя в другой момент времени нашлось на несколько очень быстрых nvram SSD, но ведь все запчасти сразу предусмотреть очень трудно. Так что L2ARC ограничен 128GB, хотя мог бы быть в несколько раз больше и полностью вмещать в себя все базы и соответственно ускорить рандомные чтения в сотни раз, ну или пока хотя бы до пропускной способности Ethernet, но ведь второй Ethernet кабель кинуть недолго. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2016, 14:59 |
|
|
start [/forum/topic.php?fid=43&fpage=12&tid=1600542]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
5ms |
track hit: |
44ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 174ms |
0 / 0 |