Переход на Firebird 3.0. Многопользовательский режим
Зачем переходить? При работе с базами данных, размер которых составляет десятки Гб и более, основное узкое место в производительности сервера -- это операции ввода/вывода с дисковой подсистемой. Firebird использует диск для размещения базы данных и для записи временных файлов сортировки. Очевидное решение -- задействовать оперативную память. Но, в случае с Firebird 2.5 возникает дилемма: SuperServer позволяет использовать общий на все коннекты кэш страниц, однако, при этом выполнение запросов будет происходить в рамках одной нити и только на одном процессоре/ядре, сколько бы их ни было установлено в системе. ClassicServer позволяет распараллелить коннекты на разные процессоры, но при этом отсутствует общий кэш данных.
В 64-х разрядном Firebird 3 данные ограничения устранены. Теперь можно добиться значительного увеличения быстродействия (в нашей практике в 5-10 раз) за счет выделения кэша, сопоставимого с размером файла базы данных.
Реальный случай, на примере одного из наших клиентов. Размер файла базы данных составляет 60 Гб. Сервер базы данных содержит два 10-ти ядерных процессора и 128 Гб оперативной памяти. Мы установили следующее распределение оперативной памяти:
- 32 Гб для оперативной системы, выполняющихся процессов, файлового кэша оперативной системы
- 32 Гб под буфер сортировки сервера Firebird
- 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:
Удаление сервера Firebird 2.5
Перед установкой новейшей версии сервера Firebird 3 следует остановить службу Firebird 2.5. Конечно, если у вас нет необходимости в одновременном использовании двух разных версий сервера. Такой случай подробно рассматривается ниже.
Если вы устанавливали сервер с помощью инстолятора, то остановить службу и деинсталировать сервер можно через панель управления Windows.
Если сервер Firebird 2.5 был установлен вручную, следует выполнить следующую последовательность действий:
- Открываем командную строку (Пуск - Выполнить - cmd)
- Переходим в папку сервера. В зависимости от места установки это может быть c:\program files\firebird. Команды:
- c:
- cd \program files
- cd firebird
- Выполняем команду: instsvc stop
- Выполняем команду: instsvc remove
- Выполняем команду: instreg remove
- Выходим из папки сервера: cd ..
- Удаляем папку
Установка и настройка сервера Firebird 3
Для установки вы можете скачать инстолятор с официального сайта или воспользоваться архивом с текущей ночной сборкой. Мы рекомендуем второй способ, так как официальный инстолятор обновляется не часто -- раз в 4-6 месяцев. Следует использовать 64-ти разрядную версию сервера.
- Скачиваем архив
- Распаковываем архив в новый каталог, например, c:\program files\fb3
- Проверяем, чтобы к каталогу Firebird был полный доступ
- Переходим в этот каталог
- Скачиваем с сайта gsbelarus.com библиотеку gudf.dll и выкладываем ее в папку UDF сервера
- Настраиваем параметры сервера в файле firebird.conf
- Переходим в режим командной строки (cmd). Для выполнения описанных инструкций интерпретатор командной строки cmd.exe должен быть запущен от имени администратора.
- Выполняем команду: instsvc install -a
- Выполняем команду: instreg install
- Выполняем команду: gsec -user sysdba -passw 1 -add SYSDBA -pw masterkey
- Если при выполнении предыдущей команды возникла ошибка, то выполняем: gsec -user sysdba -passw 1 -modify SYSDBA -pw masterkey
- Выполняем команду: instsvc start
Запуск программы
- Войдите в программу под учетной записью Administrator. (Может появиться сообщение, что сервер не настроен для работы с платформой Гедымин и предложение выполнить необходимую настройку. Следует согласиться и ввести логин SYSDBA и пароль masterkey)
- Дождитесь окончания процесса изменения структуры базы данных.
- В Исследователе перейдите в раздел Сервис - Администратор.
- Откройте окно Пользователи и на панели инструментов запустите команду Пересоздать учетные записи.
- Тщательно проверьте все режимы работы программы.
Одновременная работа двух версий сервера Firebird
- В файле firebird.conf присвойте параметру RemoteServicePort значение, отличное от номера порта по-умолчанию (3050). Например, RemoteServicePort = 3054
- При выполнении команд instsvc и instreg укажите с помощью параметра -n имя сервиса. Например, instsvc i -a -n fb3
- В строке подключения к базе данных укажите номер порта. Например, dbserver/3054:d:\bases\mybase.fdb
Изменение размера буфера для файла базы данных
Размер кэша задается при восстановлении базы данных из архива. В последствии его можно изменить с помощью параметра -buffers n утилиты командной строки gfix, которая находится в папке с выполняемыми файлами сервера Firebird. Пример вызова команды:
gfix database_name -user SYSDBA -password masterkey -buffers 2000