Переход на Firebird 3.0. Многопользовательский режим

Материал из GedeminWiki
Перейти к: навигация, поиск

Зачем переходить? При работе с базами данных, размер которых составляет десятки Гб и более, основное узкое место в производительности сервера -- это операции ввода/вывода с дисковой подсистемой. Firebird использует диск для размещения базы данных и для записи временных файлов сортировки. Очевидное решение -- задействовать оперативную память. Но, в случае с Firebird 2.5 возникает дилемма: SuperServer позволяет использовать общий на все коннекты кэш страниц, однако, при этом выполнение запросов будет происходить в рамках одной нити и только на одном процессоре/ядре, сколько бы их ни было установлено в системе. ClassicServer позволяет распараллелить коннекты на разные процессоры, но при этом отсутствует общий кэш данных.

В 64-х разрядном Firebird 3 данные ограничения устранены. Теперь можно добиться значительного увеличения быстродействия (в нашей практике в 5-10 раз) за счет выделения кэша, сопоставимого с размером файла базы данных.

Реальный случай, на примере одного из наших клиентов. Размер файла базы данных составляет 60 Гб. Сервер базы данных содержит два 10-ти ядерных процессора и 128 Гб оперативной памяти. Мы установили следующее распределение оперативной памяти:

fb3_1.png

  1. 32 Гб для оперативной системы, выполняющихся процессов, файлового кэша оперативной системы
  2. 32 Гб под буфер сортировки сервера Firebird
  3. 64 Гб под кэш данных сервера Firebird

Использовались следующие параметры:

  • размер страницы 8192 байт
  • количество страниц в буфере 8 388 608
  • Forced Writes = ON

Были установлены следующие параметры в файле firebird.conf:

 DatabaseGrowthIncrement = 1024M

Чтобы не дергать лишний раз файловую систему при увеличении размера базы данных.

 FileSystemCacheThreshold = 10M

Разрешим операционной системе использовать свой файловый кэш для нашей базы данных. Число должно быть больше, чем размер буфера в страницах.

 FileSystemCacheSize = 20

Разрешим ОС использовать до 20% оперативной памяти под файловый кэш.

 TempBlockSize = 2M

Блоки памяти под сортировку будут увеличиваться на такую величину.

 TempCacheLimit = 32768M

32 Гб выделяем под буфер сортировки в оперативной памяти.

 AuthServer = Legacy_Auth
 AuthClient = Legacy_Auth
 UserManager = Legacy_UserManager
 WireCrypt = Disabled
 WireCompression = false

Устанавливаем режим безопасности максимально приближенный к тому, как было в версии 2.5, чтобы не нарушить работу всех существующих рабочих мест.

Если файл базы данных больше размера оперативной памяти

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

  • 8-16 Гб под операционную систему, программы, сервисы, файловый кэш ОС
  • 2/3 оставшейся памяти под кэш страниц базы данных
  • 1/3 -- под буфер сортировки

Далее, наблюдаем за работающей системой:

  • Если Windows Performance Monitor показывает значительное использование файла своппинга, следует увеличить количество памяти под нужды операционной системы.
  • Если в папке для временных файлов (операционной системы или той, что прописана в firebird.conf) появляются файлы сортировки (и, особенно, если их размер не 0), то следует увеличить размер буфера сортировки за счет уменьшения кэша страниц базы данных.

Порядок перехода на Firebird 3

Схема перехода на третью версию сервера Firebird:

fb3_2.png

Удаление сервера Firebird 2.5

Перед установкой новейшей версии сервера Firebird 3 следует остановить службу Firebird 2.5. Конечно, если у вас нет необходимости в одновременном использовании двух разных версий сервера. Такой случай подробно рассматривается ниже.

Если вы устанавливали сервер с помощью инстолятора, то остановить службу и деинсталировать сервер можно через панель управления Windows.

Если сервер Firebird 2.5 был установлен вручную, следует выполнить следующую последовательность действий:

  1. Открываем командную строку (Пуск - Выполнить - cmd)
  2. Переходим в папку сервера. В зависимости от места установки это может быть c:\program files\firebird. Команды:
    1. c:
    2. cd \program files
    3. cd firebird
  1. Выполняем команду: instsvc stop
  2. Выполняем команду: instsvc remove
  3. Выполняем команду: instreg remove
  4. Выходим из папки сервера: cd ..
  5. Удаляем папку

Установка и настройка сервера Firebird 3

Для установки вы можете скачать инстолятор с официального сайта или воспользоваться архивом с текущей ночной сборкой. Мы рекомендуем второй способ, так как официальный инстолятор обновляется не часто -- раз в 4-6 месяцев. Следует использовать 64-ти разрядную версию сервера.

  1. Скачиваем архив
  2. Распаковываем архив в новый каталог, например, c:\program files\fb3
  3. Переходим в этот каталог
  4. Скачиваем с сайта gsbelarus.com библиотеку gudf.dll и выкладываем ее в папку UDF сервера
  5. Настраиваем параметры сервера в файле firebird.conf
  6. Переходим в режим командной строки (cmd)
  7. Выполняем команду: instsvc install -a
  8. Выполняем команду: instreg install
  9. Выполняем команду: gsec -user sysdba -passw 1 -add SYSDBA -pw masterke
  10. Если при выполнении предыдущей команды возникла ошибка, то выполняем: gsec -user sysdba -passw 1 -modify SYSDBA -pw masterke
  11. Выполняем команду: instsvc start

Запуск программы

  1. Войдите в программу под учетной записью Administrator. (Может появиться сообщение, что сервер не настроен для работы с платформой Гедымин и предложение выполнить необходимую настройку. Следует согласиться и ввести логин SYSDBA и пароль masterkey)
  2. Дождитесь окончания процесса изменения структуры базы данных.
  3. В Исследователе перейдите в раздел Сервис - Администратор.
  4. Откройте окно Пользователи и на панели инструментов запустите команду Пересоздать учетные записи.
  5. Тщательно проверьте все режимы работы программы.

Одновременная работа двух версий сервера Firebird

  1. В файле firebird.conf присвойте параметру RemoteServicePort значение, отличное от номера порта по-умолчанию (3050). Например, RemoteServicePort = 3054
  2. При выполнении команд instsvc и instreg укажите с помощью параметра -n имя сервиса. Например, instsvc i -a -n fb3
  3. В строке подключения к базе данных укажите номер порта. Например, dbserver/3054:d:\bases\mybase.fdb

Изменение размера буфера для файла базы данных

Размер кэша задается при восстановлении базы данных из архива. В последствии его можно изменить с помощью параметра -buffers n утилиты командной строки gfix, которая находится в папке с выполняемыми файлами сервера Firebird. Пример вызова команды:

 gfix database_name -user SYSDBA -password masterkey -buffers 2000
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты