Oracle on AIX. I/O. Part I

Update 1. disk_asynch_io=true (значение по умолчанию) рекомендуется для любых вариантов установки Oracle on AIX


Update 2. AIX6 + 10GR2 все в порядке, детали в комментариях. Кажется проблема только с 11gR2 .


Если вы эксплуатируете  Oracle on AIX вы обязаны прочитать вот эту whitepaper. Замечательный документ.  Однако в нем есть несколько тонких моментов. Один из них - рекомендации по монтированию файловой системы для файлов данных. Стр 55 в частности сообщает:


Это абсолютно правильное сообщение.
Oracle Support также  согласен с вышеприведенной рекомендацией (MOS ID 960055.1)


Здесь нужно сделать маленькое отступление, чтобы понять, почему так много уделяется внимания этому вопросу. Без указание опции cio производительность СУБД Oracle во многих слуаях была неудовлетворительной. C опциями монтирования по умолчанию происходило двойное кэшировние данных, в кэше файловой системы и buffer cache Oracle. Дополнительно. такая конструкция  потребляет лишнее процессорное время.   Кстати, это же справедливо  и для  СУБД DB2 -).   Многие заказчики почему-то забывали   про это, и данная рекомендация всегда была одной из первых которая выдавалась в случае наличия проблем.

Итак - вывод очевиден, теперь filesystemio_options=setall и никаких больше cio?
Однако инженеры IBM из Montpelier, считают по другому, их строгая рекомендация использовать  filesystemio_options=async и строго cio. Один из заказчиков попросил аргументировать.  Пожалуйста !

Итого, рассматриваем конфигурации:
#1, filesystemio_options=setall, опция монтирования rw
#2, filesystemio_options=async, опция монтирования  cio

Использовалась Oracle Database 11.2.0.2, AIX 7. Для начала мы провели эксперимент используется ли кэш файловой системы. Оказалось, что в обоих случаях он не использовался. Т.е. кажется что рекомендация #1 имеет право на жизнь. Правда при более внимательном рассмотрении оказалось, что при использовании рекомендации #1 ...не используется Async I/O. Мониторинг проводился командой:

iostat -A 1 | awk '/avg/ {if(x!=1){print; getline; print; x=1}else{getline; print}}'
aio: avgc avfc maxgc maxfc maxreqs avg-cpu: % user % sys % idle % iowait physc % entc
      0.0  0.0     0     0      48             0.3   1.8   97.9      0.0   0.0    4.4
      0.0  0.0     0     0      48             0.2   1.8   97.9      0.0   0.0    4.5

Данная команда показывает кол-во асинхронных операций ввода-вывода.  Опять нужно сделать небольшое отступление, что в AIX  есть несколько вариантов Async I/O. Исторически в AIX существали async I/O сервера и async I/O шел черех них (AIX 5). Однако позже (AIX 6) сделали  kernel async I/O для сырых устройств и, главное файловой системы.  Так вот оказывается, если у вас идет async I/O для сырых устройств то не нулевые значения появляются в колонке avfc, а если kernel file system asycn I/O то в колонке avgc.  В обоих случаях, если async I/O - kernel, то async I/O сервера (процессы aioserver)  не поднимаются.  Мониторить кол-во aio серверов удобно в nmon,  там показывают пиковое кол-во активных (в идеальном случае должно быть близким к 0).

При помощи команды lsof удалось выяснить, как именно открывает Oracle файлы данных в варианте #1:

oracle  39846142 oracle   12u  VREG     R,W,CIO,DSYN,LG,0x800000000;CX   39,1 1069555712   33 /oradata/data (/dev/dsvolkssdlv)



grep -i "0x800" vmount.h
#define VFS_DIO         0x80000000      /* O_DIRECT mount               */


На мой взгляд это объясняет все происходящее: вариант #1 работает с direct I/O, что для AIX не слишком оптимально.  Это значит, что все описанное в IBM whitepaper и MOS верно, но не самый оптимальный вариант. Вариант #2 сохраняет оптимальный ввод-вывод, формально называемый file system fast patch async I/O.

Резюме: пожалуйста продолжайте использовать опции монтирования cio для размещения файлов данных Oracle на AIX. 

27 комментариев:

  1. Анонимный18/7/12 1:50 PM

    Дмитрий, актуально ли все вышеописанное для 10gR2 + AIX6? Я правильно понял, что в случае, если iostat -A показывает исключительно нулевые значения в avgc/avfc (ну и ps -ef | grep aio ничего не выводит), то у меня не используется async IO и, как следствие, можно считать что система настроена не оптимально?

    ОтветитьУдалить
    Ответы
    1. Анонимный20/7/12 10:38 AM

      > ну и ps -ef | grep aio ничего не выводит

      попробуйте pstat -a | grep aio

      Удалить
  2. >актуально ли все вышеописанное для 10gR2 + AIX6?
    Мне кажется да.
    >если iostat -A показывает исключительно нулевые значения в avgc/avfc (ну и ps -ef | grep aio ничего не выводит),
    Это кажется мне странным и скорее всего это не оптимально. Тут нужно понять где лежит база данных (raw, file system) и если fs то их опции монтирования.
    Также можно посмотреть в statspack/awr и если система не оптимально настроена, средние времена db file <> read будут далеко за 10 ms.

    ОтветитьУдалить
    Ответы
    1. Анонимный19/7/12 10:38 AM

      Дмитрий !
      Очень интересно , но у меня все не так...
      1.Выставлено
      filesystemio_options=setal
      2.У меня около тысячи kernel процессов aioserver от которых неизвестно как избавиться...
      3.iostat в поле avgc от 30 до 70 (на момент теста)
      4.Файлы базы данных смонтированы R,W,CIO,DSYN,LG,0x800000000;CX
      5.Файловая система смонтирована с rw

      Удалить
    2. Для связки AIX6+10gR2 (как и для 11gR1) эта проблема не актуальна. При конфигурации #1 все будет работать в CIO режиме. Дмитрий взял правильную нотку в качестве основы (960055.1), но с маниакльностью маркетолога вытащил только то, что ему было выгодно, а там англиским по белому написано "Applies to: Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 11.1.0.7 - Release: 10.1 to 11.1".

      Таким образом если 10.1.0.2 - 11.1, то вариант #1, если 11.2, то вариант #2.

      Кстати, кто не вкурил параметры доступа к файлу смотрятся с помощью "lsof +fg", просто lsof этого не покажет.

      Удалить
    3. С маниакальностью маркетолога (и продавца) повторяю: C какого перепуга AIX6+10gR2 + rw будет работать в CIO ?

      Удалить
    4. Тут вот в чем фишка. Включить CIO/DIO можно как на уровне примонтированного раздела, так и на уровне одного файла. В первом случае это делается при монтировании (опции cio и dio), во втором случае через api вызов во время выполнения программы. Т.е. запущенная программа на AIX (начиная c 5.3 вроде) может сказать, что хочет использовать некий, конкретный файл в режиме cio.

      Оракл научился это делать, опять таки, если судить по нотке 960055.1 с 10.1.0.2 (как раз опция filesystemio_options=setall). Вы привели очень нужную цитату: "There is no need to specify the CIO flag explicitly to mount the disk used for the Oracle Files." Таким образом не надо монитровать раздел для 10gR1-11gR1 в режиме cio, оракл сам, на этапе выполнения сделает нужный вызов в сторону aix.

      В подтверждение моих слов:


      root@rdbms1.dmz [1] /oracle/oradata10
      [Thu 19.07.2012 18:22:50] oslevel -r
      6100-06

      root@rdbms1.dmz [1] /oracle/oradata10
      [Thu 19.07.2012 18:23:01] lsof +fg /oracle/oradata10/rdbms1/system01.dbf
      Value of I :184 np:0
      COMMAND PID USER FD TYPE FILE-FLAG DEVICE SIZE/OFF NODE NAME
      oracle 4456588 oracle 17u VREG R,W,CIO,DSYN,LG;CX 35,3 734011392 6 /oracle/oradata10/rdbms1/system01.dbf
      oracle 5046324 oracle 20u VREG R,W,CIO,DSYN,LG;CX 35,3 734011392 6 /oracle/oradata10/rdbms1/system01.dbf
      oracle 5112008 oracle 15u VREG R,W,CIO,DSYN,LG;CX 35,3 734011392 6 /oracle/oradata10/rdbms1/system01.dbf
      oracle 5242880 oracle 14u VREG R,W,CIO,DSYN,LG;CX 35,3 734011392 6 /oracle/oradata10/rdbms1/system01.dbf
      oracle 6291464 oracle 16u VREG R,W,CIO,DSYN,LG;CX 35,3 734011392 6 /oracle/oradata10/rdbms1/system01.dbf

      oracle@rdbms1.dmz [1] ~
      [Thu 19.07.2012 18:25:05] lsfs /oracle/oradata10/
      Name Nodename Mount Pt VFS Size Options Auto Accounting
      /dev/r1_oradata10lv -- /oracle/oradata10 jfs2 834666496 rw yes no

      oracle@rdbms1.dmz [1] ~
      [Thu 19.07.2012 18:23:32] sqlplus "/ as sysdba"

      SQL*Plus: Release 10.2.0.5.0 - Production on Thu Jul 19 18:23:42 2012

      Copyright (c) 1982, 2010, Oracle. All Rights Reserved.


      Connected to:
      Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
      With the Partitioning, OLAP, Data Mining and Real Application Testing options

      Удалить
    5. >Оракл научился это делать, опять таки, если судить по нотке 960055.1 с 10.1.0.2
      Ok, я почему то думал что только с 11.2, но тест подтверждает, что по крайне мере с 10.2. Спасибо, у меня просто нет 10.2

      > Таким образом не надо монитровать раздел для 10gR1-11gR1 в режиме cio, оракл сам, на этапе выполнения сделает нужный вызов в сторону aix.

      Так вот весь мой пост про то, что даже если Oracle делает cio сам, что прогресс конечно же, он не делает потом async I/O, что очень плохо. По крайне мере так получается на моем стенде. Посмотрите пожалуйста, какой вывод async или нет идет в вашем случае.

      Удалить
    6. root@rdbms1.dmz [1] ~
      [Fri 20.07.2012 08:55:55] iostat -A 1 | awk '/avg/ {if(x!=1){print; getline; print; x=1}else{getline; print}}'
      aio: avgc avfc maxgc maxfc maxreqs avg-cpu: % user % sys % idle % iowait physc % entc
      0.0 0.0 0 0 24 63.2 1.5 35.3 0.0 1.9 194.4
      0.0 0.0 0 0 24 62.0 1.3 36.7 0.0 2.0 199.8
      3.0 0.0 2 0 24 79.5 2.4 18.1 0.0 1.3 129.5
      0.0 0.0 0 0 24 87.1 2.7 10.2 0.0 1.1 114.4
      0.0 0.0 0 0 24 68.3 2.1 29.7 0.0 1.8 180.1
      1.0 0.0 1 0 24 62.1 1.3 36.6 0.0 2.0 200.0
      0.0 0.0 0 0 24 62.2 1.3 36.6 0.0 2.0 199.9
      8.0 0.0 1 0 24 72.9 1.9 25.2 0.0 2.0 201.1
      9.0 0.0 1 0 24 69.3 1.7 29.0 0.0 1.9 190.4
      8.0 0.0 1 0 24 76.2 2.5 21.1 0.1 1.5 145.7
      0.0 0.0 0 0 24 82.2 2.7 15.1 0.0 1.3 129.0
      0.0 0.0 0 0 24 62.3 1.3 36.4 0.0 2.0 200.0
      7.0 0.0 1 0 24 63.2 1.9 34.9 0.0 2.0 200.4
      0.0 0.0 0 0 24 81.9 5.6 12.5 0.0 1.2 121.1
      1.0 0.0 1 0 24 66.8 3.9 29.3 0.0 1.8 175.4
      0.0 0.0 0 0 24 62.6 3.3 34.0 0.1 2.0 199.3
      12.7 0.0 2 0 24 73.4 5.1 21.4 0.1 1.5 153.8

      Работает, хоть это и трудно поймать - база, практически в простое сейчас.

      По поводу 11gR2 могу подтвердить, что все так как вы сказали - async не пашет. Четно говоря, это было для меня открытием.

      Удалить
    7. Анонимный20/7/12 10:03 AM

      10gR2 + AIX6 + setall + rw: CIO там есть точно. Смутило меня то, что нет процессов aioserver, и avgc/avfc постоянно 0. Глянул еще раз: на тестовых хостах там постоянно есть avgc, до тысячи. На бою при этом, почти все время 0, редко поднимается до 10, при ~200 Мб/сек работы с дисками (по показаниям nmon). Подозреваю что низкий avgc связан с тем, что на продакшне вагон оперативной памяти. Такми образом, на указанной конфигурации, Oracle делает сам и cio и async.

      Удалить
    8. Есть подозрение, что такое поведение 11gR2 это баг. Рекомендую посмотреть номер 13400729 - очень похожее описание.

      Удалить
    9. >Работает, хоть это и трудно поймать
      Не похоже чтобы работало. User% ~66%, а операций ввода -вывода единицы ? Те скорее async i/O работает где то еще, но не из-под Oracle. Попробуйте сделать тест создания большой таблицы create table as select - должны появиться сотни и тысячи в колонке avgc.

      >на тестовых хостах там постоянно есть avgc, до тысячи.
      Вот это работает, верю

      >На бою при этом, почти все время 0, редко поднимается до 10, при ~200 Мб/сек работы с дисками
      Нет, это очень странно, что там с процессами aiosever ?

      >По поводу 11gR2 могу подтвердить, что все так как вы сказали - async не пашет. Четно говоря, это было для меня открытием.
      1:1 - я не думал что работало в 10g -))

      Удалить
    10. > Не похоже чтобы работало. User% ~66%, а операций ввода -вывода единицы ?
      Я тоже подумал о случайном шуме и смотрел за выводом iostat -A 1 непосредственно и сравнивал пики по чтению с раздела oradata с пиками по async - совпадало. Для такой базы такое состояние нормально (других у меня нет - все с одинковым софтом). В это время месяца там идет активная работа на чтение с небольшим объемом данных, которые естественно загнаны в кеш. Отсюда высокая загрузка процессора и малая загрузка диска.

      > Попробуйте сделать тест создания большой таблицы create table as select - должны появиться сотни и тысячи в колонке avgc.

      Работает (таблица 10M записей, примерно 0.9G):
      10.0 0.0 1 0 24 87.8 1.7 9.4 1.1 2.0 199.8
      11.0 0.0 1 0 24 87.7 2.0 9.5 0.8 2.0 199.8
      21.0 0.0 4 0 24 85.0 7.6 3.7 3.6 2.0 199.9
      27.0 0.0 8 0 24 85.8 7.7 2.9 3.5 2.0 199.8
      81.0 0.0 15 0 24 79.5 15.1 3.3 2.1 2.0 199.9
      125.0 0.0 14 0 24 70.5 25.8 1.4 2.3 2.0 199.8
      126.0 0.0 15 0 24 70.3 25.4 1.4 2.9 2.0 199.9
      114.9 0.0 13 0 24 75.7 22.0 0.7 1.6 2.0 199.4
      106.1 0.0 15 0 24 71.6 23.6 1.1 3.7 2.0 197.0
      21.0 0.0 5 0 24 84.4 7.2 5.1 3.4 2.0 198.5

      Там всего два ядра и неплохой массив, поэтому тысяч не должно быть, а сотни пожалуйста.

      Удалить
    11. > а сотни пожалуйста.
      Да, это работа async i/O "от Oracle". Что же вывод странный, то что было работало в 10g, сломали в 11gR2 ? Может конечно они по прежнему проверяют наличие AIX 6 ? -)))

      Удалить
    12. Ну так вот и работа для ребят из Монпелье - чтож они там зря свой хлеб едят :)

      Удалить
  3. Запутался в конфигурациях. Если файловая система смонтирована с rw, и Oracle 10g никак флаг CIO в файлах базах данных появится не мог.
    Нужно или подписываться или каждый раз писать версию Oracle, AIX, filesystemio_options, disk_asynch_io, опции монтирования fs

    ОтветитьУдалить
  4. Дмитрий, а с oracle 11.2 и aix 6.1 еще интереснее;)
    вы публиковали
    http://dsvolk.blogspot.com/2012/02/best-practices.html

    там все написано:)

    ОтветитьУдалить
  5. прошу не печатать пред письмо) не внимательно прочитал начало.ночь невнимательная(

    ОтветитьУдалить
  6. Анонимный20/7/12 9:30 AM

    как страшно жить без соляриса... )

    ОтветитьУдалить
  7. Анонимный20/7/12 11:23 AM

    Может баг в 11.2 ?

    Bug 13400729 increased elapsed time on "db file scattered read" in IBM AIX

    Workaround
    Setting disk_asynch_io = true or do not use directIO or setall option in
    filesystemio_options alleviates the situation but does not workarounds it 100%.

    ОтветитьУдалить
    Ответы
    1. Bug посмотрел - мне кажется он не "про то". Описание настолько скудное, что точно сказать нельзя. В любом случае есть несколько вариантов патчей против данного бага.

      Удалить
  8. Анонимный20/7/12 2:40 PM

    Workaround for Bug 13400729 просто умиляет "...but does not workarounds it 100%" :)
    В версии 10G сделали хорошо по сравнению с 9i (уже не нужно монтировать с опцией CIO),
    тут в 11.2 просто downgrade какой-то получается :)

    ОтветитьУдалить
  9. Анонимный21/9/12 2:14 PM

    В связке AIX 7 и 11gR2 первый вариант работает

    ОтветитьУдалить
  10. Анонимный16/10/12 2:11 PM

    Мне не совсем понятен вывод статистики iostat. Просветите, плз
    Описание команды iostat в IBM infocenter говорит:
    avgc Average global AIO request count per second for the specified interval.
    avfc Average fastpath request count per second for the specified interval.

    Как я понимаю, если имеем сырой диск или FS смонтирована с CIO или FS без CIO, но oracle сам делает CIO, то это - fastpath. Т.е. колонка avfc. Почему же видим значения в avgc?
    Или iostat считает, что если FS смонтирована без CIO, то это не fastpath, а как там приложения файлы открывают - не знает?

    ОтветитьУдалить
  11. Анонимный16/1/13 3:37 PM

    При помощи команды lsof удалось выяснить, как именно открывает Oracle файлы данных в варианте #1:
    oracle 39846142 oracle 12u VREG R,W,CIO,DSYN,LG,0x800000000;CX 39,1 1069555712 33 /oradata/data (/dev/dsvolkssdlv)
    grep -i "0x800" vmount.h
    #define VFS_DIO 0x80000000 /* O_DIRECT mount */

    Дмитрий, количество нулей после 0x8.. разное. Флаг, который показывает lsof (0x800000000) - это O_CIOR (cм. /usr/include/fcntl.h)

    ОтветитьУдалить
    Ответы
    1. Спасибо, это интересно и, возможно, более правильно. Вот что я нашел:
      "
      AIX 6.1 introduced a new open flag O_CIOR which is same as O_CIO, but this
      allows subsequent open calls without CIO. The advantage of this enhancement
      is that other applications like cp, dd, cpio, dbv can access database files
      in read only mode without having to open them with CIO.
      "

      Тогда я не могу объяснить почему я не вижу асинхронных операций ввода-вывода на файле открытом таким образом.

      Удалить
  12. Анонимный16/1/13 11:39 PM

    >>Однако инженеры IBM из Montpelier, считают по другому, их строгая рекомендация использовать >>filesystemio_options=async и строго cio.
    Дмитрий, не поделитесь ли ссылкой на эту "строгую рекомендацию"?

    ОтветитьУдалить