Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 db2 i/o  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
Наконец ещё раз смог поиграть - с линухом на отдельной машинке.
10.5.7 Express-c, 6 раздельных SATA-дисков, Core2Duo, 8гиг ОЗУ.
+


create database TEST automatic storage yes
on /u03/db2,/u04/db2,/u05/db2,/u06/db2
USING CODESET 1251 TERRITORY RU COLLATE USING SYSTEM
PAGESIZE 32768
dft_extent_sz 32
catalog tablespace
managed by automatic storage
extentsize 32
prefetchsize 128
overhead 16
transferrate 0.4
autoresize yes
Initialsize 1 G
Increasesize 1 G
user tablespace
managed by automatic storage
extentsize 32
prefetchsize 128
overhead 16
transferrate 0.4
autoresize yes
iNitialsize 1 g
iNcreasesize 1 g
temporary tablespace
managed by automatic storage
extentsize 32
prefetchsize 32
overhead 16
transferrate 0.4
AUTOCONFIGURE USING
mem_percent 100
admin_priority performance
num_local_apps 10
num_remote_apps 20
APPLY DB AND DBM;
и закидывал данные таким скриптом
+


drop table T6
@
UPDATE COMMAND OPTIONS USING C OFF  
@
create table T6 (
  n1 bigint not null,
  padding varchar(1000) not null
) not logged initially
@
insert into T6
with 
  xxx(rn) as (
    values(1)
    union all
    select rn+1
    from xxx
    where rn+1 <= 10000000 -- *5
  )
select
  -- trunc((rn-1)/100) n1,
  ((rn-1)/100) n1,
  rpad('x',100) padding
from xxx
@
commit
@



Итак, 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'а.
9 май 16, 13:09    [19149535]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
И fullscan-утилизация далека от 100%.


Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 61.30 0.40 30.60 0.00 1015.76 0.91 14.40 14.41 13.25 6.43 39.70
sdd 0.00 0.00 73.70 0.20 36.85 0.00 1021.23 0.94 12.66 12.66 13.50 4.38 32.35
sde 0.00 0.00 59.00 0.20 29.43 0.00 1018.06 0.71 12.06 12.08 4.50 6.20 36.72
sdf 0.00 0.00 80.30 0.20 40.15 0.00 1021.46 1.45 18.01 17.99 24.50 6.93 55.77

Можно подумать, что надо по ядру на диск. Или что Express-C придушена в этом месте.
9 май 16, 13:17    [19149544]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4876
Victor Metelitsa,

Чтения:
prefetchsize -> automatic

For N=2,...,6 Do
DB2_PARALLEL_IO=N
num_ioservers=2+N
db2stop/db2start
Тест на холодную

Что показывает, скажем, fio (или аналог) с direct чтениями блоками по 32K на дисках?
9 май 16, 22:51    [19151072]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
Я посмотрю во второй половине дня,
но оно и так (без установки 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 май 16, 09:26    [19151497]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4876
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 май 16, 10:36    [19151757]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4876
Mark Barinstein
Чтения:
...
For N=2,...,6 Do
DB2_PARALLEL_IO=N
num_ioservers=2+N
Ошибся.
Надо минимум:
num_ioservers=2+N*4
10 май 16, 11:06    [19151952]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
И, наверное, DB2_PARALLEL_IO=*:N?

Ещё несколько потенциальных мест для проверки:
* уменьшить extents size вдвое, с 1М до 512К
* старая десктопная материнская плата могла не справиться с нагрузкой одновременно четырёх дисков (но вряд ли) - погонять ораклячий Orion.
* изменится ли что-нибудь при замене Express-C на EE
* изменится ли что-нибудь при замене двухъядерного процессора на четырёхъядерный

А fio - это https://github.com/axboe/fio ? Я незнаком с этой утилитой. Что она должна показать?
10 май 16, 11:36    [19152174]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
Mark Barinstein
Если цель - поссмотреть на то, на что способны диски, то одним простым сканированием их навряд ли можно нагрузить полностью.

Цель - посмотреть, как работает распараллеливание. Я понял прочитанное в документации так, что при N дисках, N контейнерах на каждом диске и prefetch size = N * extent size чтение будет работать одновременно со всех этих дисков. В таком случае должно быть если не 100%, то хотя бы ~90%. Иначе к чему вообще огород городить?
10 май 16, 11:46    [19152253]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4876
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 май 16, 12:38    [19152532]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549

05/10/2016 04:54:46 AM
avg-cpu: %user %nice %system %iowait %steal %idle
10.86 0.00 1.45 67.58 0.00 20.11

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.40 0.20 105.90 0.60 53.11 0.00 1021.42 3.17 29.70 29.59 48.33 8.64 92.04
sdd 0.00 0.00 106.80 0.20 53.35 0.00 1021.19 2.13 20.05 20.03 31.00 6.74 72.17
sde 0.00 0.00 107.20 0.20 53.55 0.00 1021.14 2.92 27.30 27.26 51.50 8.30 89.19
sdf 0.00 0.00 106.60 0.20 53.30 0.00 1022.09 3.36 31.44 31.41 46.50 8.52 90.98
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Спасибо. Да, с вашими настройками оно гораздо лучше выглядит. Нагрузка на cpu 10% и на диски 90% - это, должно быть, максимум. Интересно, почему с "моими" не так.

То, что несколькими сеансами можно прогрузить - это понятно. Но один сеанс тоже интересен.
10 май 16, 13:01    [19152697]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
Ещё бы научиться avgrq-sz побеждать... Быть может, там у DB2 внутри хитрые алгоритмы выбора. А может, банальная константа, которую никому не приходит в голову трогать.
10 май 16, 13:04    [19152724]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4876
Victor Metelitsa,

А при каких именно настройках эти последние цифры получены?
Какое DB2_PARALLEL_IO?
10 май 16, 13:18    [19152832]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
DB2_PARALLEL_IO=*:4
prefetchsize AUTOMATIC
num_ioservers 20
10 май 16, 13:48    [19153031]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4876
Victor Metelitsa
Ещё бы научиться avgrq-sz побеждать... Быть может, там у DB2 внутри хитрые алгоритмы выбора. А может, банальная константа, которую никому не приходит в голову трогать.

Попробуйте:
ALTER BUFFERPOOL mybp NUMBLOCKPAGES N BLOCKSIZE 32 
Рекомендации для N для хранилищ - 30% от размера буфера.
Blocksize должен быть равен размеру экстента пространства.
mybp - буферный пул для пространства с таблицей.
10 май 16, 14:08    [19153134]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4876
Ну и рестарт базы после этого, чтоб изменения в силу вступили.
10 май 16, 14:09    [19153140]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549

05/10/2016 07:26:03 AM
avg-cpu: %user %nice %system %iowait %steal %idle
9.74 0.00 0.85 75.84 0.00 13.56

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.30 0.00 2.90 0.00 0.02 12.31 0.01 2.07 0.00 2.07 0.83 0.24
sdd 59.70 0.00 59.70 0.00 59.70 0.00 2048.00 3.01 50.40 50.40 0.00 10.63 63.45
sde 49.20 0.00 49.10 0.00 49.01 0.00 2044.35 2.37 47.64 47.64 0.00 14.10 69.24
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdf 48.40 0.00 48.40 0.00 48.40 0.00 2048.00 2.93 60.48 60.48 0.00 15.03 72.74
sdc 55.30 0.00 57.30 0.20 57.21 0.00 2037.57 3.88 71.49 71.69 13.00 14.73 84.67
dm-0 0.00 0.00 0.00 2.80 0.00 0.02 11.04 0.01 2.32 0.00 2.32 0.86 0.24
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.30 0.00 0.00 16.00 0.00 0.00 0.00 0.00 0.00 0.00
Потрясающе, это помогло, а я даже и не верил.
10 май 16, 15:31    [19153671]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
dbtwoshnick
Member

Откуда:
Сообщений: 160
А у меня iostat -x 10 на выделенном ZFS сервере выглядит примерно так (далее) во время бэкапа, когда бэкап не очень много шлет на бэкап сервер через NFS, т.е. как бы чего-то думает (или читает/пишет random) в этом время:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           0.00     0.00   42.40   74.20   151.20   509.80    11.34     0.01    0.09    0.17    0.05   0.08   0.92
nvme1n1           0.00     0.00    3.10   84.60    16.65   889.25    20.66     0.01    0.11    0.39    0.10   0.10   0.92
sda               2.00     0.00   44.70   10.20   932.00   221.60    42.03     0.70   12.73   11.19   19.45   5.85  32.12
sdd               1.90     0.00   53.10   39.70   868.40   322.00    25.66     1.77   19.07   20.11   17.67   8.47  78.64
sdf               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sde               0.00     0.10    0.00    0.30     0.00     1.60    10.67     0.00    2.67    0.00    2.67   2.67   0.08
sdb               2.30     0.00   42.70   10.20   759.60   221.60    37.10     0.59   11.24   10.30   15.14   5.39  28.52
sdc               2.70     0.00   54.70   40.00   941.20   321.60    26.67     1.45   15.33   17.58   12.26   7.29  69.04


Как думаете, что можно улучшить и как, кроме добавления дисков в пул и наращивания L1ARC и L2ARC?

Во время реорганизации w/s на SSD доходит примерно до 1500, а writes в db2top в это же время до 10K-50K
24 сен 16, 13:18    [19703923]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
dbtwoshnick
Member

Откуда:
Сообщений: 160
Наверно надо сначала изучить что-то похожее на:
https://www.psce.com/blog/2012/04/18/analyzing-io-performance/
24 сен 16, 13:49    [19703954]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
dbtwoshnick
Member

Откуда:
Сообщений: 160
zpool status 
  pool: crucial
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        crucial     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sde7    ONLINE       0     0     0
            sdf7    ONLINE       0     0     0

errors: No known data errors

  pool: data
 state: ONLINE
  scan: scrub canceled on Sat Sep 17 17:05:46 2016
config:

        NAME           STATE     READ WRITE CKSUM
        data           ONLINE       0     0     0
          mirror-0     ONLINE       0     0     0
            sda        ONLINE       0     0     0
            sdb        ONLINE       0     0     0
          mirror-1     ONLINE       0     0     0
            sdc        ONLINE       0     0     0
            sdd        ONLINE       0     0     0
        logs
          mirror-2     ONLINE       0     0     0
            nvme0n1p2  ONLINE       0     0     0
            nvme1n1p2  ONLINE       0     0     0
        cache
          nvme0n1p3    ONLINE       0     0     0
          nvme1n1p3    ONLINE       0     0     0

errors: No known data errors

  pool: nvram
 state: ONLINE                                                                                                                                                                                                                              
  scan: none requested                                                                                                                                                                                                                      
config:                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                            
        NAME           STATE     READ WRITE CKSUM                                                                                                                                                                                           
        nvram          ONLINE       0     0     0                                                                                                                                                                                           
          mirror-0     ONLINE       0     0     0                                                                                                                                                                                           
            nvme0n1p5  ONLINE       0     0     0                                                                                                                                                                                           
            nvme1n1p5  ONLINE       0     0     0   
24 сен 16, 14:01    [19703963]     Ответить | Цитировать Сообщить модератору
 Re: db2 i/o  [new]
dbtwoshnick
Member

Откуда:
Сообщений: 160
При холодном 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 сен 16, 14:59    [19705772]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить