вторник, 19 марта 2019 г.

Последовательность старта MiniM Database Server

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

Старт сервера выполняется запуском сервиса независимо от того, какая программа выполняет этот запуск. В комплект MiniM Database Server входит дополнительная утилита MiniM Tray Icon, постоянно присутствующая в системном трее. С ее помощью можно запускать, перезапускать и останавливать сервис, но кроме нее сервис может быть запущен и остановлен любыми другими соответствующими средствами. Описание строки запуска см. в документации MiniM Advanced Guide. Кроме того, сервис MiniM может быть административно переведен в режим автоматического запуска при запуске компьютера, в этом случае запуск сервиса внутренние механизмы Windows выполняют автоматически самостоятельно.

При старте сервис читает настройки файлов minim.ini и minimdb.ini, определяет может ли он быть запущен или такой экземпляр уже запущен, рассчитывает размеры и создает объекты разделяемой памяти для внутренних данных сервера - кеши глобалов, рутин, блокировки, очереди записи и другие. Объекты разделяемой памяти создаются и используются с правами доступа, разрешающими другим процессам сервера независимо от пользовательского аккаунта обращаться к ним на чтение и запись. Два разных экземпляра MiniM Database Server создают разные наборы внутренних объектов разделяемой памяти, используя для них имена производные от имени экземпляра.

После создания объектов разделяемой памяти сервер выравнивает текущий счетчик транзакции. Счетчик является синтетическим и защищен от перевода даты и времени на компьютере. Процедура выравнивания использует журнальные записи для исключения коллизий. Подробнее внутренний механизм синтетического счетчика транзакций описан в статье How MiniM implements transaction sequence number.

Следующим шагом сервер запускает процесс инициализации баз данных. В случае если какая-либо база отмечена опцией AutoCreate, она пересоздается. При инсталляции по умолчанию такую опцию имеет временная база данных "TEMP".

После окончания процесса инициализации сервер запускает защитные потоки демонов: демон записи измененных блоков, демон расширения баз, демон записи очереди журнала и демон пересчета и выравнивания счетчиков производительности. Демон счетчиков работает самостоятельно, а демоны записи, расширения и журнала запускают дополнительные процессы и наблюдают за их работой. Каждый из демонов ведет собственные отметки во внутренних структурах сервера и в используемых файлах. В случае если по каким-то причинам процесс будет уничтожен, поток защиты запускает соответствующий процесс снова с опцией восстановления. Запускаемый процесс демона проводит восстановление внутренних структур и продолжает работу прозрачно для остальных процессов сервера.

Далее сервер определяет необходимость обслуживания входящих телнет-соединений. В случае если сервер настроен на обслуживание телнет клиентов, производится запуск потока ожидания входящих телнет соединений на указанный в настройках порт. При поступлении входящего телнет-соединения поток запускает для его обслуживания процесс MiniM, с опцией обслуживать устройство TNT, после чего снова переходит в режим ожидания и всю работу по обслуживанию телнет-клиента выполняет процесс MiniM.

Далее сервер запускает служебный поток защиты процессов. Этот поток ожидает входящий сообщений от процессов MiniM. Вне зависимости от способа запуска исполняющего процесса MiniM он посылает сообщение о себе этому потоку. Поток защиты запускает вторичные потоки слежения для каждого исполняющего процесса MiniM. Поток слежения ожидает завершения процесса. В случае если процесс был завершен с ошибкой, поток запускает процесс очистки. Процесс очистки проводит комплексную работу на внутренних структурах данных сервера, относящихся к защищаемому процессу. В случае если процесс прервал работу при незаконченной модификации страниц данных или остались не снятые блокировки, процесс очистки отменяет невыполненные действия и сервер продолжает работу так же как если бы защищаемый процесс самостоятельно прервал работу на шаг ранее сбоя, без отметок в общих данных сервера. Кроме того, при необходимости процесс очистки проводит откат незавершенных транзакций.

После того как демоны записи, расширения и журнала, демон счетчиков и демоны телнета и защиты запущены, сервер может запускать операции приводящие к модификации баз данных. Сейчас в эту последовательность входит две операции:
  • запуск процесса отката неподтвержденных транзакций
  • выполнение процедуры автозапуска
Оба эти процесса запускаются последовательно с ожиданием завершения. После чего сервер полностью готов к работе. Между процессами отката незавершенных транзакций и выполнением автозапуска сервис взводит собственное состояние в положение "Запущен", и служба сервисов уведомляет другие программы что сервис был запущен. Процесс выполнения автозапуска выполняется уже после взведения этого сигнала, как первый полностью рабочий процесс сервера, в полностью подготовленном состоянии.

Если администратор сервера обнаруживает проблему в работе сервера, он может, например, определить зависимости при запуске сервиса. Например, явно указать в настройках сервиса необходимость его запуска после служб обслуживания TCP/IP или других подсистем, используемых в процедуре автозапуска.

Комментариев нет:

Отправить комментарий