В Oracle RAC будет ли приложение работать быстрее, если в той же базе данных есть подмножество кода, использующего отдельный сервис Oracle?
Например, у меня есть приложение, которое выполняет множество контрольных записей. Много. Это замедляет ход событий. Если я создам отдельную службу в Oracle RAC только для CRUD-контроля, поможет ли это ускорить работу моего приложения?
Другими словами, я указываю большую часть приложения на основную службу, прослушивающую мой RAC через SCAN. Я беру подмножество своего приложения, манипулирование данными журнала аудита, и указываю на отдельное прослушивание службы, но указываю ту же схему, что и основной прослушиватель.
1 ответ
Как и во всем остальном, это зависит. Вы должны быть более конкретны в отношении своего приложения, какие сервисы вы определяете, ваши рабочие нагрузки, ваши цели и т. Д. Реально, вам необходимо протестировать его в своей среде, чтобы точно знать.
Отдельная служба может позволить вам отделить рабочую нагрузку одного приложения (которое записывает контрольный журнал) от рабочей нагрузки других приложений, имея разные наборы узлов в кластере, на котором выполняется каждая служба (при нормальной работе). Это может помочь гарантировать, что приложение с более высоким приоритетом (предположительно не записывает контрольный журнал) имеет установленное количество оборудования для обработки своей рабочей нагрузки, даже если поток с более низким приоритетом работает на полную мощность. Конечно, поскольку все узлы совместно используют один и тот же диск, если узким местом является дисковый ввод-вывод, такое разделение рабочей нагрузки может не дать большого результата.
Разделение служб на разные наборы узлов также может влиять на то, как часто конкретная служба получает блоки из буферного кэша локального узла, а не запрашивает их у другого узла и ожидает их отправки через межсоединение. Вполне возможно, что приложение, которое постоянно записывает данные в таблицы журналов, может потратить довольно много времени на ожидание небольшого количества горячих блоков (таких как самый правый блок в индексе первичного ключа для таблицы журналов), чтобы получить отправлены туда и обратно между различными узлами. Если все записи аудита записываются только на одном узле (или на меньшем количестве узлов), этот горячий блок всегда будет доступен в локальном буферном кеше. С другой стороны, если написание контрольного журнала включает запрос базы данных для получения информации об изменении, разделение рабочей нагрузки может означать, что блоки, которые были в локальном кэше (потому что они были только что изменены), теперь отправляются через межсоединение, вы может повредить производительность.
Разделение служб, даже если они работают на одном и том же наборе узлов, также может быть полезно, если вы планируете управлять ими по-разному. Например, вы можете настроить правила Oracle Resource Manager, чтобы отдавать приоритет сеансам, которые используют один сервис над другим. Это может быть более детальным способом распределения ресурсов для разных рабочих нагрузок, чем запуск служб на разных узлах. Но это также может добавить больше накладных расходов.