DS4300, быстродействие.


Главная Форумы Storage SAN, Disk & Tape DS4300, быстродействие.

В этой теме 20 ответов, 5 участников, последнее обновление  Victor Sedyakin 4 года/лет, 2 мес. назад.

  • Автор
    Сообщения
  • #1626

    dmi
    Участник

    Приветствую.

    Я DBA и моя СУБД работает на p550, в качестве дискового хранилища используется DS4300.

    По тому,как мне рассказали администраторы:
    Есть два сервера p550, одна DS4300. У DS4300 два контроллера — на каждый контроллер подсоединено по одному серверу. Так сделал интегратор. Причем, как я понял — не активирована какая-то опция (я не железячник, не могу сказать) которая позволяет делать такую конфигурацию «безболезненной».

    На DS4300 созданы несколько RAID, которые монтируются либо одним, либо другим сервером.

    Возьмем, например, один RAID10, набранный из 10 scsi-дисков.
    На нем лежит бОльшая часть моей базы (~30Gb). При его создании все галки storage manager оставлены по умолчанию, Segment Size — 256K. При «последовательных» операциях (например, создание или разворачивание бэкапа) по nmon/topas я вижу трансфер ~50-100K и 80-100% busy. В нормальной же работе трансфер с дисков очень небольшой, есть wait’ы — монитор СУБД показывает wait for resources — очень большое значение за секунду. И nmon/iostat/topas показывают большой wait. База оптимизирована (проведена дефрагментация, блок равен странице JFS2, запущена с максимально возможными параметрами).

    Если на тот же самый RAID10, например, начать разворачивать бекап — то до окончания или прерывания операции я не могу зайти на этот примонтированный том — по ftp не пускает, ls -l ничего не выдает, Kernel Time в системе имеет очень высокие значения — не такие, как при обычной работе.

    Поскольку я только DBA, я не могу знать — оптимально ли настроена DS4300 и сервера. Например, на production-системах на Linux/Intel я не видел таких проблем.
    Или это нормальная ситуация? Если нет — то в каком направлении копать?

    Спасибо.

  • #1628

    andrewk
    Участник

    Начнем с простого — размер блока на фс должен быть равен или кратен размеру блока на сторедже, а размер блока в БД должен быть равен или кратен размеру блока в фс. Второе вы выполнили, а первое?
    чему равны значения maxclient, lgpg_regions, lgpg_size, lru_file_repage, maxperm, maxpin, minperm, v_pinshm, lsattr -El aio0, mount | grep . Какая версия Oracle? И oslevel -s.

  • #1629

    andrewk
    Участник
  • #1632

    dmi
    Участник

    Спасибо за вводную. Занялся параметрами.
    oslevel -s для первого и второго сервера : 5300-05-00
    СУБД у меня несколько другая — Progress

  • #1635

    dmi
    Участник

    root-/: vmstat -v
    1982464 memory pages
    1905548 lruable pages
    164594 free pages
    2 memory pools
    255066 pinned pages
    20.0 maxpin percentage
    5.0 minperm percentage
    10.0 maxperm percentage
    10.1 numperm percentage
    193057 file pages
    0.0 compressed percentage
    0 compressed pages
    9.8 numclient percentage
    10.0 maxclient percentage
    188595 client pages
    0 remote pageouts scheduled
    218781 pending disk I/Os blocked with no pbuf
    0 paging space I/Os blocked with no psbuf
    2740 filesystem I/Os blocked with no fsbuf
    0 client filesystem I/Os blocked with no fsbuf
    7119902 external pager filesystem I/Os blocked with no fsbuf
    0 Virtualized Partition Memory Page Faults
    0.00 Time resolving virtualized partition memory page faults

    root-/: lsattr -El aio0
    autoconfig defined STATE to be configured at system restart True
    fastpath enable State of fast path True
    kprocprio 39 Server PRIORITY True
    maxreqs 4096 Maximum number of REQUESTS True
    maxservers 10 MAXIMUM number of servers per cpu True
    minservers 1 MINIMUM number of servers True

    root-/: mount

    node mounted mounted over vfs date options

    ——— ————— ————— —— ———— —————

    /dev/hd4 / jfs Nov 28 21:02 rw,log=/dev/hd8
    /dev/hd2 /usr jfs Nov 28 21:02 rw,log=/dev/hd8
    /dev/hd9var /var jfs Nov 28 21:02 rw,log=/dev/hd8
    /dev/hd3 /tmp jfs Nov 28 21:02 rw,log=/dev/hd8
    /dev/fwdump /var/adm/ras/platform jfs Nov 28 21:03 rw,log=/dev/hd8
    /dev/hd1 /home jfs Nov 28 21:03 rw,log=/dev/hd8
    /proc /proc procfs Nov 28 21:03 rw
    /dev/hd10opt /opt jfs Nov 28 21:03 rw,log=/dev/hd8
    /dev/lvarch /arch jfs Nov 28 21:03 rw,log=/dev/hd8
    /dev/fslv00 /progs-old jfs2 Nov 28 21:03 rw,log=/dev/loglv00
    /dev/fstmpw /fstmp/w jfs2 Nov 28 21:03 rw,log=/dev/loglv00
    /dev/fslv01 /progs jfs2 Nov 28 21:03 rw,log=/dev/loglv03
    /dev/fslv02 /renins jfs2 Nov 28 21:03 rw,log=/dev/loglv02
    /dev/fslv03 /testvg jfs2 Dec 01 17:03 rw,log=/dev/loglv04

    В aix.txt вывод команды vmo -L [file name=aix.txt size=11461]http://www.aixportal.ru/joom/media/kunena/attachments/legacy/files/aix.txt[/file]

    Attachments:
  • #1637

    dmi
    Участник

    vmo -a в аттаче [file name=vmo_a.txt size=1941]http://www.aixportal.ru/joom/media/kunena/attachments/legacy/files/vmo_a.txt[/file]

    Attachments:
  • #1638

    andrewk
    Участник

    сорри, с прогрессом я погорячился. советы для Oracle могут не подойти к прогрессу.

  • #1639

    andrewk
    Участник

    btw то, что видно из vmstat -v:
    218781 pending disk I/Os blocked with no pbuf
    2740 filesystem I/Os blocked with no fsbuf
    7119902 external pager filesystem I/Os blocked with no fsbuf

    попробуйте поиграть с
    ioo -p -o numfsbufs=1568
    ioo -p -o pv_min_pbuf=2048
    посмотрите, какие значения этих параметров у вас сейчас стоят и попробуйте их потьюнить

  • #1641

    Дмитрий
    Участник

    Вот andrewk разошёлся 🙂 Уже и тем для ответов не остаётся.

    Добавлю: тюнить в сторону увеличения, потихоньку.
    Как я помню, fsbuf срабатывают после перемонтирования файловой системы. (man ioo).

    Мне ещё не нравятся maxperm (это для jfs) и maxclient (jfs2) — относительно того, что используется. 10% — это совсем мало. Похоже, здесь тоже упираемся. И default значение, как я помню, 80%. Вам их зачем-то крутили?
    Я бы поковырял в этом направлении тоже.

  • #1646

    dmi
    Участник

    Dmitry и Andrewk — большое спасибо за ответы.
    Я посмотрю данные параметры.
    Что касается 80%.
    По умолчанию # vmstat -v
    20.0 minperm percentage
    80.0 maxperm percentage ?

    У меня на первом продакшене (отчеты) запущено несколько баз. Сам движок СУБД — 32bit (скоро будет 64bit). Процессы обслуживающие и
    работающие с базой работают через shared memory. Ее для 32bit-приложений можно приаттачить не более 11 сегментов. (Ну и для Progress — использует по 128Mb). В данной памяти находится в основном buffer pool (кеш) для данных.
    Если я запускаю две базы на одной машине (с макс 1,4Gb на одну базу и 400-700k на девелоперские нужды),
    то у меня уже со второй базы (я смотрю по nmon) начинает расти swap. При помощи коллег посмотрели, что туда попадает память моих процессов, например, первой базы.
    В Linux, например, я могу сказать моей памяти сделать «pin shared memory» и не давать вытеснять ее в свап. Здесь это не работает, поэтому может не совсем грамотно воспользовались советом:
    When running an AIX system and using 50% or more of the RAM on that system for Progress shared memory — i.e: one or more databases with large databaseblocks (-B) settings; benefits may be gained from the following setting for what in previous AIX versions was known as «vmtune».

    Vmtune has been replaced by ioo and vmo in AIX 5.2+ which is ‘nicer’ because it’s managed by smitty instead of having to run vmtune at every boot. The previously suggested starting values still apply, only the methodology of applying these has changed in the later versions of IBM-AIX.

    maxclient%=10
    maxperm%=10
    minperm%=5

    The objective is to minimize the paging of memory onto the disks. Each environment will need to be individually tuned in relation to it’s requirements.

    If running AIX 5.3, it is suggested to set strict_maxclient OFF so that it acts like AIX 5.2 where memory is released from cache to processes gradually as opposed to «all at once».

  • #1647

    andrewk
    Участник

    dmi,
    чтобы память не уходила в свап ее надо пиннить, но для этого приложение должно уметь пользоваться large pages (16-мбайтные страницы памяти).
    вкратце, надо посчитать необходимый размер памяти, разделить его на 16 мбайт и округлить в большую сторону. затем:
    vmo -p -o v_pinshm=1
    vmo -p -o lgpg_size=16777216 -o lgpg_regions=
    bosboot -a
    объем запиненной памяти не должен быть более 80% (на самом деле не более значения maxpin%, но его значение по умолчанию — 80% — подходит для большинства нужд)

  • #1666

    dmi
    Участник

    andrewk, спасибо.

    Но я как-то не обратил внимание на самое первое, и как мне кажется очень важное — «Начнем с простого — размер блока на фс должен быть равен или кратен размеру блока на сторедже».
    Как это узнать?

  • #1668

    andrewk
    Участник

    lsfs -q
    размер блока на DS’ке — сорри, не отвечу

  • #1672

    Дмитрий
    Участник

    andrewk, как-раз если посмотреть на vmstat, то видно, что pinned mem ~= 10% mem ~= maxperm
    🙂

  • #1675

    dmi
    Участник

    andrewk писал(а):

    lsfs -q
    размер блока на DS’ке — сорри, не отвечу

    Ну да, у нас 4K — я видел, когда создавали.

    /dev/fslv02 — /dbases jfs2 983564288 rw yes no
    (lv size: 983564288, fs size: 983564288, block size: 4096, sparse files: yes, inline log: no, inline log size: 0, EAformat: v1, Quota: no, DMAPI: no, VIX: no)

    Все-таки интересно про DS4300 узнать, может там собака порылась?

  • #1676

    andrewk
    Участник

    Dmitry,
    угу. в следующий раз буду внимательнее читать 🙂

  • #1680

    Golubev Dmitry
    Участник

    Только пролистал, если что, строго не судите.
    Как мне показалось нужно узнать/изменить размер блока на DS4ХХХ.
    Нет ничего проще:
    Устанавливаете клиента DS4000 Storage Manager (DSM) на ПК, запускаете его, указываете IP DS’ки в меню добавить, после этого кликаете мышкой на найденной DS’ке и вперед, посмотрель можно все, изменить если только пароль, не установлен. Если IP не известен, то ставьте DSM на машину с FC адаптером, если после этого DS’ка найдется меняйте интегратора.
    И так к DSM вы выбрали управление нужной DS’кой.
    Для того чтобы изменить размер сегмента он у вас (по вашему же утверждению) навен 256К выполните следующие действия:
    highlight the drive, right-click and select
    Change → Segment Size. The available segment sizes are:
    8 KB, 16 KB, 32 KB, 64 KB, 128 KB, 256 KB, 512 КБ
    Переводить лень было сорри
    Для сервера с базой 256 это ЭПРвчпфы (грязно выругался), последовательно измените до вероятнее всего 8К, посмотрите какой блок спрашивает ОС.
    Далее можно двигаться в любом направлении и в сторону оптимизации работы DS и в сторону оптимизации работы ОС и приложения.

    Для некоторых поясню понятие размера блока и размера сегмента в DSM равнозначны.

    Что-то я не очень понял как все это хозяйство подключено, ну да и ладно, это дело интегратора, хотя как-то странно все прозвучало, если интересно будет можно потом поговорить как попробовать повысить производительность учитывая инфраструктуру SAN. В DS достаточно чего подкрутить можно….

    Да, чуть не забыл, как посмотреть текущие настройки:
    Выбираете меню StorageSubsystem->Profile->и далее смотрите по закладкам…
    Да забыл тут все любители командной стоки можно предложить вот такой вариант:
    SMcli 9.11.231.91 9.11.231.92 -c «Show Logical Drive;»

  • #1682

    dmi
    Участник

    gdimka писал(а):

    Устанавливаете клиента DS4000 Storage Manager (DSM) на ПК,

    Спасибо, все это есть (DSM правда не у меня стоит).
    Segment Size — это размер блока на DS? Тогда мне надо ставить Segment Size = 4K, так как max размер блока jfs2 можно выбрать только 4K. Ну и базу я 4K сделаю тоже.
    А вот интересно — когда я говорю сделать stripe из 7 дисков, например — stripe size можно где-нибудь посмотреть?

    Change → Segment Size. The available segment sizes are:
    8 KB, 16 KB, 32 KB, 64 KB, 128 KB, 256 KB, 512 КБ

    8K — это min значение?

    Для сервера с базой 256 это ЭПРвчпфы (грязно выругался), последовательно измените до вероятнее всего 8К, посмотрите какой блок спрашивает ОС.

    Блок jfs2 — 4k. 8 из smitty не получается сделать.

    Далее можно двигаться в любом направлении и в сторону оптимизации работы DS и в сторону оптимизации работы ОС и приложения.

    Ну с приложением все понятно — совершенства нет, но это поправимо. Все понятно так же и с движком СУБД. Мне не хватает знаний по AIX и DS4300 tunung.

    Как подключена DS4300 к двум серверам?
    Насколько понял я (узнаю завтра) на DS4300 два контроллера. Соответственно набор дисков можно отнести к FC контроллеру A или B.
    Ну вот так и работает. Слышал, краем уха, что не хватает какой-то опции.

    Спасибо

  • #1686

    Golubev Dmitry
    Участник

    >>А вот интересно — когда я говорю сделать stripe из 7 дисков, >>например — stripe size можно где-нибудь посмотреть?

    Вот хочется спросить, а что такое stripe size? Ладно долго мучить не буду….
    Stripe size = Segment Size (или Stripe Unit) * N, где N — это число дисков

    Для вашего примера, получиться следующее:
    256К * 7 = 1792К (Stripe size)

    8K — это действительно минимум, под рукой DS’ки нет чтобы проверить(раньше было 4К), более важен не размер блока в ОС, а какими блоками данных ОС работает с диском.
    Этот фактор уже будет зависеть от ОС и приложений, а также от их настроек.

    П.С.
    Нет предела совершенству…
    Если есть время и желание, то читайте
    http://www.redbooks.ibm.com/abstracts/sg247010.html?Open и
    http://www.redbooks.ibm.com/abstracts/sg246363.html?Open

  • #1689

    dmi
    Участник

    Спасибо. Все, про stripe size понял. 🙂

    Про «более важен не размер блока в ОС, а какими блоками данных ОС работает с диском»:

    Т.е я правильно понял, что при минимальном Segment Size = 8K мне надо сделать на своём страйпе jfs (не jfs2) файловую систему с 8K блоком и сделать базу с блоком 8K.
    Тогда, при этих условиях я буду уверен что storage сконфигурен правильно (я не говорю сейчас про расположение дисков в корзине и тюнинг кеша) ?

    А дальше уже — тюнинг настроек?

    За ссылки спасибо.

  • #18921

    Victor Sedyakin
    Участник

    Про Segment Size = 8K это вы погорячились, по-моему.
    В офф. гайдах к DS4/5K указано (правда, это касается оракла, не прогресса):

    For database applications, block sizes between 32 KB to 128 KB have shown to be
    more effective.

    Set the parameter db_file_multiblock_read_count appropriately. Normally you want to set the db_file_multiblock_read_count as shown:

    segment size = db_file_multiblock_read_count * DB_BLOCK_SIZE

    You also can set the db_file_multiblock_read_count so that the result of the previous calculation is smaller than or equal to the segment size. The segment size is an even multiple of this result. For example, if you have a segment size of 64 KB and a block size of 8 KB, you can set the db_file_multiblock_read_count to 4, which equals a value of 32 KB. The segment size, 64 KB, would be an even multiple of 32 KB.

    Upd: свежий пример — у заказчика segment size = 128 KB, db_file_multiblock_read_count = 16, db_block_size = 8192. Все в полном соответствии с рекомендацией вендора.

Для ответа в этой теме необходимо авторизоваться.