Параметры работы
Параметры работы — это настройки, определяющие поведение механизмов сервера приложений: пулы соединений, статистику оптимизатора, пороги защиты от слишком больших или слишком долгих запросов, политику повторов при конфликтах и блокировках, материализацию изменений, замеры потребления памяти, отображение элементов формы и т.п. В отличие от параметров запуска, фиксированных для процесса сервера, значение параметра работы задаётся перечисленными ниже способами и может перегружаться во время работы системы, в том числе для отдельной роли пользователя. Большинство параметров работы начинает действовать сразу после изменения значения; отдельные читаются только при запуске системы, что указано в описании параметра.
Параметры работы в платформе могут задаваться одним из следующих способов (в порядке их приоритетов, снизу более приоритетные):
- В java коде в файле
lsfusion.server.physics.admin.Settings.java(актуально для форков платформы) - В
lsfusion.properties(обычно являются частью проекта, а значит действует по умолчанию для всех инсталляций) - название параметра должно начинаться наsettings(напримерsettings.enableUI) - В
conf/settings.properties(для конкретных инсталляций) - название параметра должно начинаться наsettings - В переменных окружения - имя переменной
SETTINGS_<ИМЯ ПАРАМЕТРА>(напримерSETTINGS_ENABLEUI) - В Java параметрах запуска название параметра должно начинаться на
Dиsettings(например-Dsettings.enableUI=2) - В БД:
Администрирование > Система > Настройки > Параметры. В этом интерфейсе можно задать как глобальные настройки, так и настройки для конкретных ролей - Во время выполнения действия, при помощи системных действий:
Service.pushSetting[STRING, STRING],Service.popSetting[STRING](перегружают значение свойства для всего текущего потока).
Через файлы, переменные окружения и параметры запуска задается любой параметр класса настроек; ключ с префиксом settings, не соответствующий ни одному параметру, в файле или параметрах запуска игнорируется с предупреждением в логе при запуске. До версии 7.0 так задавались только параметры, перечисленные в конфигурации платформы lsfusion.xml, а остальные ключи игнорировались без предупреждения.
Параметры, управляющие выполнением запросов (например, тайм-ауты механизма материализации запросов), не действуют на уже скомпилированные запросы: вычисленное для запроса состояние выполнения — его тайм-ауты и шаги материализации — кэшируется вместе с запросом в кэше скомпилированных запросов, поэтому изменённый параметр применяется только к вновь компилируемым запросам. Константные литералы при компиляции параметризуются, поэтому запрос, отличающийся только литералом, также переиспользует уже скомпилированный запрос. Экспериментируя с такими параметрами, сочетайте Service.pushSetting[STRING, STRING] / Service.popSetting[STRING] со сбросом кэшей, чтобы запросы перекомпилировались с новыми значениями — как после изменения, так и после восстановления прежних: Service.dropLRUCustom[DOUBLE, BOOLEAN] (процент сбрасываемого и флаг случайного сброса) либо Service.dropLRU[], который берёт их из Service.dropLRUPercent[] / Service.randomDropLRU[] и ничего не делает, пока процент пуст.
В таблице ниже перечислены не все поля класса настроек: параметры отдельного механизма описаны вместе с этим механизмом (например, пороги элемента выбора в интерактивном представлении), а внутренние параметры механизмов платформы, например эвристики оптимизатора запросов или управления размером кэшей, не описываются вовсе.
| Тип параметра | Описание | По умолчанию | |
|---|---|---|---|
enableUI | byte | Определяет доступ к пользовательскому интерфейсу (в том числе для form api)2 - Разрешать анонимный доступ1 - Разрешать только аутентифицированный доступ0 - Не разрешать доступВ режиме разработки всегда используется 2, а заданное значение параметра игнорируется. Этот режим включается сам, когда сервер запущен с подключенным плагином и ключ -Dlsfusion.server.devmode не задан явно. Кроме навигатора и form api, значение проверяется и для интерактивных действий, вызываемых через программный интерфейс, дополнительно к enableAPI. Значение 2 включает также возможность анонимного входа на странице логина веб-клиента. | 1 |
enableAPI | byte | Определяет доступ к программному интерфейсу (за исключением form api)2 - Разрешать анонимный доступ1 - Разрешать только аутентифицированный доступ0 - По умолчанию не разрешать доступ. При этом значении внешние запросы всё равно разрешаются для действий с аннотацией @@noauth, для аутентифицированных запросов к действиям с аннотацией @@api, а также для аутентифицированных пользователей с доступом к форме навигатора System.interpreter.В режиме разработки всегда используется 2, а заданное значение параметра игнорируется. Этот режим включается сам, когда сервер запущен с подключенным плагином и ключ -Dlsfusion.server.devmode не задан явно. Независимо от значения проверка пропускается для запроса с корректной подписью. Значение читается с учетом переопределения для роли пользователя. Кроме проверки на уровне действия, оно читается еще до аутентификации при обработке запросов интерпретатора: анонимный запрос проходит только при значении 2, а при 0 и 1 возвращается требование аутентификации. | 0 |
freeConnections | int | Максимальное количество соединений в пуле соединений на сервере приложений | 12 |
enableCloseThreadLocalSqlInNativeThreads | boolean | Закрывать ли соединение с базой данных, оставшееся привязанным к потоку, который создан не платформой, - потоку пула удаленных вызовов, потоку веб-сервера, потоку таймера. Такие потоки платформа не контролирует и не знает, когда они завершатся, поэтому по умолчанию соединение закрывается сразу, как только завершился вызов верхнего уровня в этом потоке, а следующий вызов открывает его заново. Значение false оставляет соединение висеть в потоке до его следующего использования; отключать стоит только для диагностики | true |
statDegree | int | Основание используемое для оценки количества записей (статистики) всеми оптимизаторами. Так оптимизаторы любое количество записей считают равным заданному основанию в некоторой степени (например если количество записей реально равно 1000, а основание 5, то оптимизатор считает количество записей равным 5 в 4-й степени). Соответственно, чем больше основание, тем менее точной становится статистика, а значит уменьшается время компиляции, размеры кэшей и генерируемых запросов, но при этом может существенно повышаться вероятность ошибки при построении правильного плана запроса. | 5 |
authTokenExpiration | int | Время действия токена аутентификации в минутах. | 60*24 (1 день) |
oauthAccessTokenExpirationoauthRefreshTokenExpirationoauthAuthCodeExpiration | intintint | Время действия (в минутах) токена доступа, токена обновления и кода авторизации, выдаваемых встроенным сервером авторизации OAuth; действуют, пока одноименные свойства модуля Authentication (Authentication.oauthAccessTokenExpiration[] и другие, задаваемые в форме настроек аутентификации) равны NULL. | 6060*24*30 (30 дней)10 |
reserveIDStep | int | Количество ID, которые сразу резервирует сервер приложений для оптимизации при выполнении одиночных операций добавления объектов (при асинхронном вводе, одиночном NEW и т.п.) | 50 |
queryLengthTimeout | int | Параметры механизма материализации запросов. queryLengthTimeout - с какой длины запроса включать этот механизм | 1000 |
defaultTypeExecuteEnvironment | int | Среда выполнения запросов, применяемая к пользователю, которому она не выбрана явно свойством execEnv[User] (см. Service). 2 - материализация: запрос, завершившийся ошибкой или не уложившийся в тайм-аут, при повторе постепенно материализует свои подзапросы; 1 - отключение вложенных циклов на время сессии; 0 - без подстройки. Любое другое значение молча означает 0. К запросам короче queryLengthTimeout параметр не применяется - они выполняются без подстройки в любом случае | 2 |
useRequestTimeout | boolean | Включает механизм повторных удаленных вызовов, если эти вызовы выполняются слишком долго. Необходимо для разрешения ситуаций, когда вызов выполнен на сервере, но ответ из-за сетевых проблем не приходит (где-то теряется). Последнее обычно бывает, когда сервер приложений работает в виртуализированной среде. Соответственно, в таком случае эту настройку рекомендуется включать, и выключать в обратном случае. | true |
deleteFromInsteadOf | int | Количество записей, ниже которого временная таблица, возвращенная внутри транзакции, очищается через DELETE, а не через TRUNCATE, который внутри транзакции удерживает исключительную блокировку на нее до коммита. Записи, оставшиеся мертвыми от предыдущих очисток этой таблицы, учитываются в этом же пороге, так как до сброса ее хранилища их никто не освобождает. 0 возвращает TRUNCATE | 100000 |
useGlobalTempTablePool | boolean | Выдавать сессионную таблицу из пула, общего для всего узла сервера, вместо создания временной. Создание таблицы берет блокировку, которая до конца транзакции подавляет fast path менеджера блокировок для всего кластера PostgreSQL; таблица пула создается один раз на узел, а не по разу на каждое соединение, которому нужна такая форма. Если подходящего слота нет, используется обычная временная таблица. Только для PostgreSQL. В режиме разработки и в тестовом режиме включено по умолчанию | false |
globalTempTablePoolTablespace | string | Табличное пространство, в котором пул узла создает свои таблицы. Пустое значение - табличное пространство базы по умолчанию. Таблица пула - обычное постоянное отношение, поэтому temp_tablespaces на нее не распространяется: если временные таблицы вынесены в отдельное табличное пространство, его нужно указать здесь, и оно должно переживать перезапуск. Только для PostgreSQL | `` |
globalTempTablePoolMaxTables | int | Количество таблиц, которое узел может держать в этом пуле одновременно, по всем формам. Сверх него запрос получает обычную временную таблицу | 2000 |
logTempTables | boolean | Записывает в logs/temptable.log каждую операцию над сессионной (временной) таблицей - создание, очистку через DELETE или TRUNCATE, удаление, ANALYZE, а также нашлась ли в пуле готовая, - помечая те из них, которые произошли внутри транзакции, и добавляет одну итоговую строку на транзакцию. Нужно для диагностики того, сколько таких операций берет транзакция: на PostgreSQL операции внутри транзакции удерживают свои блокировки до коммита | false |
checkSessionCount | boolean | Проверять, что сессионная таблица, выдаваемая из пула, действительно пуста, и что учет сессионных таблиц на сервере приложений внутренне согласован. Проверка на пустоту выполняет SELECT COUNT(*) на каждую выдачу таблицы из пула, поэтому в промышленной эксплуатации параметр держать нельзя. Расхождение записывается в лог утверждений, а при запуске с ключом -ea еще и прерывает выполнение; только под -ea каждый счетчик сверяется еще и с реальным количеством строк в базе данных. Отключение учета параметром disableRegisterChanges делает сверку счетчиков пустой: она сравнивает два значения, которые платформа ведет сама | false |
disableRegisterChanges | boolean | Отключает учет изменений: счетчики сессионных таблиц на соединении и счетчик измененных строк постоянных таблиц. Оба счетчика нужны не самим данным, а решениям о них, поэтому отключение тихо останавливает два механизма: перезапуск соединений, перегруженных сессионными таблицами (см. periodRestartConnections), и автоматический пересчет статистики таблицы после того, как в ней изменилось достаточно строк (см. updateStatisticsLimit). Оптимизатор после этого работает по устаревшей статистике | false |
tempTablesTimeThresholdtempTablesCountThreshold | intint | Определяют минимальный порог времени жизни (в секундах) временной таблицы и количество таблиц на соединение, при превышении которых эти временные таблицы начинают очищаться / удаляться в регламентном режиме. Минимальный порог времени жизни таблицы должен быть соизмерим со стандартным временем использования временной таблицы. Чем эти пороги меньше, тем меньше потребление ресурсов сервером бд, но тем выше вероятность возникновения "ротации кэшей" | 24040 |
queryRowCountPessLimitqueryRowCountOptDivider | intint | Параметры механизма защиты от слишком больших запросов. queryRowCountPessLimit - минимальное количество записей, для которых начинает работать эта защита, queryRowCountOptDivider - порог, при превышении которого сервер приложений будет кидать ошибку (задается как часть памяти от всей имеющейся в распоряжении сервера приложений памяти, так если равно значение параметра равно 50, а объем памяти 100GB, то порог равен 100GB/50=2GB). | 100050 |
queryLengthLimit | int | Параметры механизма защиты от слишком длинных запросов. queryLengthLimit - длина запроса, при превышении которого сервер приложений будет кидать ошибку. | 2000000 |
remoteLogTime | int | Порог времени выполнения (в миллисекундах), при превышении которого удаленный вызов записывается в соответствующий лог (server-remote) | 3000 |
explainThresholdexplainJavaStackexplainCompile | intbooleanboolean | Параметры вывода логов планов выполнения запросов
| 100falsefalse |
startServerAnyWay | boolean | Стартовать сервер, даже при наличии ошибок в структуре индексов или синхронизации метаданных | false |
dryRun | boolean | Останавливает старт сервера сразу после того, как логика (модули, классы, свойства, действия) скомпилирована и проверена, до установления соединения с базой данных. Полезно для проверки изменений в .lsf без подключения к реальной базе данных | false |
batchScriptErrors | boolean | Продолжать проверку модуля после найденной семантической ошибки, чтобы за один запуск сообщалась не только первая из них. Сообщается столько ошибок, сколько удается разобрать после сбоя, а не обязательно все, что есть в модуле. dryRun включает этот режим всегда. Читается при старте | false |
disablePrereadCachesmaxPrereadCachesTime | booleanlong | Прогрев кэшей при старте. При значении по умолчанию true прогрев выключен: граф свойств и кэши отдельных свойств не вычисляются при старте, а считаются лениво, при первом обращении, - сервер стартует быстрее, но за это платят первые запросы. Значение false включает прогрев и удлиняет старт. maxPrereadCachesTime - порог времени (в миллисекундах), при превышении которого прогрев отдельного свойства записывается в системный лог; свойства, уложившиеся в порог, не логируются. Оба читаются при старте, и оба ни на что не влияют, если сервер запущен с -Dlsfusion.server.lightstart | true10000 |
disablePrereadSecurityPolicies | boolean | Отключает вычитывание политик безопасности всех ролей при старте. По умолчанию они вычитываются, поэтому первый вход пользователя каждой роли за это не платит; значение true переносит чтение на первое обращение к роли - старт быстрее, но чтение из базы попадает внутрь пользовательского запроса. Читается при старте и не действует, если сервер запущен с -Dlsfusion.server.lightstart | false |
noTransSyncDB | boolean | Выполнять синхронизацию структуры базы данных при старте вне транзакции, отдельными автоматически фиксируемыми командами. По умолчанию вся синхронизация - создание и изменение таблиц, полей и индексов, применение миграционного файла - идет одной транзакцией и при ошибке откатывается целиком. Значение true эту гарантию снимает: неудачная синхронизация оставляет структуру измененной наполовину. Читается при старте, а также при подключении ведомого узла базы данных | false |
singleInstance | boolean | Разрешать ли на компьютере пользователя только один запущенный десктоп-клиент. Значение подставляется в jnlp-файл, который сервер отдает при установке клиента через Java Web Start, поэтому изменение действует на следующий скачанный jnlp-файл, а уже запущенный клиент работает с тем значением, с которым стартовал. При true повторный запуск переключает на уже открытый клиент вместо запуска второго процесса. Вне запуска через Java Web Start и в веб-клиенте параметр не действует. По историческим причинам его можно задать и без префикса settings, ключом jnlp.singleInstance | false |
maxScriptErrorsPerModule | int | Сколько ошибок сообщать по одному модулю при включенном batchScriptErrors. По достижении этого числа модуль перестает проверяться | 10 |
checkUniqueEvent | boolean | Прерывать построение логики, если для одного свойства задано больше одного вычисляемого события. Без этой проверки вторая такая инструкция молча замещает первую - без сообщения и без записи в лог. Читается при построении логики, поэтому вступает в силу только после перезапуска сервера | false |
checkAlwaysNull | boolean | Сообщать ли об объявлениях, при которых свойство не может принимать никаких значений: когда у возможных результатов нет общего предка. По умолчанию такое объявление является семантической ошибкой, и сервер не стартует. Значение false убирает только сообщение: вывод классов при разборе выполняется по-прежнему, поэтому старт быстрее не становится, а такая же проверка для ограничений не отключается вовсе. Читается при построении логики | true |
useISOTimeFormatsInIntegration | boolean | Записывать значения даты и времени строками в форматах ISO 8601 в текстовых форматах интеграции (JSON, XML, CSV). Если параметр сброшен, используются форматы текущей локали | true |
removeJoinCutBackwardCompatibility | boolean | Восстанавливает поведение проталкивания предикатов до версии 7.0: join'ы, зависящие от цели проталкивания, вырезаются из проталкиваемого условия целиком, вместо того чтобы сохраняться с виртуализацией зависящих аргументов. Используется как быстрый fallback, если после перехода на 7.0 отдельные запросы падают с ошибкой некорректной операции над множеством или получают более медленные планы (см. issue #1699) | false |
keyExprCompareJoinBackwardCompatibility | boolean | Восстанавливает обработку сравнений с интервалами при планировании проталкивания предикатов до версии 7.0 (без key compare join'ов и с защитами от висячих интервальных ключей, которые они заменили). Вместе с removeJoinCutBackwardCompatibility полностью восстанавливает планирование проталкивания версии до 7.0 | false |
allowNestedTransaction | boolean | Разрешает другой сессии работать на sql-сессии, уже находящейся в транзакции: её чтения и изменения присоединяются к этой транзакции вместо ошибки (видят её незафиксированные данные и исчезают при её откате, а применение изменений там не атомарно само по себе - его фиксация физически ничего не делает). Может включаться для одного стека через pushSetting / popSetting, если это сделано осознанно (см. issue #1726) | false |
allowUserInteractionInTransaction | boolean | Разрешает взаимодействие с пользователем внутри транзакции: диалог, сообщение или запрос ввода внутри APPLY только логируется вместо ошибки (транзакция и её блокировки удерживаются на время раздумий пользователя). Может включаться для одного стека через pushSetting / popSetting, если такое взаимодействие сделано осознанно (см. issue #1726) | false |
prefixIndexIntervalBackwardCompatibility | boolean | Восстанавливает учет интервальных условий только по первому полю индекса (интервал по полю, стоящему в составном индексе дальше, не учитывается). Читается при старте | false |
noOrderTopSplit | boolean | Восстанавливает планирование запросов с ограничением количества рядов до версии 7.0: условие запроса не разбивается на взаимоисключающие ветви, в каждой из которых выражение порядка снова становится обычным полем, и оценка стоимости по ветвям не выполняется. Разбиение нужно тогда, когда выражение порядка перестает быть полем, - например, когда сессия держит несохраненное изменение сортируемого свойства; без него план в этот момент вырождается в полный просмотр таблицы. Взамен отключение экономит время компиляции. Уже скомпилированные запросы сохраняют прежний план | false |
removeClassesFallback | boolean | Восстанавливает обработку удаления объектов до исправления, при котором удаление класса откладывалось на дочерний класс, покрывающий все прежние классы объекта. Откладывание нарушало порядок событий: события и материализации успевали отработать раньше, и классы в базе данных оставались несогласованными. Возвращает заодно и отсутствие отсева уже ненужных зависимостей при пошаговом применении изменений: разделить эти две вещи нельзя | false |
noExecuteLocalEventsOnFormShowFallback | boolean | Восстанавливает поведение, при котором локальные события не выполняются перед открытием формы в интерактивном представлении. Выполнение их перед открытием выравнивает предыдущие значения в глобальном контексте с предыдущими значениями в открываемой форме; отключение это выравнивание убирает, но экономит выполнение локальных событий на каждом открытии формы | false |
disableActionsIfReadonly | boolean | Восстанавливает вид действий версии 5: действие, которое форма показывает доступным только для чтения, отображается как недоступное. Параметр передается клиенту при подключении навигатора, поэтому применяется после повторного входа, и действует только на действия в панели, но не в ячейках таблицы. Десктоп-клиент значение получает, но не использует | false |
cssBackwardCompatibilityLevel | double | Восстанавливает прежние имена CSS-классов веб-клиента: рядом с новым именем элементу проставляется и старое, записанное в верблюжьем регистре. Значение - версия платформы, начиная с которой старые имена нужны. Сейчас в клиенте объявлен один уровень совместимости, версия 5, поэтому работает любое значение больше нуля и не больше 5.9999, на практике 5, а 6 и выше не добавляют уже ничего. -1 выключает механизм. Нужен приложениям, чьи собственные стили ссылаются на старые имена. Передается клиенту при подключении навигатора | -1 |
conflictSleepThresholdconflictSleepTimeDegree | intdouble | Параметры устранения повторяющихся update conflict'ов. Тот же механизм используется и для dead lock'ов, если СУБД не поддерживает управление их приоритетом (см. deadLockThreshold):
| 32 |
timeoutNanosPerRow | long | Среднее время обработки одного ряда в микросекундах, вопреки названию параметра: расчетное время в миллисекундах получается умножением оценки количества рядов на это значение и делением на 1000, а полученная оценка не может быть меньше timeoutMinMillis. Если это расчетное время превышено платформа пытается материализовать некоторые подзапросы (или как-то изменить этот запрос на более пессимистичный) и выполнить запрос снова. Уменьшение этого параметра может приводить, к более частым материализациям и вообще дополнительным повторным выполнениям запроса, увеличение может привести к использованию неправильных планов (прежде всего nested loop'ов на соединении больших таблиц), в случаях когда, к примеру, SQL сервер неправильно оценивает статистику подзапросов. По этой же оценке решается, объяснять ли запрос до его выполнения (см. explainNoAnalyzeThreshold). | 20 |
deadLockThreshold | int | Параметры устранения повторяющихся dead lock'ов. deadLockThreshold - после какого количества неудачных (когда возникал dead lock) попыток включать механизм. | 0 |
periodRestartConnectionspercentRestartConnections | intdouble | Параметры механизма перестарта соединений. periodRestartConnections - определяет как часто (период в секундах) будет запускаться этот механизм. percentRestartConnections - какой процент соединений с максимальным скорингом будет перестартовываться. Дробный остаток от вычисленного количества переносится на следующий запуск. Оба параметра участвуют также и в вычислении самого скоринга, задавая нормальное время жизни соединения. | 601 |
closeConfirmedDelaycloseNotConfirmedDelay | intint | Задержки (в миллисекундах) окончательного закрытия формы после инициации ее закрытия на сервере. closeConfirmedDelay - время, которое дается клиенту на то, чтобы закончить все дела с формой после того, как он подтвердил закрытие (этот механизм нужен для экономии round trip запроса при закрытии формы). closeNotConfirmedDelay - время, по истечении которого форма закрывается в любом случае, если подтверждения от клиента не пришло. | 5000300000 |
defaultCompareForStringContainsdefaultCompareSearchInsteadOfContains | booleanboolean | Тип сравнения, который по умолчанию предлагается в пользовательском фильтре по строковому свойству. Вместо равенства предлагается поиск или содержит - для регистронезависимых строк это так всегда, а defaultCompareForStringContains распространяет такое поведение на все строковые свойства, независимо от регистрозависимости. Какой из двух это будет, определяет defaultCompareSearchInsteadOfContains: true - полнотекстовый поиск, false - обычное вхождение подстроки. Оба не действуют на свойство, для которого тип сравнения задан явно | falsetrue |
limitHintIncrementComplexitylimitComplexityGrowthCoefflimitHintIncrementStatlimitHintIncrementValueComplexitylimitApplyHintIncrementComplexitylimitApplyHintIncrementStat | intdoublelongintintlong | Параметры управления сложностью изменений (материализация изменений свойств, когда сложность инкрементальных вычислений становится слишком большой):
limitIncrementCoeff. Кроме материализации, превышение порога сложности в выражениях, вычисляемых через join свойства, переводит вычисление в отдельный запрос без заранее известных значений параметров. | 501.520010001001000 |
disableExperimentalFeatures | boolean | Огрубляет анализ предварительно вычитанных значений: свойство, у которого такое вычитывание есть вообще, считается использующим его при любом наборе изменений, без разбора конкретного набора. Так безопаснее, но общие подвыражения переиспользуются реже, и запросы становятся тяжелее. Второй эффект параметра, обход проверки висячих интервальных ключей, виден только при включенном keyExprCompareJoinBackwardCompatibility. Полностью действует после сброса кэшей | false |
excessThreadAllocatedBytesexcessInterruptCountthreadAllocatedMemoryPeriod | longintint | Параметры механизма защиты от слишком большого потребления памяти на сервере приложений:
| 5368709120L (5GB)4180 (3 минуты) |
useSavePointsThresholdsavePointCountForExceptionsupdateSavePointsMinMultiplierupdateSavePointsMaxMultiplier | intintdoubledouble | Параметры механизма использования savepoint'ов в транзакциях (для того чтобы не перестартовывать всю транзакцию, например в механизме материализации подзапросов):
| 5-10.83.0 |
changeBooleanOnSingleClick | boolean | Определяет будет ли событие изменения свойства логического типа на форме инициироваться по одиночному (true) или двойному (false) клику мыши | не задан (клиент решает по виду клика) |
changeActionOnSingleClick | boolean | Определяет будет ли событие вызова действия на форме инициироваться по одиночному (true) или двойному (false) клику мыши | true |
defaultImagePathRankingThresholddefaultAutoImageRankingThresholddefaultNavigatorImageRankingThresholddefaultNavigatorImagedefaultContainerImageRankingThresholddefaultContainerImagedefaultPropertyImageRankingThresholddefaultPropertyImage | floatfloatfloatbooleanfloatbooleanfloatboolean | Параметры механизма установки иконок: первый - для иконок, заданных путем к файлу, остальные - для автоматической установки | 0.0f0.0f0.1ftrue0.6ffalse0.8ffalse |
maxStickyLeft | double | Доля ширины таблицы, которую в веб-клиенте могут занимать закрепленные слева колонки (опция свойства STICKY); колонки, не уместившиеся в нее, не закрепляются. | 0.33 |
useShowIfInReports | boolean | При построении отчета удаляет из шаблона расположенные непосредственно в бэнде текстовые поля свойств, поле SHOWIF которых объявлено в шаблоне и равно NULL в первой строке отчета, вместе с занимаемой ими полосой. | true |
contentWordWraphighlightDuplicateValueuserFiltersManualApplyModesuppressOnFocusChange | booleanbooleanbooleanboolean | Значения по умолчанию настроек оформления «перенос текста», «подсветка дубликатов», «ручное применение фильтров» и «начинать редактирование при фокусе» (интерфейс пользователя) для пользователей, которые их не задали. | falsefalsefalsefalse |
newConnectionAttempts | int | Сколько раз открытие нового соединения с базой данных повторяется после неудачи, прежде чем ошибка будет выброшена вызывающему | 3 |
disablePoolConnections | boolean | Отключает пул соединений с базой данных: возвращаемое соединение закрывается, а не сохраняется для повторного использования (пул хранит до freeConnections свободных соединений на каждый узел базы данных). Предназначен для диагностики | false |
disablePoolPreparedStatementsqueryPrepareLengthqueryPrepareRunTime | booleanintint | Параметры пула prepared statement'ов. Запрос, текст которого длиннее queryPrepareLength символов, а выполнение заняло больше queryPrepareRunTime миллисекунд, сохраняется подготовленным на своем соединении и используется повторно; disablePoolPreparedStatements отключает пул | true100040 |
checkCurrentDatecheckCurrentDataDateTime | intint | Периоды (в секундах) системных задач, обновляющих Time.currentDate[] при смене дня и снимки Time.currentDateTimeSnapshot[] / Time.currentZDateTimeSnapshot[] | 301800 |
updateFormCountPeriodupdateUserLastActivityupdatePingInfo | intintint | Периоды (в секундах) системных задач, записывающих накопленную в памяти активность клиентов в базу данных: сколько раз открывалась каждая форма, время последней активности каждого подключения и статистику ping по каждому компьютеру | 30303600 |
notificationCleanupPeriod | int | Сколько (в секундах) сервер хранит уведомление для клиента, который его еще не забрал (вызов NEWEXECUTOR CLIENT, внешний UI redirect и т.п.), сверх собственной задержки или периода вызова; периодический вызов продлевает срок при каждом срабатывании. Просроченные удаляет задача с тем же периодом | 600 |
flushAsyncValuesCaches | int | Период (в секундах) задачи, применяющей отложенную инвалидацию: кэшей подстановки значений и свойств, у которых инвалидация кэша объявлена отложенной. Пока задача не отработала, чтение короткое время может возвращать прежнее значение | 1 |
flushPendingTransactionCleanersThreshold | int | Период (в секундах) задачи, освобождающей уже не нужные сессии временные таблицы, если их освобождение пришлось отложить, потому что соединение сессии в этот момент находилось в транзакции | 10 |
schedulerLogFlushInterval | int | Период (в секундах), с которым сообщения, которые выполняющаяся задача планировщика пишет в свой лог, сбрасываются в базу данных | 5 |
periodProcessDump | int | Период (в секундах) задачи, записывающей список выполняющихся SQL- и Java-процессов (то, что показывает монитор процессов) в logs/processdump.log | 60 |
periodBalanceConnectionspercentBalanceConnections | intdouble | Параметры балансировки соединений между узлами базы данных (см. масштабирование базы данных): каждые periodBalanceConnections секунд percentBalanceConnections процентов соединений (не меньше одного), начиная с тех, что находятся на самом загруженном узле и держат меньше всего строк временных таблиц, переносятся на наименее загруженный узел | 51 |
readSQLServerCpuTimePeriod | int | Период (в секундах), с которым по SNMP (snmpPort[DBServer]) читается загрузка CPU каждого узла базы данных и пересчитывается оценка нагрузки, по которой выбирается узел для нового соединения (см. веса ниже) | 5 |
baseConnWeightextraConnWeightlagSensitivitylagScalemasterPenalty | doubledoubledoubledoubledouble | Веса оценки нагрузки узла базы данных; новое соединение уходит на узел с наименьшей оценкой. Оценка равна загрузке CPU (0..1) плюс (baseConnWeight + extraConnWeight × загрузка CPU) × доля узла во всех соединениях, плюс для реплики lagSensitivity × lag / (lagScale + lag), где lag - отставание репликации в секундах (то есть при отставании в lagScale секунд это слагаемое равно половине lagSensitivity), плюс masterPenalty для мастера | 0.30.92.02.00.1 |
tempStatisticsTarget | int | default_statistics_target, с которым выполняется ANALYZE временной таблицы (PostgreSQL); 0 оставляет настройку сервера | 10 |
deleteFromInsteadOfdeleteFromInsteadOf | intboolean | Аналоги deleteFromInsteadOf вне транзакции: количество строк (включая оставшиеся мертвыми после предыдущих очисток), ниже которого временная таблица очищается через DELETE, а не TRUNCATE, 0 - всегда TRUNCATE; флаг выбирает DELETE для таблицы, количество строк в которой неизвестно, в том числе внутри транзакции | 0false |
applyAutoAttemptCountLimitdialogTransactionTimeout | intint | Что происходит, когда транзакция применения изменений отменена по тайм-ауту запроса. Без пользователя (задача планировщика, внешний вызов) применение повторяется до applyAutoAttemptCountLimit раз, после чего отменяется. С пользователем показывается диалог с предложением повторить, повторить без тайм-аута или отменить, а dialogTransactionTimeout - сколько (в миллисекундах) диалог ждет ответа, прежде чем отменить | 35000 |
tooMuchRetryAttemptstooMuchAttempts | intint | Сколько раз применение изменений повторяется после временной ошибки, прежде чем ошибка будет выброшена: tooMuchRetryAttempts для ошибок prepared statement'а, ставшего недействительным после изменения схемы (повторная подготовка их устраняет), tooMuchAttempts для нарушения уникальности, которое может быть гонкой между сессиями | 315 |
trueSerializableAttempts | int | В режиме уровня изоляции транзакций (см. disableTILMode[] в System_Service) применение начинается на уровне SERIALIZABLE и остается на нем в течение trueSerializableAttempts повторов после конфликтов обновления; последующие повторы выполняются на REPEATABLE READ. 0 - SERIALIZABLE не используется | 0 |
timeoutStarttimeoutDegreetimeoutMinMillis | intintlong | Параметры тайм-аутов запросов в механизме материализации запросов (см. queryLengthTimeout, timeoutNanosPerRow). Запрос, отмененный по тайм-ауту, повторяется попеременно с волатильной статистикой и без нее, начиная с тайм-аута в timeoutStart секунд, который умножается на timeoutDegree на каждом втором повторе. timeoutMinMillis - нижняя граница (в миллисекундах) времени выполнения, оцененного по timeoutNanosPerRow | 35100 |
maxThreadAllocatedBytescacheMissesStatsLimit | longint | Пороги периодического замера памяти (см. threadAllocatedMemoryPeriod), при превышении которых поток записывается в logs/allocatedbytes.log вместе со статистикой своих кэшей: байты, выделенные потоком за период, и промахи кэшей за период | 500048576 (~500MB)10000 |
updateStatisticsLimit | int | Количество измененных строк временной таблицы, после которого ее статистика пересчитывается; независимо от количества она пересчитывается и тогда, когда изменение переводит количество строк таблицы в другой порядок (см. statDegree) | 300 |
majorStatChangeDegreeupdateStatsDropLRUThreshold | intint | majorStatChangeDegree - множитель, statDegree в степени majorStatChangeDegree (25 при значениях по умолчанию), который задача обновления статистики использует дважды: статистика таблицы обновляется, когда строк, добавленных с последнего обновления, стало больше ее оценки количества строк в этот множитель раз (или удаленных - больше самой оценки), а обновление, изменившее оценку таблицы или класса в этот множитель раз, считается существенным изменением. Как только существенных изменений, накопившихся с последнего сброса, становится больше updateStatsDropLRUThreshold, сбрасываются кэши (LRU), поскольку планы в них построены на старой статистике | 21 |
disableSyncStatProps | boolean | Не вычислять статистику (оценку количества значений) каждого свойства при синхронизации объектов рефлексии (Reflection.Property) с базой данных при старте; вместо нее записывается статистика по умолчанию. Читается при старте | false |
maxNumericPrecisionmaxNumericScale | intint | Точность и количество знаков после запятой для NUMERIC, объявленного без них, и верхние границы для объявленных | 12732 |
useMaxDivisionLength | boolean | Результат деления значений NUMERIC получает maxNumericScale знаков после запятой (делимое приводится к этому типу перед делением). Если выключено, количество знаков равно сумме знаков после запятой делимого и целых знаков делителя - поведение прежних версий | true |
safeCastIntType | int | Как значение, которое может не поместиться, приводится к целочисленному типу: 0 - PL/pgSQL-функция, перехватывающая ошибку приведения и возвращающая NULL (подвержена ошибке PostgreSQL 13 при отмене запроса), 1 - SQL-функция, возвращающая NULL, если значение вне диапазона типа, 2 - обычное приведение в арифметике, при непомещающемся значении выбрасывается ошибка СУБД (приведение из строки сохраняет функцию) | 1 |
updateSavePointsPeriodupdateSavePointsResultPeriodupdateSavePointsCoeff | intintdouble | Адаптация useSavePointsThreshold: каждые updateSavePointsPeriod секунд сервер проверяет, укладываются ли нужные в этот момент savepoint'ы в текущий порог, а каждые updateSavePointsResultPeriod секунд делит множитель порога на updateSavePointsCoeff, если они укладывались больше чем в 80% проверок, или умножает на updateSavePointsCoeff, если меньше чем в 60% (оставаясь в пределах updateSavePointsMinMultiplier и updateSavePointsMaxMultiplier) | 3018001.3 |
isClustered | boolean | Сервер - один из нескольких серверов приложений, работающих с одной базой данных. Отключает локальные кэши сервера, которые предполагают, что данные меняет только он: кэш значений асинхронного ввода и отслеживание удаленных объектов, позволяющее сессии пропускать проверки классов | false |
restrictLongValuesInStat | boolean | Ограничивает количества строк, записываемые в статистику рефлексии (Reflection.quantity[Property], количества строк таблиц и классов), значением 2147483647 - так их хранила версия 6. Оставьте включенным, пока что-то в приложении еще ожидает там INTEGER | true |
noDisablingNestedLooplastStepCoeffsubQueriesSplitsubQueriesRowsThresholdsubQueriesRowsMaxsubQueriesRowCountCoeffsubQueriesParentCoeffsubQueriesPessQueryCoeff | booleanintintintintintintint | Параметры механизма материализации запросов (см. timeoutNanosPerRow). Запрос, не уложившийся в свой тайм-аут, выполняется заново с частью подзапросов, материализованных во временные таблицы, шаг за шагом, причем каждый шаг материализует больше; последний шаг вместо этого отключает в СУБД соединения nested loop (enable_nestloop).
| true541000100000222 |
LRURangeDefaultCoeffLRURangeMinCoeffLRURangeMaxCoefftargetLRURangePercentcriticalLRURangePercenttargetLRUAdjustIncCoefftargetLRUAdjustDecCoeffcriticalLRUAdjustCoeffstableLRUMinCountunstableLRUMaxCountdisableLRUCollectionUsageThresholdmemGCCollectionThresholdCooldown | doubledoubledoublelonglongdoubledoubledoublelonglongbooleanint | Параметры тюнера кэшей сервера (LRU). Элемент кэша живет базовое время этого кэша, умноженное на общий множитель, а тюнер двигает множитель по памяти, которую старое поколение Java-кучи продолжает занимать после сборки мусора, чтобы кэши занимали свободную память и не больше. Старое поколение делится четырьмя уровнями: критический, на 100 - criticalLRURangePercent процентах от него, и ниже, с шагом в criticalLRURangePercent, а затем в targetLRURangePercent, верхняя, средняя и нижняя границы целевого диапазона (85, 70, 60 и 50 процентов при значениях по умолчанию).
| 1.00.15.010151.02.01.04080false90 |
queryLengthAverageMaxqueryTimeAverageMaxqueryExecuteDegreetimeStartedAverageMaxCoefftimeStartedDegreemaxUsedTempRowsAverageMaxmaxUsedTempRowsDegreeusedTempRowsAverageMaxusedTempRowsDegreelastTempTablesActivityAverageMax | intintintdoubledoubleintdoubleintdoubleint | Оценка в механизме перезапуска соединений (см. periodRestartConnections, percentRestartConnections): при каждом запуске перезапускаются соединения с наибольшей оценкой: соединение заменяется новым, временные таблицы, которыми сессия еще пользуется, переезжают на него вместе со строками, остальные и prepared statement'ы пропадают. Параметры ...AverageMax - нормальные величины, ...Degree - степени, в которые возводятся отношения к ним; временные таблицы соединения измеряются общим числом строк в них. Оценка соединения складывает
| 100001000021.258500025004180000 |
disableCombineFilters | boolean | Не объединять действующие на группу объектов интерактивной формы фильтры - постоянные, добавленные пользователем и фильтры представления - в одно закэшированное условие, а вычислять и кэшировать каждый из них отдельно. Строки, которые показывает форма, в обоих случаях одни и те же | false |
asyncValuesLongCacheThreshold | int | Длина введённого текста, начиная с которой результаты подстановки значений свойства кэшируются в более долгоживущем из двух кэшей; более короткие, общие и потому чаще повторяющиеся запросы попадают в другой | 4 |
Помимо системных параметров, в платформе также существуют параметры запуска, которые задаются немного по другому и актуальны преимущественно для процессов запуска (инициализации) различных компонент платформы, а также доступа к этим компонентам.