Настройка производительности базы данных
Максимальная производительность базы данных SberMobile Serverа - ключевой фактор высокой производительности всей инсталляции SberMobile. Вот краткий список советов по оптимизации общей производительности базы данных:
Настройка производительности пулов соединений базы данных
Дополнительный раздел определяет, как SberMobile Server управляет пулом соединений базы данных.
SberMobile Server использует библиотеку пулов соединений Java под названием c3p0, чтобы управлять соединениями базы данных. Настройки по умолчанию библиотеки c3p0 могут быть переопределены добавлением новых значений к файлу hibernate.properties,
расположенному в установочной папке SberMobile Serverа.
Вот пример содержимого файла hibernate.properties
:
|
Настройки конфигурации библиотеки c3p0 описаны здесь: https://www.mchange.com/projects/c3p0/. Все свойства c3p0 должны иметь префикс "hibernate.
".
Регулировка размера пула соединения с БД
В настройках БД SberMobile Server есть две опции, которые в значительной степени воздействуют на производительность системы:
- Минимальный размер пула соединений
- Максимальный размер пула соединений
Пул соединений - это кэш соединений БД, поддерживаемый базой данных так, чтобы соединения можно было повторно использовать, когда БД получит очередные запросы данных. Пулы соединений используются для увеличения производительности выполняемых команд на БД. |
Существует несколько правил для регулировки размера пула:
- Максимальный размер пула соединений должен быть больше количества одновременно подключенных устройств с высокой скоростью передачи данных (т.е. частые синхронизации или большое количество генерируемых устройством событий). Например, если отслеживаются 2000 устройств, которые опрашиваются один раз в час, можно назначить для максимального размера пула значение, равное 200, но если у Вас 500 устройств, синхронизируемых с сервером каждые 5 минут, лучше увеличить максимальный размер пула до 500.
- Максимальный размер пула должен быть ниже общего количества соединений, разрешенных БД для того, чтобы избежать генерируемых базой данных ошибок, таких как "слишком много соединений".
- Для крупных инсталляций, где пиковая активность значительно выше средней активности, рекомендуется увеличить минимальный размер пула до 20-50% от максимального размера пула.
Очистка базы данных
База данных SberMobile Server содержит преимущественно конфигурации и события. В то время как обычно объем данных конфигурации небольшой, и не увеличивается с течением времени, число событий (включая события изменения значений) может увеличиваться достаточно быстро, в следствии чего размер базы данных может составлять несколько гигабайтов.
Корректировка периодов хранения событий окажет влияние с течением времени, поэтому в некоторых случаях очистка базы данных вручную имеет смысл.
Чтобы установить объем и структуру базы данных, запустите действие Посмотреть статистику базы данных из корневого контекста. Это действие покажет Статистику события, т.е. количество событий в каждой таблице контейнеров событий и их распределение по типам и контекстам источника, а также общее число событий в каждой таблице.
Основная концепция очистки базы данных заключается в следующем:
Очистка любой таблицы базы данных SberMobile Server, которая содержит события в то время как сервер не работает, не помешает нормальной работе сервера. |
Это делает возможным очистку почти любой таблицы в базе данных SberMobile Server кроме ag_properties и других "специальных" таблиц, описанных в разделе Схема и взаимодействие базы данных. Настоятельно рекомендуем остановить сервер и сделать резервную копию базы данных перед очисткой любой таблицы событий. Еще одной опцией являются таблицы очистки с помощью действия Выполнить прямой запрос к СУБД без остановки сервера, т.е. применив DELETE * FROM ag_xxx_change
или похожий запрос обновления.
Очистка postgresql
Рекомендуемый цикл очистки для БД PostgreSQL DB - это выполнение vacuumlo() каждый час и vacuumdb() каждый день. Помогает сохранить оптимальный размер БД PostgreSQL:
|
|
Очистка блоба postgresql
Есть два варианта удаления устаревших блоб данных из базы данных.
Первый вариант - использовать комманду:
vacuumlo -U
USER
DATABASE
Заметьте, что в процессе очистки показатели производительности значительно упадут.
Второй вариант применяется к системам 24/7. Необходимо создать триггерную функцию и набор триггеров для таблиц:
|
Который будет активирован триггером:
|
Эта триггерная функция удалит все потерянные блобы из таблиц pg.largeobject_metadata и pg.largeobject после операции очистки в таблице ag_info. Есть возможность добавления таких триггеров как этот в другие таблицы вашей базы данных.