Большинство современных приложений работают на основе многоуровневой архитектуры, где их функционал распределен по разным уровням, и, как правило, выполняется на своем различных серверах. Обычно существуют следующие уровни:
- Пользовательский интерфейс (User Interface). Обеспечивает связь между пользователем и приложением.
- Бизнес-логика (Business Layer). Связан со всеми бизнес-нормами и правилами, необходимыми для работы приложения.
- Уровень хранения и обработки данных (Data layer). Оперирует данными, необходимыми для бизнес-транзакций.
Такая структура обеспечивает ряд важных преимуществ, таких как: относительно тонкий клиент (клиентское ПО), развертывание только серверной части, разделение функционала, отсутствие прямого доступа к базе данных. В результате уменьшаются затраты на разработку и владение приложением.
В приложениях с многозвенной архитектурой, проблемы с производительностью могут возникнуть на любом из его уровней. Интересно, что базы данных являются одним из «популярных» мест для проблем с производительностью.
В базах данных все время что-то меняется: сами данные, запросы к ним или какая-нибудь логика их обработки. Это означает, что поддержание высокой производительности баз данных – задача постоянная.
Есть множество факторов, которые влияют на скорость работы приложения с базами данных.
Например:
- Неоптимальный дизайн таблицы в базе данных
- Плохая индексация
- Неправильное партицирование таблиц
- Неоптимальные запросы
- Неоптимальная конфигурация СХД
- Размещение БД на серверах, обслуживающих несколько приложений.
Мониторинг Oracle
Обзор
База данных Oracle – это реляционная система управления базами данных (RDBMS, relational database management system), разработанная одноименной компанией Oracle. Ее богатый функционал обеспечивает высокую доступность, масштабируемость, производительность, управляемость и безопасность. Эти достоинства делают Oracle RDBMS корпоративного класса и одним из лидеров в этой области.
БД Oracle предоставляет всестороннюю поддержку разработки приложений с помощью разных возможностей и функций. Она также предлагает различные методы доступа к данным для Java и .NET.
Существует несколько версий Oracle, каждая их которых предназначена для разного уровня использования:
- Стандартная версия (Standard Edition, SE). Содержит базовые функции БД. В основном она рассчитана на серверы с 1-4 CPU. Если же количество CPU превышает 4, то пользователю придется перейти на Корпоративную версию. В SE нет ограничений памяти, а также могут использоваться кластеры с помощью Oracle RAC.
- Корпоративная версия (Enterprise Edition, EE). Расширяет возможности Стандартной версии, особенно в области производительности и безопасности. Она рассчитана на серверы с количеством CPU 4 и выше. В этой версии нет ограничений памяти и можно использовать кластеры с помощью ПО Oracle RAC.
- Стандартная версия один (Standard Edition One). Эта версия появилась в Oracle 10g, и имеет некоторые функциональные ограничения по сравнению со Стандартной версией. Ориентирована на использование системами с 1-2 CPU. Не имеет ограничений памяти.
- Экспресс версия (Express Edition или Oracle Database XE). Доступна начиная с 2005 года, бесплатная для платформ Windows и Linux. Эта версия имеет несколько ограничений: 150 МB для клиентских «следов» (footprint), использование только одним CPU и максимум – 4 GB данных пользователя. Несмотря на то, что эта версия может быть установлена на сервере с любым количеством памяти, использовать она может лишь 1 GB.
- Облегченная БД Oracle (Oracle Database Lite). Предназначена для работы на мобильных устройствах. Эта база данных, частично размещенная на мобильном устройстве, может быть синхронизирована с БД на сервере.
Общеизвестно, что слой БД имеет огромное влияние на производительность приложений. Компания Oracle является одним из ключевых игроков этой области, поэтому целесообразно ознакомиться с их средой с точки зрения производительности. В нашей заметке пойдет речь об архитектуре Oracle и возможностях ее мониторинга. Мы также расскажем о самых важных счетчиках мониторинга и практике их использования.
Архитектура
Oracle состоит из экземпляра базы данных и хранилища данных. Экземпляр БД – это набор процессов ОС и структур памяти, которые взаимодействуют с хранилищем. Структура памяти называется Глобальной Областью Системы – System Global Area (SGA). Данные логически хранятся в виде табличных пространств (tablespace), а физически как файлы данных. Табличные пространства могут содержать различные типы сегментов памяти. Сегменты, в свою очередь, состоят из одного и более экстентов. Экстенты содержат группы последовательных блоков данных. Ну а блоки данных являются базовыми единицами хранения. На физическом уровне, файлы данных содержат один и более блоков данных, размер которых может варьироваться.
Система управления БД Oracle отслеживает хранение данных на компьютере с помощью информации, хранящейся в табличном пространстве SYSTEM. SYSTEM содержит справочник данных и часто (по умолчанию) индексирует и кластеризует. Этот справочник состоит из специального набора таблиц, которые содержат информацию про все пользовательские объекты в базе данных.
Следующая диаграмма иллюстрирует архитектуру БД Oracle. Она отображает разные структуры памяти на уровне экземпляра БД (instance), а также файлы данных на уровне хранилища данных.
Каждый экземпляр БД использует Системную Глобальную Область (System Global Area, SGA), которая является общей областью памяти, для того, чтобы записывать данные и контролировать информацию. Экземпляр БД сам себе выделяет SGA при запуске и освобождает память при выключении. Информация в SGA состоит из следующих элементов, каждый из которых имеет свой размер, зафиксированный при запуске экземпляра БД:
- Буферный кэш (Buffer cache). В нем хранятся блоки данных, которые недавно использовались. Это помогает Oracle сократить операции ввода/вывода и повысить производительность, так как новые запросы одних и тех же данных обслуживаются из буферного кэша, сокращая количество запросов к диску.
- Буфер журнала изменений (Redo log buffer). Хранит записи изменений, производимых в БД. В случае сбоя системы это поможет восстановить экземпляр базы.
- Разделяемый пул (Shared pool). Хранит используемые всеми процессами структуры памяти, такие как общие области SQL в кэш библиотеке (Library cache) и внутреннюю информацию в справочнике данных. При выделении недостаточного объема памяти могут возникнуть проблемы с производительностью.
- Кэш библиотеки (Library cache). Хранит общие области SQL, кэшируя дерево структурного анализа и план выполнения каждого уникального оператора SQL. Это позволяет сократить требуемый объем памяти и время на структурный анализ и планирование выполнения.
- Кэш справочника данных (Data Dictionary cache). Хранит пользовательскую информацию, привилегии, названия таблиц, типы данных, и так далее. Справочники данных помогают провести структурный анализ операторов SQL. «Узкие места» производительности справочника данных влияют на всех пользователей БД Oracle.
Программная Глобальная Область (Program Global Area, PGA) – это серверный процесс обслуживающий пользовательские процессы на стороне клиента. Область памяти PGA содержит данные и управляющую информацию серверных процессов Oracle. PGA хранит информацию о пользовательских сессиях, переменных сессии, сортировки, связанные переменные и т.д.
Для мониторинга базы и улучшения производительности Oracle, как правило, полагается на группу процессов, работающих в фоновом режиме и взаимодействующих между собой. Следующие процессы – только часть более длинного перечня процессов, работающих на уровне экземпляра БД (instance):
- Процесс записи в БД (DBWR). Отвечает за запись данных на диске.
- Процесс записи логов (LGWR). Отвечает за запись данных в логи.
- Процесс мониторинга системы (SMON). Отвечает за восстановление экземпляра БД, освобождение временных сегментов и объединение свободных областей.
- Монитор процессов (PMON). Отвечает за очистку умерших и зависших процессов.
- Процесс контроля (CKPT). Отвечает за предупреждение других процессов о контрольных точках и обновление релевантных файлов.
Пул Java используется лишь тогда, когда код Java применяется на уровне экземпляра базы, а Большой пул (Large Pool) не является обязательным. Если Большой пул все же задействован, он облегчает нагрузку на разделяемый пул.
Архитектура Oracle призвана обеспечить оптимальную производительность достижимую с помощью сведения к минимуму операций ввода/вывода. Мониторинг производительности и тюнинг должны показать, насколько задействованы все возможности в каждом конкретном случае.