6. Настройка сервера РЕД Базы Данных

Для настройки сервера РЕД База Данных используется файл firebird.conf. Параметры, распространяющиеся на соединение (per-connection) перечитываются при каждом соединении. Все остальные параметры считываются при запуске сервера.

По умолчанию все параметры в файле конфигурации закомментированы. Для обозначения комментариев используется символ «#». Текст, следующий после символа «#», до конца строки является комментарием, например:

#комментарий
DefaultDbCachePages = 32768 #комментарий

Первое слово в строке, начинающейся не с символа комментария, считается названием параметра. Справа от имени параметра, после символа «=», указывается значение параметра.

В файле конфигурации присутствуют параметры трех типов:

  • Целочисленный;

  • Строковый;

  • Логический (булев).

Предупреждение

Значения параметров, определяющих объем памяти, указываются в байтах. В конце таких значений можно ставить сокращения k, m и g, соответствующие килобайтам, мегабайтам и гигабайтам.

Некоторые параметры помечены как настраиваемые для конкретных баз данных (per-database) или для подключений (per-connection). Настройки для баз данных задаются в файле databases.conf. Настройки для соединения - прежде всего клиентский инструмент и выполняется с помощью параметра isc_dpb_config в DPB (или, для Services, isc_spb_config). Обратите внимание на то, что настройки для баз данных могут выполняться при помощи DPB в случае Embedded сервера, при подключении к базе данных в первый раз.

Существует ряд предопределенных переменных, которые могут быть использованы в файлах конфигурации, где требуется имя каталога. Полный их список выглядит следующим образом:

  • $(root) – корневой каталог

  • $(install) – директория, куда установлена СУБД. Изначально $(root) и $(install) одинаковые. $(root) может быть переопределена установкой или изменением переменной окружения FIREBIRD, в таком случае эта переменная отлична от $(install).

  • $(this) – каталог, в котором находится текущий файл конфигурации.

  • $(dir_conf) – директория, где располагается firebird.conf и databases.conf.

  • $(dir_secdb) – директория, где располагается база данных безопасности по-умолчанию.

  • $(dir_plugins) – каталог расположения плагинов (plugins).

  • $(dir_udf) – директория, где располагаются функции UDF по-умолчанию (udf).

  • $(dir_sample) – каталог с примерами (examples).

  • $(dir_sampledb) – директория, где лежит пример базы данных (examples/empbuild).

  • $(dir_intl) – директория, в которой расположены международные модули (intl).

  • $(dir_msg) – каталог, где находится файл с сообщениями сервера firebird.msg. Обычно он совпадает с $(root), но может быть переопределен переменной окружения FIREBIRD_MSG.

  • $(dir_schedulerDb) – директория, где находится база данных планировщика заданий scheduler.fdb.

Один конфигурационный файл может включать другой с помощью директивы include:

include some_file.conf

Относительный путь представляет собой путь по отношению к текущему файлу конфигурации. Так, в примере выше файл /opt/config/master.conf ссылается на файл по пути /opt/config/some_file.conf.

Примечание

Директива include поддерживает групповые символы * и ?.

6.1. Общие настройки

DatabaseAccess

Параметр DatabaseAccess позволяет обеспечить управление безопасностью при доступе к файлам баз данных. Доступ к базам данных на сервере может быть полным (Full), ограниченным (Restrict) или запрещенным (None).

Параметр DatabaseAccess имеет строковый тип; по умолчанию значение параметра равно Full - полный доступ. Для того, чтобы запретить доступ, следует выставить значение параметра, равное None. Для ограничения доступа используется значение Restrict. В этом случае после слова Restrict указываются директории, в которых могут быть сохранены файлы баз данных.

При указании каталогов могут быть использованы как абсолютные, так и относительные пути. Относительные пути берутся от корневого каталога инсталляции сервера РЕД Базы Данных. В качестве разделителя директорий используется символ «;».

DatabaseAccess = None
DatabaseAccess = Restrict C:\DataBase
DatabaseAccess = Restrict C:\DataBase;D:\Mirror
DatabaseAccess = Restrict /db;/mnt/mirrordb
DatabaseAccess = Full

Предупреждение

Неконтролируемый доступ к базам данных может поставить под угрозу безопасность вашей системы. Поэтому настоятельно рекомендуется ограничивать директории для размещения баз данных.

RemoteAccess (per-database)

Параметр предоставляет или отменяет удаленный доступ к базам данных.

RemoteAccess = true

По-умолчанию RemoteAccess включен для всех баз данных, за исключением базы данных безопасности. Если вы намереваетесь использовать больше одной специализированной базы данных безопасности, то рекомендуем отключить удаленный доступ к ним в файле databases.conf.

Для повышенной безопасности следует отключить RemoteAccess в firebird.conf и включить его в databases.conf для некоторых отдельных баз.

Параметр имеет тип Boolean и может принимать значения true/false, 1/0 или Yes/No.

ExternalFileAccess (per-database)

Параметр ExternalFileAccess позволяет обеспечить управление правами на создание таблиц во внешних файлах. Разрешение на доступ к внешним файлам может быть полным (Full), ограниченным (Restrict) или запрещенным (None).

Параметр ExternalFileAccess имеет строковый тип; значение по умолчанию равно None - запрет на создание внешних таблиц. Для того, чтобы разрешить создание и доступ к внешним файлам, следует выставить значение параметра равным Full. Для ограничения доступа используется значение Restrict. В этом случае после слова Restrict указываются директории, в которых могут быть сохранены файлы внешних таблиц. При указании каталогов могут быть использованы как абсолютные, так и относительные пути. Относительные пути берутся от корневого каталога РЕД Базы Данных. В качестве разделителя директорий используется символ «;».

ExternalFileAccess = None
ExternalFileAccess = Restrict C:\DataBase
ExternalFileAccess = Restrict C:\DataBase;D:\Mirror
ExternalFileAccess = Restrict /db;/mnt/mirrordb
ExternalFileAccess = Full

Предупреждение

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

BackupAccess

Параметр BackupAccess задаёт список каталогов, в которых разрешено создание резервных копий БД. При создании резервных копий первым проверяется параметр BackupAccess. Если создание копий по указанному в параметре пути разрешено - создается заданный каталог (при необходимости - со всеми родительскими).

Параметр BackupAccess имеет строковый тип. Параметр может принимать значения: полный (Full), ограниченный (Restrict) или запрещенный (None). По умолчанию значение параметра равно Full - полный доступ. Для того, чтобы запретить доступ, следует выставить значение параметра, равное None. Для ограничения доступа используется значение Restrict. В этом случае после слова Restrict указываются директории, в которых могут быть сохранены файлы резервных копий БД.

При указании каталогов могут быть использованы как абсолютные, так и относительные пути. Относительные пути берутся от корневого каталога инсталляции сервера «РЕД База Данных». В качестве разделителя директорий используется символ «;».

BackupAccess = None
BackupAccess = Restrict C:\DataBase
BackupAccess = Restrict C:\DataBase;D:\Mirror
BackupAccess = Restrict /db;/mnt/mirrordb
BackupAccess = Full

UdfAccess

Предупреждение

В РЕД Базе Данных 5 UDF объявлены устаревшими и будут удалены в РЕД Базе Данных 6.

Параметр UdfAccess предназначен для определения директорий, в которых могут быть сохранены библиотеки UDF. Разрешение на доступ к библиотекам внешних функций может быть полным (Full), ограниченным (Restrict) или запрещенным (None).

Параметр UdfAccess имеет строковый тип; значение по умолчанию равно None (в предыдущих версиях значение по умолчанию было Restrict UDF).

При указании каталогов могут быть использованы как абсолютные, так и относительные пути. Относительные пути берутся от корневого каталога инсталляции сервера «РЕД База Данных». В качестве разделителя директорий используется символ «;».

UdfAccess = Restrict UDF

Предупреждение

Неконтролируемая возможность использования внешних функций может быть использована для того, чтобы поставить под угрозу безопасность как баз данных, так и всей системы. Поэтому настоятельно рекомендуется использовать данный параметр для ограничения директорий размещения udf-библиотек.

TempDirectories

С помощью параметра TempDirectories можно задать каталог, в котором сервер «РЕД База Данных» будет хранить временные данные, допускающие разбиение на части. Это кэш курсоров, буферов записей, undo-логов, а также временные BLOB, блоки сортировок, данные мониторинга.

Параметр TempDirectories имеет строковый тип; значение по умолчанию равно пустой строке. Если параметр TempDirectories не активен, то путь к временному каталогу определяется исходя из значения переменных окружения FIREBIRD_TMP, TEMP, TMP.

В качестве значения параметра может быть задан путь к одному или нескольким каталогам. Для папок допускаются как абсолютные, так и относительные пути. Относительные пути берутся от корневого каталога инсталляции сервера «РЕД База Данных». Если требуется определить несколько временных каталогов, то в качестве разделителя используется символ «;».

Если указана одна или несколько директорий, то выгрузка временных данных при сортировке будет осуществляться в указанные каталоги по очереди (если в текущей временной директории не осталось места, то временные файлы будут сохраняться в следующую по списку)

TempDirectories = c:\temp
TempDirectories = c:\temp;d:\temp
TempDirectories = /home/test
TempDirectories = /home/test;/home/test1

TempTableDirectory

Параметр TempTableDirectory задает каталог, в котором сервер «Ред База Данных» будет хранить данные временных таблиц и блобов. Если параметр не задан или указанный каталог недоступен, будет использован каталог из переменных окружения FIREBIRD_TMP, TEMP, TMP.

BlobTempSpace (per-database)

Параметр BlobTempSpace устанавливает место, в котором будут сохраняться данные BLOB. Параметр имеет логический тип. По умолчанию его значение равно false. Если значении равно true, то BLOB, для которых явно не задано хранилище, будут создаваться во временном пространстве (таком же, как для данных GTT). Если значение false, то BLOB, для которых явно не задано хранилище, будут создаются в файле базы данных. BLOB, созданные пользовательскими приложениями, не затрагиваются, даже если хранилище не указано в BPB.

BlobTempSpace = false

SeparateTempTableFiles (per-database)

Параметр SeparateTempTableFiles в файле конфигурации firebird.conf позволяет использовать для разных соединений разные файлы временных таблиц, чтобы уменьшить их разрастание. Оказывает влияние только при использовании архитектуры Super. Параметр имеет логический тип. По умолчанию его значение равно 1. В этом случае данные глобальных временных таблиц и временных BLOB будут размещаться в отдельном файле для каждого соединения. Если выставить значение параметра равным 0, то для всех соединений будет использоваться один файл.

SeparateTempTableFiles = 1

AuditTraceConfigFiles

Параметр AuditTraceConfigFile в файле конфигурации firebird.conf задает имя и расположение файла с настройками системного аудита. Этот параметр имеет строковый тип и по умолчанию указывает на fbtrace.conf. Пустое значение параметра означает, что системный аудит выключен.

Есть возможностью указания ссылок на другие конфигурационные файлы. Каждый из них имеет такую же структуру, что и fbtrace.conf, и на их основе создаются дополнительные системные сессии аудита. Имеются три таких набора конфигураций для раздельного аудита:

  • Производительности (fbtrace.conf)

  • Событий безопасности (fbtrace_sec.conf)

  • Действий пользователя SYSDBA (fbtrace_dba.conf)

AuditTraceConfigFiles = fbtrace.conf; fbtrace_sec.conf;

MaxUserTraceLogSize

Задает максимальный суммарный размер (в мегабайтах) временных файлов, создаваемых сессией пользовательской трассировки Services API. После прочтения временного файла приложением он автоматически удаляется. Параметр имеет целочисленный тип. Единица измерения - мегабайты. По умолчанию максимальный размер файла вывода ограничен 10 МБ. Если значения ограничения MaxUserTraceLogSize достигнуто, то сервер автоматически приостанавливает сессию слежения.

MaxUserTraceLogSize = 10

DefaultDbCachePages (per-database)

Параметр DefaultDbCachePages определяет количество страниц одной базы данных, которые могут одновременно находиться в кэше. По умолчанию SuperServer выделяет 32768 страниц для каждой базы данных, а Classic и SuperClassic по умолчанию выделяют 1024 страницы на каждое клиентское соединение для каждой базы данных.

При изменении данных параметров следует учитывать особенности аппаратно-программной платформы, других настроек сервера (TempBlockSize). Также, определение оптимальных для конкретной задачи настроек хэширования данных сервером «РЕД База Данных» может быть произведено экспериментальным путем.

Параметр имеет целочисленный тип. Единица измерения – страница базы данных. По умолчанию параметр имеет значение 32768. Максимальное значение 2147483647 страниц. Минимальное значение параметра – 0. Если значение параметра равно нулю, то сервер не будет выполнять кэширование страниц данных.

DefaultDbCachePages = 32768

DatabaseGrowthIncrement (per-database)

Параметр позволяет указать объем дискового пространства, которое может быть выделено под базу данных. Дисковое пространство резервируется в системе, что позволяет в дальнейшем снизить физическую фрагментацию файла (-ов) базы данных и дает возможность продолжить работу в условиях недостатка места на диске. Если режим резервирования включен, то сервер резервирует 1/16 часть от уже используемого дискового пространства для одного соединения, но не меньше 128 KB и не больше, чем значение, заданное параметром DatabaseGrowthIncrement (по умолчанию 128 MB).

Для отключения резервирования дискового пространства необходимо выставить значение DatabaseGrowthIncrement равным 0.

DatabaseGrowthIncrement = 134217728

Предупреждение

Пространство под теневые копии баз данных не резервируется.

FileSystemCacheThreshold (per-database)

Параметр FileSystemCacheThreshold устанавливает порог использования системного кэша сервером «РЕД База Данных» для архитектуры Cуперсервер. Значение параметра FileSystemCacheThreshold определяет максимально допустимое количество страниц, которые могут находиться в кэш-памяти одновременно. Системный кэш будет использоваться до тех пор, пока количество закэшированных страниц меньше, чем значение параметра FileSystemCacheThreshold.

Параметр FileSystemCacheThreshold учитывается, только если не задан параметр UseFileSystemCache.

Параметр имеет целочисленный тип. Единица измерения – страница базы данных (определяется при создании БД, может иметь размер от 4 до 32 Кб). По умолчанию параметр имеет значение - 65536 страниц. Максимально допустимое значение параметра – 2147483647. Минимальное значение параметра – 0. Если значение параметра FileSystemCacheThreshold равно 0, то сервер не будет использовать системный кэш.

FileSystemCacheThreshold = 65536

ValidatePageChecksums (per-database)

Параметр поддерживается начиная с версии РЕД Базы Данных 5.1.

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

Параметр имеет логический тип. По умолчанию значение true, то есть контрольные суммы на уровне страниц вычисляются.

ValidatePageChecksums = true

UseFileSystemCache (per-database)

Параметр UseFileSystemCache определяет использовать ли кэш файловой системы сервером «РЕД База Данных». Параметр имеет логический тип. Параметр FileSystemCacheThreshold учитывается, только если не задан параметр UseFileSystemCache.

UseFileSystemCache = true

InlineSortThreshold

Параметр InlineSortThreshold определяет, как обрабатываются неключевые поля во время сортировки: сохраняются внутри блока сортировки или повторно извлекаются со страниц после сортировки. Параметр имеет целочисленный тип. Значение параметра InlineSortThreshold определяет максимальный размер записей (в байтах), который может быть сохранен внутри блока сортировки. Если значение параметра InlineSortThreshold равно 0, то неключевые поля будут извлекаются со страниц после сортировки.

InlineSortThreshold = 1000

FileSystemCacheSize

Параметр FileSystemCacheSize устанавливает максимальный размер оперативной памяти, используемый системным файловым кэшем 64-битными Windows XP или Windows Server 2003 с Service Pack 1 или выше.

Параметр содержит целое число, представляющее собой количество (в процентах) оперативной памяти, которое может быть использовано под файловый кэш. Значение может быть от 10 до 95%. Если задать значение 0, операционная система сама будет определять размер файлового кэша. Это и есть значение по умолчанию.

FileSystemCacheSize = 0

Примечание

Windows требует обладания привилегией SeIncreaseQuotaPrivilege для управления настройками файлового кэша. Эта привилегия доступна по умолчанию администраторам и службам, а также выдается учетной записи firebird при установке из дистрибутива Windows Installer.

Если РЕД База Данных запущена как приложение или в режиме Embedded или установлен не из официального дистрибутива, учетная запись может не иметь данной привилегии. Процесс не выдаст ошибку при запуске, а просто запишет соответствующее сообщение в файл firebird.log и будет работать с настройками операционной системы.

RemoteFileOpenAbility

Параметр имеет логический тип. По умолчанию его значение равно 1. В этом случае сервер «РЕД База Данных» может открыть базу данных, только если она сохранена на физическом диске компьютера, на котором запущен сервер. Запросы на подключениях с базами данных, сохраненными на сетевых дисках, переадресовываются на сервер «РЕД База Данных», работающий на компьютере, которому принадлежит диск.

Это ограничение предотвращает возможность того, чтобы две различных копии сервера открыли одновременно одну и ту же базу данных. Нескоординированный доступ нескольких копий сервера к одной базе данных может привести к ее повреждению. Блокировка файла на системном уровне предотвращает нескоординированный доступ к файлу базы данных. Для отключения этой опции следует выставить значение параметра RemoteFileOpenAbility равным 0 (ложь).

Предупреждение

Этот параметр может вызвать неисправимое повреждение базы данных. Не используйте эту опцию, если вы не понимаете рисков потери данных.

Предупреждение

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

TempBlockSize

Параметр TempBlockSize используется для управления пространством временных каталогов. Временные каталоги используются для выгрузки результатов обработки больших объемов данных (например, при сортировке данных). Параметр TempBlockSize определяет минимальный размер блока, выделяемого на один запрос с сортировкой.

Параметр имеет целочисленный тип. Единица измерения - байты. По умолчанию параметр имеет значение 1048576 байт. Максимально допустимое значение 2147483647 байт. Минимальное значение параметра – 0.

TempBlockSize = 1048576

TempCacheLimit (per-database)

Параметр TempCacheLimit используется для ограничения объёма временного пространства, которое может быть кэшировано в оперативной памяти. В этом пространстве будут сохраняться данные сортировок, буферов записи, небольших временных блобов перед материализацией и т.д.

Параметр имеет целочисленный тип. В архитектуре Классик это ограничение на одно подключение и по умолчанию значение равно 8 Мб. В архитектуре Супер это ограничение на все подключения и по умолчанию значение равно 64 Мб. Максимально допустимое значение (\(2^{64} - 1\)) байт. Минимальное значение параметра равно 0.

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

TempCacheLimit = 67108864

MaxIdentifierByteLength (per-database)

Максимально допустимая длина имени идентификатора в байтах.

Установка этого значения для всех баз данных (включая базу данных безопасности) может вызвать проблемы.

MaxIdentifierByteLength = 252

MaxIdentifierCharLength (per-database)

Максимально допустимая длина имени идентификатора в символах.

Установка этого значения для всех баз данных (включая базу данных безопасности) может вызвать проблемы.

MaxIdentifierCharLength = 63

AuthServer/AuthClient (per-database/per-connection, per-database)

Параметр AuthServer - набор методов аутентификации, разрешенных на сервере (определяется в файле конфигурации сервера).

Параметр AuthClient - набор методов аутентификации, поддерживаемых клиентом (определяется в файле конфигурации на клиенте).

Включенные методы перечислены в виде строковых символов, разделенных запятыми, точками с запятой или пробелами. Если проверить подлинность с помощью первого метода не удалось, то сервер переходит к следующему и т.д. Если ни один метод не подтвердил подлинность, то пользователь получает сообщение об ошибке.

СУБД РЕД База Данных 5.0 поддерживает следующие методы аутентификации:

  • Безопасная парольная аутентификация использующая алгоритм хэширования SHA для передачи данных: Srp, Srp224, Srp256, Srp384, Srp512. По умолчанию используется Srp256;

  • Традиционная (Legacy_Auth) аутентификация;

  • Доверительная (Win_Sspi) аутентификация для ОС Windows;

  • Метод GostPassword обеспечивает аутентификацию с использованием алгоритмов шифрования из криптографического плагина (Crypto_API);

  • Плагин Certificate позволяет аутентифицировать пользователей по сертификатам X509;

  • Плагин VerifyServer позволяет клиенту проверить сертификат сервера;

  • Доверенная аутентификация через механизм GSSAPI (Gss);

  • Доверенная аутентификации для выполнения Execute Statement On External без указания логина и пароля (ExtAuth).

AuthServer = Srp256
AuthClient = Srp256, Srp, Win_Sspi, Legacy_Auth, Gss, ExtAuth

Если вы хотите использовать плагины аутентификации, которые не предоставляют ключа шифрования (Win_Sspi, Legacy_Auth, GostPassword, Gss), то следует отключить обязательное (Required) шифрование каналов передачи данных (параметр WireCrypt), кроме случаев, когда вы работаете с протоколом XNET.

Чтобы отключить какой-нибудь из методов, раскомментируйте строку и удалите нежелательный метод из списка.

Оба параметра могут быть использованы в databases.conf. AuthClient может использоваться как в DPB, так и в SPB для конкретных настроек соединения.

PolicyPlugin (per-database/per-connection, per-database)

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

Для включения политик безопасности укажите PolicyPlugin = Policy, тогда попытка пройти аутентификацию будет осуществляться для каждого плагина, указанного в AuthServer, а решение о предоставлении доступа будет принято плагином Policy.

PolicyPlugin =

UserManager (per-database)

Устанавливает плагин, который будет работать с базой данных безопасности. Это может быть список с пробелами, запятыми или точками с запятой в качестве разделителей: используется первый подключаемый модуль из списка. Всего существует четыре возможных плагина:

  • Srp;

  • Legacy_UserManager;

  • GostPassword_Manager;

  • Ldap.

Для поддержки старой базы данных безопасности и управления пользователями в ней, следует установить значение параметра Legacy_UserManager.

Для создания многофакторных пользователей и управления ими следует установить значение параметра GostPassword_Manager.

Для получения списка пользователей каталога LDAP с помощью псевдотаблицы SEC$USERS следует установить значение параметра Ldap.

В SQL операторах управления пользователями можно явно указать какой плагин будет использоваться.

UserManager = Srp

Примечание

Одноименные пользователи, созданные с помощью разных плагинов управления пользователями — это разные пользователи.

Параметр UserManager можно использовать в database.conf для переопределения в конкретной базе данных.

DefaultUserManagers (per-database)

Позволяет указать набор стандартных плагинов.

Если предложение USING PLUGIN не указано, то при создании пользователя он сам добавляется во все стандартные плагины (со всеми указанными атрибутами).

При изменении пароля пользователя он меняется во всех стандартных плагинах. Если в каком-либо стандартном плагине нет пользователя, то он добавляется.

Если меняется какой-либо другой атрибут, то он также меняется и в других стандартных плагинах, но если пользователь отсутствует, то он не создаётся.

При удалении пользователя он также удалится из всех стандартных плагинов.

Пример использования:

UserManager = Srp Legacy_UserManager GostPassword_Manager
DefaultUserManagers = Legacy_UserManager GostPassword_Manager

Значение по умолчанию:

DefaultUserManagers =

Примечание

Можно использовать только те плагины, которые были указаны в параметре UserManager

TrustedUser

Логин доверенного пользователя для аутентификации по паролю с именем другого пользователя. При коннекте кроме имени пользователя (isc_dpb_user_name) можно указать эффективный логин (isc_dpb_effective_login). В isql для этого добавлен ключ -l. Если задан этот логин, то после успешной аутентификации проверяется задан ли параметр конфигурации

  • Если не задан - ошибка аутентификации: попытка подмены логина с отключенной опцией.

  • Если параметр задан, но пользователь там указан другой - тоже ошибка: попытка подмены логина не доверенным пользователем.

  • Если пользователь в конфигурации совпадает с текущим, то есть подключается доверенный пользователь, то при подключении к БД его имя заменяется на указанный им эффективный логин. Для ядра СУБД это подключение будет выглядеть как обычное, информация о подмене логина до него не доходит.

Работает для всех плагинов аутентификации.

TracePlugin

Задает плагин, используемый функцией трассировки для отправки данных трассировки в приложение клиента или данных аудита в лог файл.

TracePlugin = fbtrace

WireCryptPlugin (per-connection)

Параметр определяет плагин, который будет использоваться для шифрования данных, передаваемых по сети.

WireCryptPlugin = ChaCha64, ChaCha, Arc4

По умолчанию данные шифруются с помощью ChaCha или Alleged RC4. Ключ должен быть сгенерирован плагином аутентификации. Для ChaCha используется 16 или 32 битный ключ, в зависимости от того, что предоставляет плагин аутентификации.

Указанный плагин может быть переопределен в API для конкретного соединения через DPB или SPB.

KeyHolderPlugin

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

Реализованного плагина по-умолчанию нет, но образец для Linux под названием libCryptKeyHolder_example.so можно найти в папке /plugins/.

LdapPlugin

Используется для получения информации об учетной записи с сервера LDAP вместо базы данных безопасности.

LdapLibrary

Общий каталог LDAP (только для Linux).

LdapLibrary = libldap-2.4.so.2

AllowEncryptedSecurityDatabase (per-database)

Этот параметр позволяет использовать зашифрованную базу данных безопасности.

Если полагаться на шифрование сетевого канала посредством ключа, сгенерированного плагином аутентификации (например, SRP), чтобы передавать ключи шифрования базы данных по этому каналу, то использование зашифрованных баз данных безопасности является своего рода порочным кругом. Для того, чтобы отправить ключ шифрования базы данных по сетевому каналу безопасным путем, канал должен быть уже зашифрован, но для этого требуется сетевой ключ шифрования от плагина аутентификации, которому необходимо открыть базу данных безопасности для проверки хэша, которая, в свою очередь, требует ключа шифрования БД. К счастью, в большинстве случаев нет необходимости шифровать базу данных безопасности - она неплохо защищена сама по себе, если вы используете криптостойкие пароли. Но в некоторых случаях желательно иметь зашифрованную базу данных безопасности, например, если кто-то хочет использовать в качестве собственной БД безопасности зашифрованную базу. В этом случае следует зашифровать ключ, прежде чем передавать его на сервер с помощью функции обратного вызова. Перед включением этого параметра убедитесь, что ваши ключи хорошо зашифрованы. Учтите, что при включении этой опции незашифрованная передача ключа может случиться даже с незашифрованной БД безопасности.

Эта функция не поддерживается традиционным плагином аутентификации - если вы заботитесь о безопасности, никогда не используйте традиционную аутентификацию.

AllowEncryptedSecurityDatabase = false

Providers (per-database, per-connection)

Провайдеры - это практически то, что мы подразумеваем под способами, используемыми для соединения клиента с сервером, т.е. через интернет; на том же компьютере через localhost; или через прямое соединение в локальной сети.

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

Providers = Remote,Engine13,Loopback

В databases.conf один или несколько провайдеров могут быть заблокированы, если вставить и раскомментировать строку из firebird.conf и удалить нежелательные провайдеры.

Провайдеры, реализованные в РЕД Базе Данных 5.0, позволяют поддерживать удаленные соединения, базы данных с разными ODS, а также замыкание (chaining) провайдеров. Замыкание - это термин для ситуации, когда провайдер использует обратный вызов стандартного API при выполнении операции над базой данных.

Главным элементом архитектуры провайдеров является y-valve. На начальном этапе вызова attach или create database y-valve просматривает список известных провайдеров и вызывает их по одному, пока один из них не завершит запрошенную операцию успешно. Для соединения, которое уже установлено, соответствующий провайдер вызывается сразу с почти нулевыми накладными расходами.

Рассмотрим пример работы y-valve, когда он выбирает подходящего провайдера при подключении к базе данных. По-умолчанию имеется три провайдера: Remote, Engine13, Loopback.

Типичная конфигурация клиента работает таким образом: при подключении к базе данных с именем RemoteHost: dbname (синтаксис TCP/IP) или \\RemoteHost\dbname (NetBios), провайдер Remote обнаруживает явный синтаксис сетевого протокола и перенаправляет вызов RemoteHost.

Когда <имя базы данных> не содержит сетевого протокола, а только имя базы данных, провайдер Remote отклоняет его, а провайдер Engine13 выходит на первый план и пытается открыть файл с именованной базой данных. Если это проходит успешно, создается подключение к базе данных.

Но что происходит, если СУБД возвращает ошибку при попытке подключения к базе данных?

  • Если файл базы данных, к которому нужно подключиться, не существует, то в этом нет интереса.

  • Встроенное соединение может не работать, если пользователь, подключившийся к нему, не имеет достаточных прав для открытия файла базы данных. Это было бы обычной ситуацией, если бы база данных не была создана этим пользователем во встроенном режиме или если ему явно не были предоставлены права ОС на встроенный доступ к базам данных.

  • После отказа провайдера Engine13 в получении доступа к базе данных, пытается подключиться провайдер Loopback. Он не очень отличается от Remote, за исключением того, что он пытается получить доступ к именованной базе данных <dbname> на сервере c сетевым интерфейсом «внутренней петли» (loopback) в сетевом протоколе TCP/IP.

Архитектура провайдеров делает возможным доступ к старым базам данных при переходе на более высокую версию РЕД Базы Данных.

DeadlockTimeout (per-database)

Значение параметра DeadlockTimeout определяет, сколько секунд будет ждать менеджер блокировок после возникновения конфликта до его разрешения.

Параметр имеет целочисленный тип. Единица измерения - секунды. Значение по умолчанию равно 10 секунд. Минимально допустимое значение параметра равно 0. Максимально допустимое значение равно 2147483647.

Предупреждение

Слишком большое значение параметра может ухудшить производительность системы.
DeadlockTimeout = 10

StatementTimeout (per-database)

Это количество секунд, по истечении которых выполнение оператора будет автоматически прекращено движком. Ноль означает, что время ожидания не установлено. Значение по умолчанию равно 0.

StatementTimeout = 0

ConnectionIdleTimeout (per-database)

Это количество минут, по истечении которых бездействующее соединение будет отключено движком. Ноль означает, что время ожидания не установлено. Значение по умолчанию равно 0.

ConnectionIdleTimeout = 0

ConnectionSuspendTimeout (per-database)

Предупреждение

Начиная с версии РЕД Базы Данных 5.0.3 параметр недоступен.

Параметр ConnectionSuspendTimeout устанавливает количество секунд, по истечении которых сессия бездействующего пользователя будет заблокирована. Если задан параметр ConnectionIdleTimeout, то значение ConnectionSuspendTimeout не должно его превышать. По умолчанию период блокировки отключен, то есть ConnectionSuspendTimeout = 0.

ConnectionSuspendTimeout = 0

MaxUnflushedWrites (per-database)

Параметр MaxUnflushedWrites определяет, как часто страницы из кэш памяти будут выгружаться на жесткий диск (активен только при значении параметра ForcedWrites=Off).

Значение параметра MaxUnflushedWrites определяет максимальное количество не выгруженных на диск страниц, накопившихся в кэш-памяти до подтверждения транзакции.

Параметр имеет целочисленный тип и измеряется в страницах. Значение по умолчанию равно 100 страниц. Для не Win32 систем значение по умолчанию является -1(Отключено). Максимально допустимое значение равно 2147483647.

MaxUnflushedWrites = 100

Предупреждение

Чем больше значение параметра, тем выше вероятность потери данных при возникновении аппаратного сбоя в системе.

MaxUnflushedWriteTime (per-database)

Параметр MaxUnflushedWriteTime определяет, как часто страницы из кэш памяти будут выгружаться на жесткий диск (активен только при значении параметра ForcedWrites=Off).

Значение параметра MaxUnflushedWriteTime определяет время, по истечении которого страницы данных, ожидающие подтверждения транзакции в кэш-памяти, будут выгружены на диск.

Параметр имеет целочисленный тип и измеряется в секундах. Значение по умолчанию равно 5 секунд. Для не Win32 систем значение по умолчанию является -1 (Отключено). Максимально допустимое значение равно 2147483647.

MaxUnflushedWriteTime = 5

Предупреждение

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

BugcheckAbort

Опция BugcheckAbort определяет, прерывать ли работу сервера при возникновении внутренней ошибки (значение 0) или снимать дамп ядра для последующего анализа (значение 1).

Параметр имеет логический тип. Возможные значения 0 и 1. Значение по умолчанию равно 1.

BugcheckAbort = 0

ClearGTTAtRetaining (per-database)

Операторы COMMIT RETAINING и ROLLBACK RETAINING сохраняют данные в глобальных временных таблицах объявленных как ON COMMIT DELETE ROWS. В версиях 2.x была ошибка: COMMIT RETAINING и ROLLBACK RETAINING делали записи не видимыми для текущей транзакции. Для возврата поведения 2.x установите параметр ClearGTTAtRetaining равным 1.

RelaxedAliasChecking

Параметр RelaxedAliasChecking позволяет снять ограничение на использование псевдонимов имен таблиц в запросах. Использование псевдонимов имен таблиц позволяет выполнять подобные запросы:

SELECT TABLE.X FROM TABLE A

Параметр имеет логический тип. Значение по умолчанию равно 0. Если значение параметра равно 1, то ограничение на использование псевдонимов таблиц в запросах снимается.

RelaxedAliasChecking = 0

ReadConsistency

Параметр обеспечивает согласованность чтения данных для запросов в режиме READ COMMITTED. При запуске такого запроса для него делается снимок версий, который будет использоваться запросом для чтения данных. В этом режиме флаги транзакций rec_version / no_rec_version не действуют: любой READ COMMITTED транзакции по умолчанию назначаются режимы read consistency record version; значение no_rec_version молча игнорируется.

ReadConsistency = 1

DefaultIsolationLevel (per-database)

Параметр DefaultIsolationLevel определяет уровень изоляции транзакций по умолчанию. Может принимать одно их трёх значений: SNAPSHOT, SNAPSHOT TABLE STABILITY, READ COMMITTED. По умолчанию установлено значение SNAPSHOT.

DefaultIsolationLevel = SNAPSHOT
Таблица 6.1 Совместимость параметров DefaultIsolationLevel и ReadConsistency

DefaultIsolationLevel

ReadConsistency

Уровень изоляции

SNAPSHOT

1

SNAPSHOT

SNAPSHOT

0

SNAPSHOT

SNAPSHOT TABLE STABILITY

1

SNAPSHOT TABLE STABILITY

SNAPSHOT TABLE STABILITY

0

SNAPSHOT TABLE STABILITY

READ COMMITTED

1

READ COMMITTED READ CONSISTENCY

READ COMMITTED

0

READ COMMITTED NO RECORD_VERSION

ConnectionTimeout (per-connection)

С помощью параметра ConnectionTimeout устанавливается ограничение на время ожидания соединения. После того как порог, установленный значением параметра, будет превышен, попытка соединения будет признана неудачной.

Параметр ConnectionTimeout имеет целочисленный тип и измеряется в секундах. Значение по умолчанию равно 180 секунд. Минимальное значение равно 0. Максимально допустимое значение равно 2147483647.

ConnectionTimeout = 180

WireCrypt (per-connection)

Параметр устанавливает, следует ли шифровать сетевое соединение. Он может принимать три возможных значения: Required, Enabled, Disabled. По-умолчанию установлено, что шифрование является обязательным (Required) для подключений, поступающих на сервер и включенным (Enabled) для подключений, исходящих с сервера.

WireCrypt = Enabled (for client) / Required (for server)

Чтобы получить доступ к серверу с использованием более старой клиентской библиотеки, параметр WireCrypt в файле конфигурации сервера должен быть включен (Enabled) или выключен (Disabled).

Правила очень просты: если на одной стороне стоит значение WireCrypt = Required, а на другой установлено значение Disabled, то первая сторона отклоняет соединение и оно не устанавливается. Если на одной стороне стоит значение WireCrypt = Enabled, то на другой шифрования может и не быть вовсе.

Отсутствующий подключаемый модуль WireCrypt или ключ шифрования в случаях, когда канал должен быть зашифрован, также препятствует соединению.

Во всех остальных случаях соединение устанавливается без шифрования, если хотя бы одна сторона имеет WireCrypt = Disabled. В других случаях устанавливается шифрованное соединение.

Таблица 6.2 Совместимость параметров WireCrypt на клиенте и на сервере

DISABLED

ENABLED

REQUIRED

DISABLED

Шифрование отключено

Шифрование отключено

Ошибка соединения

ENABLED

Шифрование отключено

Шифрование включено, если плагин аутентификации предоставляет ключ шифрования. Иначе шифрования нет.

Шифрование включено, если плагин аутентификации предоставляет ключ шифрования. Иначе ошибка подключения.

REQUIRED

Ошибка соединения

Шифрование включено, если плагин аутентификации предоставляет ключ шифрования. Иначе ошибка подключения.

Шифрование включено, если плагин аутентификации предоставляет ключ шифрования. Иначе ошибка подключения.

WireCompression (per-connection)

Параметр включает или отключает сжатие сетевого трафика.

По-умолчанию параметр отключен.

WireCompression = false

Параметр настраивается только для клиента - сервер должен следовать настройкам клиента, если он подключен по правильному протоколу (> = 13)

DummyPacketInterval (per-connection)

Параметр DummyPacketInterval используется для того, чтобы установить число секунд ожидания в «тихом» режиме, прежде чем сервер начнет посылать пустые пакеты для подтверждения соединения.

Параметр имеет целочисленный тип и измеряется в секундах. Значение по умолчанию равно 0 секунд. Максимально допустимое значение равно 2147483647 секунд.

DummyPacketInterval = 0

В Windows это - единственный способ обнаружить и разъединить неактивных клиентов при использовании XNET или IPC протоколов.

Сервер «РЕД База Данных» использует опцию разъема SO_KEEPALIVE, чтобы следить за активными подключениями по TCP/IP протоколу. Если вас не устраивает заданное по умолчанию 2-часовое время ожидания (keepalive), то следует изменить параметры настройки своей операционной системы соответственно:

В операционных системах семейства Posix отредактируйте файл:

/proc/sys/net/ipv4/tcp_keepalive\_*.

DefaultTimeZone

Часовой пояс сеанса или клиента.

Если параметр не установлен, то часовой пояс сеанса будет тем же, что используется операционной системой.

При установке значения на сервере он определяет часовой пояс сеанса по умолчанию для подключений.

Когда он установлен на клиенте, он определяет часовой пояс по умолчанию, используемый функциями API на стороне клиента.

RemoteServiceName/RemoteServicePort (per-connection)

Параметры RemoteServiceName и RemoteServicePort используются для установки номера порта или имени сервиса, которые будут использоваться для клиентских баз данных.

Параметр RemoteServiceName имеет строковый тип. Значение по умолчанию равно gds_db.

Параметр RemoteServicePort имеет целочисленный тип. Значение по умолчанию равно 3050.

RemoteServiceName = gds_db
RemoteServicePort = 3050

Предупреждение

Изменять следует только один из этих параметров, не оба сразу. Сервер ищет номер порта для клиентских соединений в следующем порядке – сначала RemoteServiceName (соответствующая значению параметра запись ищется в файле «services»), затем RemoteServicePort.

RemoteAuxPort (per-connection)

Параметр RemoteAuxPort определяет номер TCP-порта, который будет использоваться для передачи уведомлений о событиях сервера.

Параметр RemoteAuxPort имеет целочисленный тип. Значение по умолчанию равно 0. В этом случае номер порта будет выбираться случайно.

RemoteAuxPort = 0

Предупреждение

Для сервера «РЕД База Данных» архитектура Классик номер порта в любом случае будет выбираться случайно, независимо от значения параметра RemoteAuxPort.

TcpRemoteBufferSize

Параметр TcpRemoteBufferSize определяет размер TCP/IP пакета для обмена сообщениями между сервером и клиентом. Чем больше размер пакета, тем больше данных будет передаваться за одну передачу.

Параметр имеет целочисленный тип и измеряется в байтах. Значение по умолчанию равно 8192. Минимально допустимое значение равно 1448. Максимальное значение равно 32767.

TcpRemoteBufferSize = 8192

TcpNoNagle (per-connection)

Параметр TcpNoNagle используется для настройки пакетов в TCP/IP сетях. В Linux по умолчанию библиотека сокетов минимизирует количество физических записей путем буферизации записей перед фактической передачей данных. Для этого используется встроенный алгоритм, известный как Nagles Algorithm. Он был разработан, для того, чтобы избежать проблем с маленькими пакетами в медленных сетях.

Параметр имеет логический тип. По умолчанию значение параметра равно 1 (истина). В этом случае буферизация не используется. На медленных сетях в Linux это позволяет увеличить скорость передачи.

TcpNoNagle = 1

IPv6V6Only

Позволяет установить параметр сокета IPV6_V6ONLY. Включение параметра ограничивает использование сокета исключительно протоколом IPv6; для IPv4 и IPv6 должны использоваться отдельные сокеты. По умолчанию установлено значение false.

По-умолчанию, сервер прослушивает пустой IPv6 адрес (::) и принимает все входящие подключения, будь то IPv4 или IPv6 (IPv6V6Only = false). Если параметр установлен в true, сервер, прослушивая явно или неявно пустой IPv6 адрес, принимает только IPv6 подключения.

Адреса IPv6 отображаются как восемь четырёхзначных шестнадцатеричных чисел (то есть групп по четыре символа), разделённых двоеточием. В строке подключения необходимо заключать IPv6 адрес в квадратные скобки, чтобы разрешить неоднозначность с использованием двоеточия в качестве разделителя между IP адресом хоста и путем к базе данных. К примеру:

connect '[2014:1234::5]:test';
connect '[2014:1234::5]/3049:/srv/firebird/test.fdb';

RemoteBindAddress

Параметр RemoteBindAddress указывает адрес сетевого интерфейса, с которого будут разрешены входящие подключения. При этом все входящие соединения через другие сетевые интерфейсы будут запрещены.

Параметр имеет строковый тип. По умолчанию его значение равно пустой строке (разрешены соединения с любого сетевого интерфейса).

RemoteBindAddress =

LockMemSize (per-database)

Значение параметра LockMemSize определяет объем памяти, которая будет выделена менеджеру блокировок. В архитектуре Классик данный параметр используется для начального распределения, далее таблица расширяется динамически до предела памяти. В архитектуре Супер значение параметра определяет начальное распределение и предел выделяемой памяти.

Параметр имеет целочисленный тип. Единица измерения – байты. Значение по умолчанию равно 1048576 байт. Минимальное значение равно 0.

Максимально допустимое значение равно 2147483647.

LockMemSize = 1048576

Размер таблицы блокировок влияет на:

  1. Размер кэша страниц базы данных. Страница, помещенная в кэш, блокируется, как минимум, один раз, страницы, которые читаются несколькими клиентами, могут блокироваться несколько раз (архитектура Классик).

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

  3. События. Механизм оповещения о событиях основывается на блокировках. Число событий и число клиентов, ожидающих эти события, влияют на размер таблицы блокировок.

LockAcquireSpins (per-database)

В архитектуре сервера классик только одно клиентское соединение может обратиться к таблице блокировки в одно и то же время. Доступ к таблице блокировки управляется с помощью mutex(а). Mutex может быть затребован в условном, либо безусловном режиме. Если mutex затребован в условном режиме, то ожидание является отказом, и запрос должен повториться. В безусловном режиме mutex будет ожидаться до тех пор, пока не будет получен.

Параметр LockAcquireSpins имеет целочисленный тип. Его значение устанавливает количество попыток, которые будут сделаны в условном режиме. По умолчанию значение параметра равно 0, в этом случае будет использоваться безусловный режим.

Предупреждение

Параметр имеет эффект только на SMP (симметричных мультипроцессорных) системах.
LockAcquireSpins = 0

LockHashSlots (per-database)

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

Параметр имеет целочисленный тип. По умолчанию значение параметра равно 65521. В качестве значения рекомендуется указывать простое число, чтобы хэш-алгоритм производил хорошее распределение.

LockHashSlots = 65521

Увеличение значения данного параметра необходимо только при высокой загрузке (одновременно с ним следует увеличить и параметр LockMemSize на тот же процент). Он вычисляется с использованием утилиты Lock Print по следующему принципу.

Запускаем утилиту

rdb_lock_print -d <database> | <alias>

В группе заголовка блока (LOCK_HEADER BLOCK), которая описывает основную конфигурацию и состояние таблицы блокировок, смотрим значение элемента Hash lengths (длина цепочки хэширования). Этот элемент сообщает минимальную, среднюю и максимальную длину цепочки слотов. Чем длиннее будут цепочки, тем медленнее будет работать менеджер блокировок. Если среднее значение больше 3 или максимальное больше 10, то это означает, что слотов недостаточно. Поэтому следует увеличить параметр LockHashSlots в 2-3 раза (при этом взять простое число).

Примечание

Для применения параметра необходимо, чтобы сервер пересоздал таблицу блокировок (при этом в системе не должно остаться подключений и старой таблицы блокировок).

EventMemSize (per-database)

Значение параметра EventMemSize определяет объем разделяемой памяти, которая будет выделена менеджеру событий.

Параметр EventMemSize имеет целочисленный тип. Единица измерения – байты. Значение по умолчанию равно 65356. Минимально допустимое значение равно 0. Максимальное значение равно 2147483647.

EventMemSize = 65536

OptimizationStrategy

Значение параметра OptimizationStrategy определяет стратегию оптимизации запросов. Параметр имеет строковый тип. Может принимать следующие значения:

  • default - используется стратегия по умолчанию (является значением по умолчанию);

  • first - для запросов выбирается такой план доступа, который позволяет максимально быстро получить первые записи в выборке;

  • all - для запросов выбирается такой план доступа, который предполагает, что в запросе будут выбраны все записи.

OptimizationStrategy = default

SnapshotsMemSize (per-database)

Кол-во памяти для хранения снапшотов. Оно будет расти автоматически, если вы не используете экзотическую платформу, которая не является ни Windows, ни поддерживает системный вызов mmap. Каждый активный shapshot использует 16 байтов памяти.

SnapshotsMemSize = 64K

ClientBatchBuffer

Определяет размер буфера, используемого клиентским подключением для пакетной передачи на сервер (при использовании пакетного API).

ClientBatchBuffer = 131072

DataTypeCompatibility

Задает уровень совместимости, определяющий, какие типы данных доступны клиентскому API. В настоящее время доступны два варианта: 3.0 и 2.5. Режим эмуляции 3.0 скрывает типы данных, появившиеся после версии 3.0, а именно DECIMAL и NUMERIC с точностью 19 и выше, DECFLOAT, TIME WITH TIME ZONE, TIMESTAMP WITH TIME ZONE). Соответствующие значения возвращаются через типы данных, поддерживаемые версией 3.0. Режим эмуляции 2.5 преобразует ещё и тип данных BOOLEAN. Этот параметр позволяет устаревшим клиентским приложениям работать с версией 5.0 без перекомпиляции для обработки новых типов данных.

DataTypeCompatibility =

OutputRedirectionFile

Позволяет перенаправлять потоки сервера stdout/stderr в пользовательский файл. По умолчанию эти потоки открываются сервером, но выходные данные отбрасываются.

OutputRedirectionFile = " "

TipCacheBlockSize (per-database)

Количество выделяемой памяти для кэша каждого блока TIP. Понизьте это значения, если у вас небольшой TIP и вы хотите сберечь память. Увеличьте это значение, если вам нужен очень большой кэш и ограничения доступа к объектам ядра, выделенным для каждого блока (файлы, мьютексы и т. д.). Каждая кэшированная транзакция использует 8 байтов памяти.

TipCacheBlockSize = 4M

OnDisconnectTriggerTimeout (per-database)

Параметр OnDisconnectTriggerTimeout устанавливает число секунд, по истечении которых выполнение триггера на событие DISCONNECT будет прекращено. Параметр имеет целочисленный тип. Значение по умолчанию равно 180. Значение 0 означает, что время выполнения триггера на событие DISCONNECT не ограничено.

OnDisconnectTriggerTimeout = 180

SecurityLog

Параметр SecurityLog определяет, где регистрировать события безопасности. Возможные значения параметра:

  • local - регистрировать события безопасности в локальных логах сервера (firebird.log, журналы аудита);

  • syslog - регистрировать события безопасности в syslog;

  • both - регистрировать события безопасности в локальных логах сервера (firebird.log, журналы аудита) и в syslog.

SecurityLog = local

MaxStatementCacheSize

Определяет максимальный объем памяти, используемый для кэширования неиспользуемых скомпилированных операторов DSQL. Значение ноль означает, что кэширование не используется. Значение по умолчанию - 2 мегабайта.

MaxStatementCacheSize = 2Мб

DefaultProfilerPlugin

Определяет плагин профайлера по умолчанию, используемый для профилирования с помощью пакета RDB$PROFILER.

DefaultProfilerPlugin = Default_Profiler

OptimizeForFirstRows

Определяет стратегию оптимизации запросов: ускорить получение первых строк или всех.

Значение false соответствует стратегии ALL ROWS, а true соответствует стратегии FIRST ROWS.

По умолчанию оптимизатор направлен на получение всех строк.

OptimizeForFirstRows = false

OuterJoinConversion

Определяет, может ли оптимизатор преобразовывать OUTER-соединения в INNER-соединения при условии, что такое преобразование возможно с точки зрения результатов запроса.

По умолчанию включено. Может быть отключено для упрощения процесса миграции, если OUTER-соединения намеренно используются в SQL-запросах (например, в качестве подсказок оптимизатора), даже если известно, что они семантически эквивалентны INNER-соединениям.

OuterJoinConversion = true

SubQueryConversion

Параметр определяет, следует ли объединять подзапросы IN/ANY/EXISTS с внешним запросом с помощью алгоритма semi-join, если такое преобразование возможно.

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

SubQueryConversion = true

LoginLockoutTime

Параметр LoginLockoutTime устанавливает время в минутах, на которое будет заблокирован пользователь, если количество неудачных попыток аутентификации превышает значение MAX_FAILED_COUNT, заданное в политике безопасности.

Параметр LoginLockoutTime работает, только если настроено использование политик безопасности.

По умолчанию LoginLockoutTime = 0, что означает постоянную блокировку. Разблокировать пользователя можно с помощью оператора RESET USER. Выполнить этот оператор может только пользователь, обладающий административными привилегиями в БД безопасности.

LoginLockoutTime = 0

6.2. Настройки ядра

CpuAffinityMask

Параметр CpuAffinityMask позволяет указать, какие процессоры будут использоваться сервером (для ОС Windows).

Предупреждение

Параметр имеет эффект только в SMP (симметричных мультипроцессорных) системах.

Параметр имеет целочисленный тип. Значение параметра соответствует элементам битового массива, в котором каждый бит представляет центральный процессор. Таким образом, чтобы использовать только первый процессор, значение параметра должно быть равно 1. Чтобы использовать и центральный процессор 1, и центральный процессор 2 - 3. Чтобы использовать центральный процессор 2, и центральный процессор 3 - 6. Значение по умолчанию равно 0.

При наличии в системе производительных (Performance) и энергоэффективных (Efficient) ядер, значение параметра по умолчанию означает использование сервером только производительных ядер (для Windows 10 и выше).

CpuAffinityMask = 0

GCPolicy (per-database)

Параметр GCPolicy используется для управления работой «сборщика мусора». Параметр имеет строковый тип. Возможные значения параметра:

  • background - сборщик мусора работает как фоновый, собирая мусор в отдельном потоке;

  • cooperative - сборщик мусора работает в оперативном режиме, собирая мусор немедленно при чтении мусорных версий;

  • combined - сборщик мусора работает в оперативном режиме, но если мусор собрать не удается, то о замусоренных страницах сигнализируется фоновому сборщику мусора.

По умолчанию в архитектуре Супер сервера «сборщик мусора» работает в комбинированном режиме. В архитектуре Классик сервера этот параметр игнорируется, а «сборщик мусора» всегда работает в оперативном режиме.

GCPolicy = combined

SecurityDatabase (per-database)

Определяет имя и расположение базы данных безопасности, в которой хранятся имена пользователей и пароли, используемые сервером для проверки удаленных подключений.

По-умолчанию в firebird.conf:

SecurityDatabase = $(dir_secDb)/security5.fdb

Параметр может быть переопределен для определенной базы данных в файле databases.conf.

6.3. Настройки для многопоточной работы

MaxParallelWorkers

Максимальное количество параллельных потоков, которое может создать ядро. Этот параметр работает только для рестора (не для бэкапа). Для рестора параллельная обработка реализована только при построении индексов. По умолчанию MaxParallelWorkers = 1, т.е. параллельное создание индексов отключено, даже если в ресторе задан ключ -PAR.

Допустимые значения: от 1 до 64. Другие значения будут проигнорированы и по умолчанию использоваться 1.

MaxParallelWorkers = 8

ParallelWorkers

Число потоков, используемых рестором по умолчанию, если не задана опция -PAR <n> в gbak.

Допустимые значения: от 1 до MaxParallelWorkers. Другие значения будут проигнорированы и по умолчанию использоваться 1.

ParallelWorkers = 4

6.4. Настройки для Windows-систем

GuardianOption

Параметр определяет должен ли Guardian перезапускать сервер после того, как его работа была завершена неправильно.

Параметр имеет логический тип. Значение по умолчанию равно 1 (истина). Для того, чтобы отключить Guardian следует выставить значение параметра равным 0 (ложь).

GuardianOption = 1

ProcessPriorityLevel

Параметр определяет уровень приоритетов процессов сервера «РЕД База Данных». Параметр имеет целочисленный тип и может принимать значения:

  • 0 – нормальный приоритет;

  • положительное значение – повышенный приоритет;

  • отрицательное значение – пониженный приоритет.

Предупреждение

Все изменения данного параметра должны быть тщательно проверены, чтобы гарантировать, что сервер продолжает обрабатывать запросы.
ProcessPriorityLevel = 0

IpcName

Параметр IpcName определяет имя области разделяемой памяти используемой в качестве транспортного канала в локальном протоколе. Параметр имеет строковый тип. Значение по умолчанию равно FIREBIRD.

IpcName = FIREBIRD

Предупреждение

Сервер может регистрировать объекты в пространстве имен Global, только если он выполняется под учетной записью с привилегией SE_CREATE_GLOBAL_NAME. Это означает, что, если вы работаете под ограниченной учетной записью в Vista, XP SP2 или 2000 SP4, возможность использования локального протокола для других сеансов будет недоступна.

6.5. Настройки для Unix/Linux систем

Redirection

Параметр Redirection используется для отключения защиты от переадресации запросов на другие сервера. Возможность переадресации запросов на другие серверы изначально присутствовала в InterBase. Но она была исключена корпорацией Borland в InterBase 6.0 после доработки добавившей SQL-диалекты. Возможность перенаправления запросов была восстановлена в Firebird 2.0. Но на сегодняшний день использование этой возможности (прокси сервер) представляет угрозу безопасности. Например, вы используете защищенный сервер «РЕД База Данных», доступ к которому осуществляется из глобальной сети. В этом случае, если у сервера есть доступ к локальной сети, то он будет исполнять роль шлюза для входящих запросов типа:

firebird.your.domain.com:internal_server:/private/database.fdb

При этом злоумышленнику достаточно знать имя или IP-адрес хоста вашей локальной сети, потому что для соединения не требуется знать логин и пароль на внешнем сервере. Такой шлюз позволяет обойти систему сетевой защиты, установленную в вашей локальной сети.

Параметр имеет логический тип. Значение по умолчанию равно 0 (ложь). В этом случае возможность перенаправления запросов отключена. Для включения этой опции следует значение параметра выставить равным 1 (истина).

Redirection = 0

6.6. Настройки архитектуры

ServerMode

Определяет архитектуру сервера.

  • Super: исключительно один серверный процесс обслуживает все подключения, используя потоки для обработки запросов; общий пул для всех соединений; общий кэш страниц на уровне базы.

  • Superclassic: базы данных открываются одним серверным процессом, но доступ не исключительный - embedded процесс может открыть одновременно ту же базу; подключения обрабатываются потоками, запущенными из общего пула, каждый из которых имеет свой собственный страничный кэш базы данных.

  • Classic: отдельный процесс на каждое соединение с БД; каждая база данных может быть открыта несколькими процессами (включая локальные для embedded доступа); отдельный кэш страниц на каждое соединение

ServerMode = Super

6.7. Настройки пула внешних подключений

ExtConnPoolSize

Устанавливает максимальное количество бездействующих соединений в пуле внешних соединений. Допустимые значения от 0 до 1000. Нулевое значение обозначает что пул выключен.

ExtConnPoolSize = 0

ExtConnPoolLifeTime

Устанавливает время жизни бездействующих соединений в пуле внешних соединений. Допустимые значения от 1 секунды до 24 часов (86400 секунд).

ExtConnPoolLifeTime = 7200

MemoryWipePasses

Параметр MemoryWipePasses используется для настройки необходимости и метода обезличивания освобождаемой сервером оперативной памяти и дискового пространства.

Предупреждение

При необходимости обезличивания памяти требуется указывать полный сетевой путь при соединении с БД.

Параметр имеет целочисленный тип. Значение по умолчанию равно 0, это означает, что обезличивание памяти отключено. Возможные значения:

  • 0 — обезличивание не происходит;

  • 1 — происходит обнуление памяти;

  • >1 — происходит чередование записи 0xFF и 0x00 в освобождаемую память, последний проход при этом в любом случае заполняет блок нулями.

MemoryWipePasses = 0

MaxOpenFileBlobs

Параметр MaxOpenFileBlobs ограничивает число одновременно открытых файлов BLOB. Когда количество открытых файлов достигнет этого предела, некоторые из них будут закрыты. Нулевое значение означает, что предела нет.

MaxOpenFileBlobs = 0

6.8. Настройки LDAP

LDAPServer

Задаёт адрес сервера LDAP, используемый для хранения учётной информации пользователей. Можно указать несколько серверов, используя ";" в качестве разделителя. При неуспешном подключении будет выполнена попытка соединиться со следующим сервером в списке. По умолчанию задано пустое значение, т.е. сервер LDAP не используется, и учётная информация ищется только в БД безопасности.

LDAPServer = 192.168.1.1

LDAPConnectionRetries

Параметр LDAPConnectionRetries задаёт максимальное количество попыток подключения к серверам, указанным в LDAPServer. Попытка считается неуспешной, если не удалось подключиться ни к одному серверу из списка. Минимальное значение равно 1. По умолчанию задано LDAPConnectionRetries = 3.

LDAPConnectionRetries = 3

LDAPDomain

Задаёт имя домена, в котором происходит аутентификация. Если аутентификация выполняется методом bind, то СУБД сначала попытается подключиться с именем пользователя в том виде, в котором его передал клиент (например, Ivan.Petrov). Если таким способом подключиться не получилось, то при заданном параметре LDAPDomain СУБД сделает bind ещё раз с именем пользователя в формате <имя пользователя>@<значение LDAPDomain> (например, Ivan.Petrov@example.com).

Также ветка, определяемая доменом в параметре LDAPDomain, будет использована как база для поиска пользователей, если не задан параметр LDAPUserBase.

LDAPDomain = example.com

LDAPEncryption

Тип шифрования, используемый при подключении к серверу LDAP. Может принимать три значения: None, SSL, TLS.

  • None – незащищённое подключение к порту 389.

  • SSL – подключение к LDAP через SSL к порту 636.

  • TLS – подключение с TLS-шифрованием к порту 389.

По умолчанию используется незащищённое подключение.

Сертификат сервера LDAP будет проверяться, если параметр VerifyLdapServer не отключен.

LDAPEncryption = None

VerifyLdapServer

Включает или отключает проверку сертификата сервера LDAP при включении LDAPEncryption.

VerifyLdapServer = 1

LDAPUserDN

DN пользователя, от имени которого сервер будет подключаться к LDAP для аутентификации других пользователей. Этот пользователь должен иметь права на чтение атрибутов LDAP, используемых сервером «РЕД База Данных». Если параметр не задан, сервер будет делать bind к LDAP с именем и паролем пользователя, указанным клиентом, чтобы пройти аутентификацию.

LDAPUserDN = uid=rdb,ou=people,dc=example,dc=com
LDAPUserDN = cn=rdb,cn=users,dc=example,dc=com

LDAPPassword

Пароль пользователя, определенного в атрибуте LDAPUserDN, от имени которого сервер будет подключаться к LDAP для аутентификации других пользователей.

LDAPPassword = 123qwe

LDAPUserBase

Ветка в LDAP, которая будет использована как стартовая для поиска пользователей. При аутентификации имена пользователей будут искаться в этой ветке и рекурсивно во всех ветках, находящихся в ней до первого совпадения. Также она будет использована для поиска пользователей при получении их групп или атрибутов.

Если этот параметр не задан, то в качестве базы для поиска пользователей будет использована ветка, определяемая доменом в параметре LDAPDomain.

LDAPUserBase = ou=people,dc=example,dc=com
LDAPUserBase = cn=users,dc=example,dc=com

LDAPUserPrefix

Название атрибута, в котором хранится имя пользователя в его DN в LDAP. В основном используется, когда не задан LDAPUserDN. Если параметр не задан, клиентская библиотека fbclient будет шифровать пароль пользователя и для аутентификации будут использоваться пароли в атрибутах: "rdbPassword"; "rdbSrpVerifier"; "rdbSrpSalt"; "rdbSecurePassword"; "rdbPasswordAlgorithm".

LDAPUserPrefix = uid
LDAPUserBase = cn

LDAPUserFilter

Фильтр для поиска учетных записей пользователей. Здесь шаблон %u будет заменен на имя пользователя, указанное в процессе аутентификации.

LDAPUserFilter = &(objectClass=user)(cn=%u)
LDAPUserFilter = uid=%u

LDAPGroupBase

Ветка в LDAP, которая будет использована как стартовая для поиска групп пользователей. Поиск групп будет выполняться рекурсивно. Группы пользователя будут преобразованы в его роли на сервере.

LDAPGroupBase = ou=group,dc=example,dc=com
LDAPGroupBase = cn=users,dc=example,dc=com

LDAPMembershipFilter

Фильтр, который будет использован при поиске в LDAP групп, к которым принадлежит пользователь.

Существует три основные схемы, используемые в LDAP для указания членства в группах. В соответствии с используемой схемой нужно формировать фильтр. В нём в качестве имени предполагаемого пользователя указывается шаблон %u, а в качестве DN пользователя указывается %d. Если указано пустое значение, принадлежность пользователя к группам не определяется.

LDAPMembershipFilter = memberUid=%u
LDAPMembershipFilter = member=cn=%u,cn=users,dc=example,dc=com
LDAPMembershipFilter = member=%d

LDAPUserCertificate

Атрибут LDAP, в котором будет храниться сертификат пользователя. Если данный параметр задан, то при многофакторном подключении сертификат, предъявленный пользователем, должен соответствовать его сертификату в LDAP (если настроены параметры подключения к LDAP-серверу). Сертификат должен храниться в двоичном формате (DER).

LDAPUserCertificate = userCertificate;

LDAPPasswordSync

Данный параметр задаёт синхронизацию пароля пользователя в БД безопасности и в LDAP. Здесь перечисляются атрибуты, которые должны меняться в LDAP при смене пароля пользователя в БД безопасности. Допускается указание через «;» следующих атрибутов:

  • rdbPassword — традиционный пароль пользователя в СУБД «РЕД База Данных»;

  • rdbSecurePassword — защищённый пароль пользователя в СУБД «Ред База Данных»;

  • userPassword — пароль пользователя, используемый обычно в UNIX-системах;

  • sambaLMPassword — пароль пользователя, используемый SAMBA-протоколом;

  • rdbSrpVerifier — пароль пользователя для метода Srp;

  • sambaNTPassword — пароль пользователя, используемый SAMBA-протоколом.

По умолчанию выполняется синхронизация всех паролей.

LDAPPasswordSync = rdbPassword;userPassword

LDAPReadOnly

Заданный параметр может перевести LDAP-сервер в режим только для чтения (значение 1). Тогда параметр LDAPPasswordSync будет игнорироваться. По умолчанию используется значение 0.

LDAPReadOnly = 0

6.9. Настройки безопасности

LoginFailureDelay

Задаёт время в секундах, на которое задерживается подключение к БД безопасности. Задержка добавляется, когда количество неудачных попыток для конкретного пользователя превышает максимальное число неудачных попыток (на данный момент 4) или когда общее количество неудачных попыток входа для всех пользователей превышает максимальное число одновременных сбоев (на данный момент 16). Счетчик неудачных попыток сбрасывается, если в указанном интервале нет сбоев входа в систему.

LoginFailureDelay = 8

ServerCertificate

Задаёт алиас сертификата, которым сервер будет удостоверять свою подлинность клиенту. Этот сертификат должен быть связан с соответствующим закрытым ключем. Алиас — это строка, в которой через запятую перечислены имя владельца сертификата (SubjectCN), издатель сертификата (IssuerCN) и серийный номер сертификата в шестнадцатеричном виде. Сервер будет искать такой сертификат в хранилище пользователя, от имени которого он запущен и в хранилище компьютера.

ServerCertificate = test,Test Center CRYPTO-PRO,143dd54900020002b231

ServerPrivatePin

В этом параметре задаётся пароль закрытого ключа из ключевого контейнера, используемого сервером. Если закрытый ключ не защищён паролем, указывается пустая строка.

ServerPrivatePin = mypass

TrustedCertificate

Указывает алиас доверенного сертификата. Если пользователь предъявляет сертификат, совпадающий с доверенным, для этого сертификата не выполняется верификация, а пользователь может указывать своё имя без пароля. По умолчанию доверенный сертификат не указан.

TrustedCertificate = test,Test Center CRYPTO-PRO,143dd54900020002b231

CertUsernameDN

Задаёт название атрибута в секции Subject у сертификата, который содержит имя владельца. По умолчанию используется атрибут CN.

CertUsernameDN = CN

CertUsernamePattern

Здесь указывается регулярное выражение в синтаксисе SQL, которое используется для извлечения имени пользователя из атрибута владельца в сертификате. По умолчанию указывается пустая строка, что означает использование значения атрибута целиком.

CertUsernamePattern = [a-zA-Z0-9.]+

VerifyCertificateChain

Указывается нужно ли выполнять проверку цепочки сертификации предъявленного пользователем сертификата. Чтобы проверка могла быть выполнена, сервер должен иметь доступ к центру, выдавшему сертификат пользователя или доступ к локальному списку отзыва сертификатов. По умолчанию используется значение 1, т.е. проверка включена.

VerifyCertificateChain = 1

TraceAuthentication

Включает/отключает запись отладочных сообщений о процессе многофакторной аутентификации в firebird.log.

TraceAuthentication = 0

HashesFile

Для того, чтобы включить контроль целостности файлов сервера, необходимо указать имя файла с хэш-суммами подконтрольных файлов сервера «РЕД База Данных». Относительный путь берется от корневой директории сервера.

Параметр имеет строковый тип. Значение по умолчанию равно hashes.

Предупреждение

Алгоритмы хэширования зависят от используемого криптоплагина.
HashesFile = hashes

IntegrityCheckInterval

Задает интервал времени регулярной проверки целостности файлов. Нулевое значение параметра отключает регулярную проверку. Параметр имеет целочисленный тип и измеряется в секундах. Значение по умолчанию равно 0.

Предупреждение

Этот параметр не будет работать без параметра, указанного в HashesFile.
IntegrityCheckInterval = 10

IntegrityShutdownAttempts

Задает количество попыток прекратить работу СУБД безопасными средствами в случае несовпадения хэшей. Параметр имеет целочисленный тип. Значение по умолчанию равно 5.

Предупреждение

Этот параметр не будет работать без параметра, указанного в IntegrityCheckInterval.
IntegrityShutdownAttempts = 2

GssServerKeyfile

Устанавливает путь к файлу ключа, которым сервис СУБД аутентифицируется в Kerberos. По умолчанию путь не задан.

KrbServerKeyfile = /etc/krb5.keytab

GssServiceName

Устанавливает название сервиса СУБД на сервере Kerberos. По умолчанию установлено следующее значение:

GssServiceName = rdb_server

GssHostName

Устанавливает имя хоста сервера СУБД для аутентификации через GSS. По умолчанию используется localhost.

GssHostName =

GSSLibrary

Поддерживается также библиотека libvas-gssapi.so от One Identity Authentication Services. При её использовании СУБД после аутентификации определяет группы, назначенные пользователю в домене, и назначает ему одноимённые роли, существующие в базе данных.

GSSLibrary = libgssapi_krb5.so

Classpath

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

Classpath = ["/path/to/jars", "myjar"]

Этот параметр можно настроить отдельно для каждой базы данных. Значения указанные в Classpath в databases.conf добавляются к значениям указанным в firebird.conf. Если список jar для какой-либо базы данных нужно полностью заменить, то нужно использовать опцию OverrideClasspath в databases.conf.

6.10. Настройка с учетом оборудования и нагрузки на СУБД

На производительность СУБД могут повлиять следующие параметры:

FileSystemCacheThreshold

Для архитектуры классик рекомендуется установить это значение больше страничного кэша, чтобы включить кэширование на уровне файловой системы. Для архитектуры суперсервер при наличии достаточного объема оперативной памяти также рекомендуется установить это значение больше страничного кэша. Если памяти недостаточно, то лучше выключить кэширование на уровне файловой системы, установив значение FileSystemCacheThreshold в 0.

FileSystemCacheSize

В Windows при избыточном использовании памяти под файловый кэш рекомендуется ограничить это использование, установив значение данного параметра, например в 60%.

LockHashSlots

Большая длина хэш-таблицы блокировок, позволяющая за счет небольшого увеличения объема памяти под эту таблицу, ускорить работу с ней. Для архитектуры классик рекомендуется значение 65521. Для архитектуры суперсервер рекомендуется значение 30011.

TempBlockSize

Минимальный размер блока сортировки и шаг его расширения при необходимости. Позволяет несколько ускорить работу алгоритма сортировки за счёт выделения памяти большими блоками. При наличии больших сортировок рекомендуется увеличить значение параметра до 2097152.

TempCacheLimit = 4194304000

Максимальный размер временного пространства, который может быть закэширован. При наличии достаточного объема памяти позволяет хранить в ней (вместо выгрузки на диск) результаты сортировок, выгрузок blob-ов и т.д. Т.к. у каждого процесса сервера собственный кэш, может потреблять большие объемы памяти на классической архитектуре.

Значение параметра TempCacheLimit рекомендуеся сделать больше суммарного размера временных файлов в каталогах TempDirectories. При наличии свободной памяти можно увеличить значение параметра и понаблюдать за эффектом с помощью аудита.

DeadlockTimeout = 100

Если известно, что архитектура приложения не допускает дедлоков, можно увеличить этот параметр чтобы сервер не сканировал таблицу блокировок каждые 10 секунд при подозрении на потенциальный дедлок. Количество сканирований и найденных дедлоков отображается в заголовке rdb_lock_print. Если первый параметр значительно больше нуля, а второй - очень близок к нему, значит характер работы прикладной части предполагает ситуации блокировок, которые дедлоками не являются, но вынуждают СУБД выполнять их поиск. В этом случае можно увеличить значение DeadlockTimeout чтобы сервер не выполнял лишнюю работу.

DefaultDbCachePages = 32768

Количество страниц, используемых процессом в качестве кэша. Classic и SuperClassic выделяют 1024 страницы на каждое клиентское соединение для каждой базы данных. Увеличение позволяет до определенной степени сократить обмен данными с диском. Т.к. у каждого процесса классика будет собственный кэш, нужно учитывать общее потребление памяти. Значительное увеличение обычно не даёт эффекта.

По умолчанию SuperServer выделяет 32768 страниц для каждой базы данных. Для архитектуры суперсервер значение параметра рекомендуется рассчитать по формуле:

\[\texttt{DefaultDbCachePages} = \frac{\texttt{MemorySize}}{\texttt{4*PageSize}},\]

где MemorySize - общий объём памяти;

PageSize

Объём страницы. Для архитектуры классик значение параметра рекомендуется рассчитать по формуле:

\[\texttt{DefaultDbCachePages} = \frac{\texttt{MemorySize}}{\texttt{4*ConnNum*PageSize}},\]

где MemorySize - общий объём памяти; PageSize - объём страницы; ConnNum - предполагаемое максимальное количество соединений.

LockAcquireSpins = 100

Позволяет при недоступности мьютекса на таблицу блокировок не усыплять запрашивающий его процесс (дорогостоящая операция), а проверять этот мьютекс на доступность указанное количество раз перед усыплением. При большом количестве процессов с короткими блокировками (OLTP-нагрузка) позволяет несколько увеличить производительность сервера за счет более активного использования CPU.

Для архитектуры классик при большом значении Mutex wait в выводе rdb_lock_print (>20 %) рекомендуется включить эту настройку и после перезагрузки сервера посмотреть уменьшится ли значение Mutex wait.

WireCrypt = Disabled

Отключает шифрование сетевого трафика.

LockMemSize

Значение параметра определяет объем памяти, которая будет выделена менеджеру блокировок. Для архитектуры классик рекомендуется значение 20971520. Для суперсервера изменять не требуется.

6.11. Настройка Linux

Для увеличения допустимого числа процессов СУБД и количества открытых ими файлов:

  • в /lib/systemd/system/firebird.service лимитам LimitNPROC и LimitNOFILE необходимо установить значение 10000

  • параметр ядра vm.max_map_count необходимо увеличить до 256000, написав в /etc/sysctl.conf строку:

    vm.max_map_count=256000
    
  • для systemd-систем в /usr/lib/systemd/firebird.service:

    Environment = FIREBIRD_TMP=/path/to/tmp
    

При наличии достаточного объема RAM можно смонтировать в память временный каталог, куда сервер будет выгружать файлы:

  • дописать в /etc/fstab строку

    tmpfs /tmp tmpfs size=32G 0 0
    

    где 32G - максимальный размер, до которого может расшириться временный каталог в памяти;

  • Настроить Transparent Huge Pages:

    echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
    echo madvise >/sys/kernel/mm/transparent_hugepage/defrag
    

    создать файл /etc/rc.d/rc.local, добавить в него:

    echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
    echo madvise > /sys/kernel/mm/transparent_hugepage/defrag
    

    после чего выполнить:

    chmod u+x /etc/rc.d/rc.local
    

6.12. Настройка работы с Java методами

Предупреждение

Механизм java-security устарел и будет удален в РЕД Базе Данных 6.

В «РЕД База Данных» реализована возможность создания внешних процедур, функций и триггеров с использованием языка программирования Java. Они могут располагаться в jar-файлах. В «РЕД База Данных» для работы с этими файлами используется движок JavaEngine, который позволяет запускать функции, процедуры и триггеры на платформе Java.

Для их использования необходимо установить JRE не ниже 11. А также настроить параметры взаимодействия сервера «РЕД База Данных» с виртуальной машиной Java.

В firebird.conf необходимо указать путь к JAVA_HOME:

JavaHome = /usr/lib/jvm/java-8-openjdk-amd64

В plugins.conf, который расположен в корневом каталоге установки сервера, необходимо раскомментировать секции относящиеся к JavaEngine и указать путь до каталога с jar-файлами (переменная JarDirs):

Plugin = JAVA {
   Module = $(dir_plugins)/javaengine
   Config = JAVA_config
}

Config = JAVA_config {
   JavaHome = /usr/lib/jvm/java-openjdk
   SecurityDatabase = $(this)/java-security.fdb
   JvmArgsFile = $(this)/jvm.args
   JarDirs = $(this)/jar
}

Внутренние классы, необходимые для JavaEngine, находятся в папке /jar установки сервера.

Классы, содержащие методы, которые будут использоваться в качестве тела внешних процедур, функций и триггеров, необходимо скопировать в каталог, указанный в переменной JarDirs в виде jar-файла.

Классы в файловой системе доступны всем базам данных, обрабатываемыми процессом RDB. По аналогии с сервером приложений они являются системными классами.

Более подробно о взаимодействиях с Java методами из базы данных описано в Руководстве по SQL.

6.13. Переменные окружения, служебные и временные файлы

Переменные окружения

Клиентские приложения РЕД Базы Данных могут использовать переменные среды для установки параметров программы. Эти переменные должны быть установлены таким образом, чтобы они были доступны приложению во время его работы.

Следующий список содержит краткое описание этих переменных и их использование:

ISC_USER

Имя пользователя базы данных по умолчанию. Если этот параметр установлен, имя пользователя можно не указывать при подключении к базе данных через клиентские приложения и при запуске различных утилит (gfix, gbak, gstat и др.).

Устанавливается в паре с ISC_PASSWORD (пользователь с таким именем и паролем должен быть заранее создан в базе данных).

set ISC_USER = Hermes
ISC_PASSWORD

Пароль пользователя базы данных по умолчанию. Если этот параметр установлен, пароль пользователя можно не указывать при подключении к базе данных через клиентские приложения и при запуске различных утилит (gfix, gbak, gstat и др.).

Устанавливается в паре с ISC_USER (пользователь с таким именем и паролем должен быть заранее создан в базе данных).

set ISC_PASSWORD = Ichneumon
FIREBIRD

Корневой каталог сервера РЕД Базы Данных.

Если РЕД База Данных устанавливается (или копируется) в каталог, отличный от каталога по умолчанию (в POSIX - /opt/RedDatabase), указание переменной среды FIREBIRD помогает клиентскому приложению связаться с правильным экземпляром сервера.

set FIREBIRD = C:\mydir\RedDatabase
export FIREBIRD = /mydir/RDB
FIREBIRD_LOCK

Каталог с файлами таблицы блокировок [1]_. По умолчанию все служебные файлы размещаются в одном каталоге. Для Windows это каталог C:\ProgramData\reddatabase, а для POSIX – /tmp/reddatabase. Доступ к этому каталогу ограничен правами файловой системы.

Предупреждение

Все процессы, которые открывают один и тот же файл базы данных должны работать с одним и тем же FIREBIRD_LOCK. Несоблюдение этого правила гарантирует повреждение файла базы. По этой причине лучше никогда не менять местоположение по умолчанию разделяемых служебных файлов. Если вы хотите это сделать – воспользуйтесь символическими ссылками (утилиты mklink на Windows или ln для POSIX).

set FIREBIRD_LOCK = C:\mydir\RedDatabase\lockfiles
FIREBIRD_MSG

Каталог, где находится файл с сообщениями сервера firebird.msg. Обычно он находится в корневом каталоге установки сервера (в POSIX - /opt/RedDatabase), но может быть переопределен этой переменной окружения.

set FIREBIRD_MSG = C:\mydir\RedDatabase\msg
FIREBIRD_TMP, TEMP, TMP

Каталог с временными файлами [2]_. Если не заданы параметры конфигурации TempDirectories и TempTableDirectory, СУБД РЕД База Данных создаёт временные файлы в каталоге, задаваемом переменными окружения FIREBIRD_TMP, TEMP, TMP (в этом порядке), Если ни одна из этих переменных не установлена, то по умолчанию временные файлы создаются в каталоге c:\temp (Windows) или /tmp (POSIX). На Windows процессы сервиса РЕД Базы Данных используют, как правило, системный каталог временных файлов (C:\Windows\TEMP).

set FIREBIRD_TMP = C:\RDBTEMP
LC_CTYPE

Устанавливает системную кодировку (см. UNIX-утилиту locale). Она считывается при запуске сервера и утилит и используется для конвертирования системной кодировки в UTF-8 (например различных путей).

export LC_CTYPE=ru_RU.UTF-8
ISC_MSGS

Задаёт полный путь к файлу firebird.msg. Обычно он находится в корневом каталоге установки сервера (в POSIX - /opt/RedDatabase).

set ISC_MSGS = C:\mydir\RedDatabase\msg\firebird.msg
ICU_TIMEZONE_FILES_DIR

Задаёт путь к папке с файлами, которые содержат актуальные часовые пояса (timezone). По умолчанию это каталог tzdata в корневом каталоге установки сервера (в POSIX - /opt/RedDatabase/tzdata).

export ICU_TIMEZONE_FILES_DIR = /mydir/RDB/timezone
ISC_PATH

Задаёт путь к каталогу базы данных по умолчанию для автоматического подключения на удаленном сервере.

В ней указывается полный путь к нужному каталогу, включая имя хоста.

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

set ISC_PATH = localhost:D:\Databases
VISUAL, EDITOR

Переменные для работы в isql.

В них указывается команда вызова редактора или полный путь к редактору, который открывается для команды edit; в isql.

По умолчанию - vi в POSIX и Notepad в Windows.

export EDITOR = kate
ISQL_HISTSIZE

Переменная для работы в isql.

В интерактивном режиме работы isql история команд пишется в файл. По умолчанию максимальный размер истории ограничен 1000 строк. Изменить это ограничение можно с помощью этой переменной среды. В пакетном режиме история не пишется.

set ISQL_HISTSIZE = 2000
ENV_AUTH_CERT_ALIAS

Алиас сертификата пользователя для аутентификации на клиенте.

Если алиас сертификата явно не задан при подключении к базе данных через клиентское приложение, то он может быть считан из этой переменной.

Устанавливается в паре с ENV_AUTH_STORE_PIN (если PIN необходим).

set ENV_AUTH_CERT_ALIAS = test,Test Center CRYPTO-PRO,143dd54900020002b231
ENV_AUTH_STORE_PIN

PIN (пароль закрытого ключа), если он необходим для получения закрытого ключа сертификата пользователя для аутентификации на клиенте.

Устанавливается в паре с ENV_AUTH_CERT_ALIAS.

set ENV_AUTH_STORE_PIN = 123456
RDB_OID_TOKEN

Токен для аутентификации по протоколу OpenIDConnect.

Если токен не задан при подключении к базе данных через клиентское приложение, то он может быть считан из этой переменной.

set RDB_OID_TOKEN = "<токен>"

Служебные файлы

Для работы РЕД Базы Данных может требоваться достаточно большое пространство на диске для размещения временных и служебных файлов.

В основном, суммарный размер разделяемых служебных файлов СУБД РЕД База Данных не превышает сотен мегабайт – единиц гигабайт. Достаточно надёжная оценка сверху – от пяти до десяти гигабайт.

Все служебные файлы размещаются в одном каталоге. Для Windows это каталог C:\ProgramData\reddatabase, а для POSIX – /tmp/reddatabase. Доступ к этому каталогу ограничен правами файловой системы.

Все служебные и временные файлы СУБД РЕД База Данных используют префиксы rdb_ или rdbЧИСЛО_, где ЧИСЛО – сокращённый номер версии (50).

В категорию служебных входят файлы менеджера блокировок (lock manager), данные таблиц мониторинга, буферы событий и сессий трассировок, также некоторые другие файлы, включая специальные файлы-флаги нулевого размера.

Файлы менеджера блокировок

Начальный размер файлов менеджера блокировок (префикс rdb_lock_) задаётся параметром LockMemSize. Архитектуре SuperServer требуется хранить в этом файле меньше данных, чем архитектурам Classic и SuperClassic. Типичный размер локфайлов находится в пределах 20-150 МБ, но при большом количестве подключений, в архитектурах Classic и SuperClassic, размер лок-файла может приближаться к двум гигабайтам.

Лок-файл создаётся при открытии файла базы и удаляется при его закрытии. По умолчанию файл базы закрывается после отключении последнего клиента, но начиная с РЕД Базы Данных 3 можно установить «время удержания» (linger time) DDL-командой.

Файлы таблиц мониторинга

Все таблицы мониторинга (виртуальные) заполняются при первом обращении к любой из них и сохранённые данные не меняются до завершения транзакции. Размер «снимков» таблиц мониторинга (префикс rdb_monitor_) зависит от приложения, его активности и от количества обращений к таблицам мониторинга из разных подключений и транзакций.

Файлы трассировки

Файл rdbЧИСЛО_trace содержит «ссылку» на активный файл с информацией о сеансах трассировки.

Файл с префиксом rdb_trace_ содержит информацию о сеансах трассировки. Таких файлов может быть множество, но «активен» будет только один из них. Файлы с префиксом rdb_trace. – буферы сессий трассировки. Их максимальный размер ограничен параметром MaxUserTraceLogSize. Если клиент не успевает вычитывать данные, то по достижении предела (10 МБ по умолчанию), трассировка автоматически приостанавливается.

Файлы событий

Файлы с префиксом rdb_event_ представляют собой буферы, хранящие недоставленные события, если приложение на них подписано.

Файлы кэша сопоставления имен

Файл rdbЧИСЛО_user_mapping используется для управления кэшем сопоставления имён в процессах СУБД РЕД Базы Данных.

Файлы флаги

В POSIX-системах дополнительно используются специальные файлы-флаги нулевого размера – fb_rename_guard, rdb_init и rdb_port_НОМЕР. Эти файлы требуются при запуске процессов СУБД РЕД Базы Данных.

Временные файлы

Местоположение временных объектов (кроме данных временных таблиц и блобов) управляется параметром конфигурации TempDirectories, а также параметром TempTableDirectory (для данных временных таблиц и блобов).

Если какой-то из этих параметров (или оба) не задан или указанный каталог недоступен, будет использован каталог из переменных окружения FIREBIRD_TMP, TEMP, TMP (в этом порядке).

Если ни одна из этих переменных не установлена, то по умолчанию временные файлы создаются в каталоге C:\temp (Windows) или /tmp (POSIX). На Windows процесс(ы) сервиса RedDatabase используют, как правило, системный каталог временных файлов (C:\Windows\TEMP).

Префиксы временных файлов:

  • rdb_table_ - данные временных таблиц;

  • rdb_blob_ - данные временных блобов;

  • rdb_undo_ - undo-логи;

  • rdb_recbuf_ - кэш курсоров;

  • rdb_merge_ - хэш-соединения;

  • rdb_sort_ - блоки сортировок;

  • rdb_tpc_ - новые режимы изоляции в транзакциях;

  • rdb_snap_ - снимки, согласованные по чтению для разных подключений.