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. Мониторинг проводился командой:
Данная команда показывает кол-во асинхронных операций ввода-вывода. Опять нужно сделать небольшое отступление, что в 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:
На мой взгляд это объясняет все происходящее: вариант #1 работает с direct I/O, что для AIX не слишком оптимально. Это значит, что все описанное в IBM whitepaper и MOS верно, но не самый оптимальный вариант. Вариант #2 сохраняет оптимальный ввод-вывод, формально называемый file system fast patch async I/O.
Резюме: пожалуйста продолжайте использовать опции монтирования cio для размещения файлов данных Oracle на 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 % entc0.0 0.0 0 0 48 0.3 1.8 97.9 0.0 0.0 4.40.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.
Дмитрий, актуально ли все вышеописанное для 10gR2 + AIX6? Я правильно понял, что в случае, если iostat -A показывает исключительно нулевые значения в avgc/avfc (ну и ps -ef | grep aio ничего не выводит), то у меня не используется async IO и, как следствие, можно считать что система настроена не оптимально?
ОтветитьУдалить> ну и ps -ef | grep aio ничего не выводит
Удалитьпопробуйте pstat -a | grep aio
>актуально ли все вышеописанное для 10gR2 + AIX6?
ОтветитьУдалитьМне кажется да.
>если iostat -A показывает исключительно нулевые значения в avgc/avfc (ну и ps -ef | grep aio ничего не выводит),
Это кажется мне странным и скорее всего это не оптимально. Тут нужно понять где лежит база данных (raw, file system) и если fs то их опции монтирования.
Также можно посмотреть в statspack/awr и если система не оптимально настроена, средние времена db file <> read будут далеко за 10 ms.
Дмитрий !
УдалитьОчень интересно , но у меня все не так...
1.Выставлено
filesystemio_options=setal
2.У меня около тысячи kernel процессов aioserver от которых неизвестно как избавиться...
3.iostat в поле avgc от 30 до 70 (на момент теста)
4.Файлы базы данных смонтированы R,W,CIO,DSYN,LG,0x800000000;CX
5.Файловая система смонтирована с rw
Для связки 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 этого не покажет.
С маниакальностью маркетолога (и продавца) повторяю: C какого перепуга AIX6+10gR2 + rw будет работать в CIO ?
УдалитьТут вот в чем фишка. Включить 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
>Оракл научился это делать, опять таки, если судить по нотке 960055.1 с 10.1.0.2
УдалитьOk, я почему то думал что только с 11.2, но тест подтверждает, что по крайне мере с 10.2. Спасибо, у меня просто нет 10.2
> Таким образом не надо монитровать раздел для 10gR1-11gR1 в режиме cio, оракл сам, на этапе выполнения сделает нужный вызов в сторону aix.
Так вот весь мой пост про то, что даже если Oracle делает cio сам, что прогресс конечно же, он не делает потом async I/O, что очень плохо. По крайне мере так получается на моем стенде. Посмотрите пожалуйста, какой вывод async или нет идет в вашем случае.
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 не пашет. Четно говоря, это было для меня открытием.
10gR2 + AIX6 + setall + rw: CIO там есть точно. Смутило меня то, что нет процессов aioserver, и avgc/avfc постоянно 0. Глянул еще раз: на тестовых хостах там постоянно есть avgc, до тысячи. На бою при этом, почти все время 0, редко поднимается до 10, при ~200 Мб/сек работы с дисками (по показаниям nmon). Подозреваю что низкий avgc связан с тем, что на продакшне вагон оперативной памяти. Такми образом, на указанной конфигурации, Oracle делает сам и cio и async.
УдалитьЕсть подозрение, что такое поведение 11gR2 это баг. Рекомендую посмотреть номер 13400729 - очень похожее описание.
Удалить>Работает, хоть это и трудно поймать
УдалитьНе похоже чтобы работало. User% ~66%, а операций ввода -вывода единицы ? Те скорее async i/O работает где то еще, но не из-под Oracle. Попробуйте сделать тест создания большой таблицы create table as select - должны появиться сотни и тысячи в колонке avgc.
>на тестовых хостах там постоянно есть avgc, до тысячи.
Вот это работает, верю
>На бою при этом, почти все время 0, редко поднимается до 10, при ~200 Мб/сек работы с дисками
Нет, это очень странно, что там с процессами aiosever ?
>По поводу 11gR2 могу подтвердить, что все так как вы сказали - async не пашет. Четно говоря, это было для меня открытием.
1:1 - я не думал что работало в 10g -))
> Не похоже чтобы работало. 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
Там всего два ядра и неплохой массив, поэтому тысяч не должно быть, а сотни пожалуйста.
> а сотни пожалуйста.
УдалитьДа, это работа async i/O "от Oracle". Что же вывод странный, то что было работало в 10g, сломали в 11gR2 ? Может конечно они по прежнему проверяют наличие AIX 6 ? -)))
Ну так вот и работа для ребят из Монпелье - чтож они там зря свой хлеб едят :)
УдалитьЗапутался в конфигурациях. Если файловая система смонтирована с rw, и Oracle 10g никак флаг CIO в файлах базах данных появится не мог.
ОтветитьУдалитьНужно или подписываться или каждый раз писать версию Oracle, AIX, filesystemio_options, disk_asynch_io, опции монтирования fs
Дмитрий, а с oracle 11.2 и aix 6.1 еще интереснее;)
ОтветитьУдалитьвы публиковали
http://dsvolk.blogspot.com/2012/02/best-practices.html
там все написано:)
прошу не печатать пред письмо) не внимательно прочитал начало.ночь невнимательная(
ОтветитьУдалитькак страшно жить без соляриса... )
ОтветитьУдалитьМожет баг в 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%.
Bug посмотрел - мне кажется он не "про то". Описание настолько скудное, что точно сказать нельзя. В любом случае есть несколько вариантов патчей против данного бага.
УдалитьWorkaround for Bug 13400729 просто умиляет "...but does not workarounds it 100%" :)
ОтветитьУдалитьВ версии 10G сделали хорошо по сравнению с 9i (уже не нужно монтировать с опцией CIO),
тут в 11.2 просто downgrade какой-то получается :)
В связке AIX 7 и 11gR2 первый вариант работает
ОтветитьУдалитьМне не совсем понятен вывод статистики 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, а как там приложения файлы открывают - не знает?
При помощи команды 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)
Спасибо, это интересно и, возможно, более правильно. Вот что я нашел:
Удалить"
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.
"
Тогда я не могу объяснить почему я не вижу асинхронных операций ввода-вывода на файле открытом таким образом.
>>Однако инженеры IBM из Montpelier, считают по другому, их строгая рекомендация использовать >>filesystemio_options=async и строго cio.
ОтветитьУдалитьДмитрий, не поделитесь ли ссылкой на эту "строгую рекомендацию"?