IBM AIX with Oracle Database performance: a beginner’s guide
Пока я тут с трудом раз в неделю пишу по 1 посту про Oracle Database on AIX коллеги успевают написать целую статью: IBM AIX with Oracle Database performance: a beginner’s guide. Кстати, и вовсе у не такой и beginner's как скромничает автор - там тебе и примеры с OSWatcher, и Nmon, и Responce Time формула. Главное - это наличие разобранных примеров.
Наверно, можно найти в этом документе какие-то шероховатости, но в целом я очень доволен и рекомендую к изучению.
В качестве демонстрации шероховатостей я захотел придраться вот к этой формуле (стр 3):
"
On Power 7 system performance is degraded when Number of Active Sessions > 4 x Number of Cores x 3.
"
4 - это максимально возможное число одновременных потоков для Power 7.
3 - это магическая константа, которую я также долго использовал для определения загруженности процессоров на старых Sun машинах - если на каждый поток приходится больше 3 ожидающих процессов - значит процессоры не справляются. Ну по порядку:
0. К сожалению, нет точной цифры сколько пользовательских задач (мы понимаем, что задачи это сессии Oracle) на thread приводят к его 100% утилизации. Скорее, можно было бы говорить сколько потоков на ядро, но и таких оценок официально нет. Представляется вероятным, что скорее всего это будет где то между 4 и 8. Другими словами, 4 ядра в режиме SMT OFF у меня выдерживали 32 одновременно работающие задачи (коэфф 8), и эти же 4 ядра в режиме SMT 4 справлялись с 64 потоками (кoэф 4). Процессор Power 7 вообще потрясающе устойчив к большим загрузкам. 256 ядерная машина может работать в 100% загрузке затрачивая на ядро порядка 7% (и это при некоторых отягощяющих обстоятельствах)
Есть еще одно обстоятельство: правду о загрузке LPAR дает только команда
А правду о загрузке фического ядра дает специальный регистр PURR. Если вы задумаетесь, то поймете, что можно вполне увидеть 4 потока одного ядра загруженные на 100%, это же не значит, что ядро загружено на 400%, так ли ?
1. Теперь необходимо убедиться, а сколько действительно работает потоков - режим smt может быть как выключен, так и включен в 2 и 4. В AWR на AIX число потоков показывается в колонке CPUs, число ядер - в колонке Cores -)
Однако, это самый простой случай в мире, когда у нас в нашу LPAR выделены физические ядра и наша LPAR - dedicated. Это значит, что другие задачи в других LPAR не могут претендовать на ресурсы наших ядер (Cores).
Однако весьма распространены ситуации, когда LPAR сделаны как shared , или dedicated donation. Надо быть тут очень внимательным чтобы не попасться в ловушку -)
2. Average Active Sessions определятся как DB Time/Elapsed Time. Прекрасные ссылки (первая, вторая) из которых можно найти, что в DB Time входят не только время on CPU, но и I/O wait, и время на прочие ожидания.
Если рассмотреть как вырожденный случай, систему в которой сессии постоянно ждут ввода-вывода (db file sequencial read/db file scattered read) DB Time получится высокий и мы сможем прийти к заключению что проблемы с загрузкой процессоров, в то время как они с вводом-выводом.
Повторю - статья мне понравилась, рекомендую. Нормальный баланс между объемом информации и детальностью изложения.
Наверно, можно найти в этом документе какие-то шероховатости, но в целом я очень доволен и рекомендую к изучению.
В качестве демонстрации шероховатостей я захотел придраться вот к этой формуле (стр 3):
"
On Power 7 system performance is degraded when Number of Active Sessions > 4 x Number of Cores x 3.
"
4 - это максимально возможное число одновременных потоков для Power 7.
3 - это магическая константа, которую я также долго использовал для определения загруженности процессоров на старых Sun машинах - если на каждый поток приходится больше 3 ожидающих процессов - значит процессоры не справляются. Ну по порядку:
0. К сожалению, нет точной цифры сколько пользовательских задач (мы понимаем, что задачи это сессии Oracle) на thread приводят к его 100% утилизации. Скорее, можно было бы говорить сколько потоков на ядро, но и таких оценок официально нет. Представляется вероятным, что скорее всего это будет где то между 4 и 8. Другими словами, 4 ядра в режиме SMT OFF у меня выдерживали 32 одновременно работающие задачи (коэфф 8), и эти же 4 ядра в режиме SMT 4 справлялись с 64 потоками (кoэф 4). Процессор Power 7 вообще потрясающе устойчив к большим загрузкам. 256 ядерная машина может работать в 100% загрузке затрачивая на ядро порядка 7% (и это при некоторых отягощяющих обстоятельствах)
Есть еще одно обстоятельство: правду о загрузке LPAR дает только команда
lparstat System configuration: type=Dedicated mode=Capped smt=Off lcpu=256 mem=2020352MB %user %sys %wait %idle ----- ----- ------ ------ 0.5 0.7 0.3 98.5
А правду о загрузке фического ядра дает специальный регистр PURR. Если вы задумаетесь, то поймете, что можно вполне увидеть 4 потока одного ядра загруженные на 100%, это же не значит, что ядро загружено на 400%, так ли ?
1. Теперь необходимо убедиться, а сколько действительно работает потоков - режим smt может быть как выключен, так и включен в 2 и 4. В AWR на AIX число потоков показывается в колонке CPUs, число ядер - в колонке Cores -)
Однако, это самый простой случай в мире, когда у нас в нашу LPAR выделены физические ядра и наша LPAR - dedicated. Это значит, что другие задачи в других LPAR не могут претендовать на ресурсы наших ядер (Cores).
Однако весьма распространены ситуации, когда LPAR сделаны как shared , или dedicated donation. Надо быть тут очень внимательным чтобы не попасться в ловушку -)
2. Average Active Sessions определятся как DB Time/Elapsed Time. Прекрасные ссылки (первая, вторая) из которых можно найти, что в DB Time входят не только время on CPU, но и I/O wait, и время на прочие ожидания.
Если рассмотреть как вырожденный случай, систему в которой сессии постоянно ждут ввода-вывода (db file sequencial read/db file scattered read) DB Time получится высокий и мы сможем прийти к заключению что проблемы с загрузкой процессоров, в то время как они с вводом-выводом.
Повторю - статья мне понравилась, рекомендую. Нормальный баланс между объемом информации и детальностью изложения.
These queries should be reviewed with the developer’s team to get a better design for the query.
ОтветитьУдалитьLooking at the first query; we would estimate that it is a query with a high cost of 3032, as shown in
the following report. Experience shows a heavy query has a cost above 1000.
-----------------
Examining the SQL for the query shows that there are some possible improvements that could be
made, for this query they would be:
Replace the count(*) by count(1).
Avoid full table scans.
--------------
Страница 19-20, манипуляции с индексом это уже ни в какие ворота.
---------------
Зачотная статья. Рекомендую не позориться и стереть.
нет-нет, просьба не стирать - этот перл должен остаться в веках для потомков!
УдалитьДмитрий, попросите отрецензировать эту статью тем, кто знает английский и оракл. Идея написать статью хорошая, примеры хорошие, но само содержание и язык за гранью добра и зла.
ОтветитьУдалитьДмитрий, здравствуйте. Раз уж вы написали на эту тему, можете дополнительно поделиться опытом?)
ОтветитьУдалитьЧем вообще может быть обусловлена большая разница между DB Time и суммой всех foreground wait events (включая CPU Time)? Грубо говоря, в разделе AWR Foreground Wait Class вижу строку "Captured Time accounts for 56% of Total DB time" (в разные часы/дни от 50 до 60%).
Похожая ситуация видна и на скриншоте в приведенной вами статье в первом кейсе: там нет полного списка wait events (только Top5), сумма по top5 дает 70%, и поскольку пятый дает всего 0.6%, то оставшийся хвост уже врядли сможет добить целых 30%.
Одно объяснение удалось нагуглить - якобы так должна вести себя система, перегруженая по CPU (большой runqueue, ось вытесняет процессы). Но это не наш случай, согласно NMON система недогружена:
LPAR Dedicated Capped (10 ядер), SMT=4. CPU_ALL нигде (почти нигде) не достигает 100%. RunQueue по тому же Nmon - плавает вместе с нагрузкой на CPU, но нигде не достигает 40шт.
В приведенной вами статье в третьем кейсе предложено объяснение что расхождение могут вызвать незавершенные/неуспешные запросы не попавшие в репозитарий, но в нашем случае это не подтверждается логами приложения
Где еще искать пропавшие 40% перформанса?
В аналогичной по назначению базе (то же приложение, правда другая нагрузка и другое окружение) на Intel проблемы нет, CPU Time + foreground events суммируются в 100% DB Time (даже 100.5%)
Спасибо!
Вряд ли это по адресу вопрос. Судя по этому:
Удалить256 ядерная машина может работать в 100% загрузке затрачивая на ядро порядка 7% (и это при некоторых отягощяющих обстоятельствах)
и про магическую цифру 3, Дмитрий вряд ли хорошо понимает работу процессов и CPU.
...
>> В приведенной вами статье...
Не читайте эту статью.
...
>> RunQueue по тому же Nmon - плавает вместе с нагрузкой на CPU, но нигде не достигает 40шт.
У вас 40 процессов постоянно сидят в очереди ? Так чего же вы удивляетесь?
Покажи секцию OS Statistics из своего AWR
Удалить>Чем вообще может быть обусловлена большая разница между DB Time и суммой всех foreground wait events
ОтветитьУдалитьЭто интересно. Опубликуйте пожалуйста nmon и AWR, я посмотрю.
>Дмитрий вряд ли хорошо понимает работу процессов и CPU.
ОтветитьУдалитьЭто верно подмечено. Мне с большим трудом дается понимание работы процессов. Например: в чем смысл жизни процессов, зачем они вообще работают, эти процессы ? -)
>У вас 40 процессов постоянно сидят в очереди? Так чего же вы удивляетесь?
Вам нужно открыть для себя AIX. vmstat в AIX показывает run queue не только процессы, ожидающие процессора, но и те, которые исполняются. Таким образом у Дмитрий Алерганта всегда есть свободное CPU.
>Вам нужно открыть для себя AIX. vmstat в AIX показывает run queue не только процессы,
ОтветитьУдалить>ожидающие процессора, но и те, которые исполняются.
Дмитрий, полагаю вы хотели сказать, что vmstat в AIX показывает количество runnable тредов как сумму ожидающих (run queue) выполнения и уже выполняющихся.
Если AIX выдает это значение везде, где у него запрашивают длину run queue (что несколько забавно, написано "очередь" а там... дрова лежат), а конкретно у Дмитрий Алергант Nmon, то я бы ему порекомендовал еще и vmstat приложить к OS Statistics из его AWR.