Несколько экземпляров Oracle - это хорошая практика?

9

Один из моих клиентов развернул базу данных нашего продукта на машине Solaris, на которой уже есть 3 экземпляра Oracle. Итак, сейчас на одной машине работают 4 экземпляра Oracle. И теперь мы испытываем проблемы с производительностью.

У меня нет доступа к другим экземплярам или компьютеру, и все инструменты, которые у меня есть, это alert.log, AWR и ADDM. Я знаю, что что-то связано с несколькими экземплярами, но я не могу доказать это.

Итак, мой вопрос: вы сталкивались с подобной ситуацией? Как мне с этим бороться? Как я могу определить причину проблем с производительностью, связанных с несколькими экземплярами?

Исаак А. Нугрохо
источник

Ответы:

8

Исаак, предпочтительно мы запускаем один экземпляр на одном сервере и реализуем различные приложения в виде схем и служб в этой единой базе данных. Если на сервере достаточно памяти, проблем не будет, если все приложения будут вести себя как хорошие граждане Oracle. Как только появляется приложение, которое не использует переменные связывания, на хосте нарастает боль. То же самое для приложений, которые продолжают создавать новые соединения каждые несколько секунд вместо повторного использования существующих соединений. Такие вещи, как автоматическое принятие, также не помогают улучшить ситуацию. Каково нормальное поведение вашего приложения? Это делает большие обновления? Когда он делает коммит? Сколько повторов генерируется / час? Использует ли ваше приложение переменные связывания? Во многих случаях местоположение онлайн-файлов редологов имеет решающее значение. Если приложение генерирует много повторов (или конкурирует с другим приложением, которое делает это), средство записи журнала замедлится и вызовет значительное снижение производительности, поскольку сеанс ожидает завершения записи файла журнала. Предоставьте заказчику макет диска, где повторы выполняются на выделенных дисках raid-10, и посмотрите, насколько это помогает. Также выясните ситуацию с выделением памяти. Возможно, потребуется справедливое перераспределение доступной памяти.

надеюсь, это поможет

ik_zelf
источник
ты прав. Мы контролируем наш экземпляр и проводим оптимизацию везде, где можем. Но производительность не стабильна, иногда она падает без объяснимой причины (с нашей стороны)
Исаак А. Нугрохо,
Исаак, как часто база данных перезапускается, какая это версия и есть ли у вас гистограммы на столбцах, сгенерированные процессом автоматической статистики? Используете ли вы переменные связывания и предварительный просмотр оптимизатора?
ik_zelf
2

Запуск нескольких экземпляров на одном сервере возможен, а в некоторых случаях необходим. Oratab разработан специально для управления несколькими экземплярами. В тех случаях, когда у вас есть несколько независимых приложений, может быть предпочтительнее иметь экземпляр для каждого приложения.

Наличие достаточного объема памяти имеет решающее значение. Oracle строит SGA в разделяемой памяти. Если у вас недостаточно памяти, SGA или процессы начнут включаться и выключаться. Это известно как избиение и приводит к значительному снижению производительности.

Может быть возможно настроить экземпляры для запуска с меньшим SGA. Oracle предоставляет инструменты для настройки размера SGA. Если какой-либо из экземпляров имеет слишком большой SGA, он будет наказывать все экземпляры.

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

Выполнение sar(при условии, что Unix base O / S) может дать вам хорошую диагностику того, где проблема. Вероятные проблемы - это подкачка или насыщение дискового ввода-вывода. Добавление оперативной памяти, вероятно, решит любую из этих проблем.

С насыщением дискового ввода-вывода можно также справиться, переместив некоторые табличные пространства на другие диски. Обычно я настраиваю Oracle так, чтобы ввод-вывод распределялся по максимально возможному количеству дисков.

РЕДАКТИРОВАТЬ: Это несколько случаев, которые могут потребовать отдельных экземпляров.

  • Это всегда необходимо, если вы используете разные версии Oracle на одном сервере. Приложения не всегда сертифицированы или способны работать с последней версией.
  • Возможно, вам понадобятся экземпляры, которые можно автоматически откатить к моменту времени. (Хотя я не одобряю это, я использовал это для автоматизированной среды тестирования.)
  • Если у вас есть жестко запрограммированная ссылка на схему в приложениях, вам могут потребоваться разные экземпляры для обработки коллизий пространства имен.
  • Требования безопасности могут быть легче иметь дело с использованием отдельных экземпляров. В этом случае может быть целесообразно использовать разные серверы.
  • Запускать разные версии одной и той же базы данных (разработка, тестирование, принятие пользователей, обучение и производство) на одном и том же сервере безопаснее с отдельными экземплярами. Я бы не запускал все эти среды на одном сервере, но часто запускал два или более на одном сервере.
BillThor
источник
Можете ли вы привести примеры, когда необходимо запускать несколько экземпляров?
ScottCher
1
@ScottCher Я отредактировал свой ответ, чтобы представить некоторые случаи.
BillThor
1

Наиболее важным ресурсом является оперативная память.

Каждый запущенный экземпляр Oracle выделяет некоторую оперативную память для своей собственной, когда он только запущен и не загружен.

Мы запускаем 10g с 10 и 11g с 8 экземплярами, но это серверы разработки. После перезапуска ОС некоторые службы Oracle не запускаются автоматически и должны запускаться вручную: Oradim -startup -sid xxx.

Мы только начинаем использовать автоматическое управление памятью, но ситуация отличается от SQL Server, где вы можете добавлять базы данных столько, сколько дает дисковое пространство.

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

Добавление оперативной памяти может помочь в вашей ситуации.

bernd_k
источник
2
Причина, по которой вы говорите, что SQL-сервер отличается, - это скорее номенклатура. Группа процессов и их выделенная память является экземпляром. Если вы добавляете базу данных SQL Server, а она не добавляет новый процесс, это не экземпляр. В этом случае это намного ближе к добавлению схемы.
Стефани Пейдж