Перейти к основному содержимому
Версия: 5.x

Параметры работы

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

  • В java коде в файле lsfusion.server.physics.admin.Settings.java (актуально для форков платформы)
  • В lsfusion.properties (обычно являются частью проекта, а значит действует по умолчанию для всех инсталляций) - название параметра должно начинаться на settings (например settings.enableUI)
  • В conf/settings.properties (для конкретных инсталляций) - название параметра должно начинаться на settings
  • В Java параметрах запуска название параметра должно начинаться на D и settings (например -Dsettings.enableUI=2)
  • В БД: Администрирование > Система > Настройки > Параметры. В этом интерфейсе можно задать как глобальные настройки, так и настройки для конкретных ролей
  • Во время выполнения действия, при помощи системных действий: Service.pushSetting[STRING, STRING], Service.popSetting[STRING] (перегружают значение свойства для всего текущего потока).
Тип параметраОписаниеПо умолчанию
enableUIintОпределяет доступ к пользовательскому интерфейсу (в том числе для form api)
2 - Разрешать анонимный доступ
1 - Разрешать только аутентифицированный доступ
0 - Не разрешать доступ
1 (при старте сервера в режиме разработки - 2)
enableAPIintОпределяет доступ к программному интерфейсу (за исключением form api)
2 - Разрешать анонимный доступ
1 - Разрешать только аутентифицированный доступ
0 - Не разрешать доступ
1 (при старте сервера в режиме разработки - 2)
freeConnectionsintМаксимальное количество соединений в пуле соединений на сервере приложений12
statDegreeintОснование используемое для оценки количества записей (статистики) всеми оптимизаторами. Так оптимизаторы любое количество записей считают равным заданному основанию в некоторой степени (например если количество записей реально равно 1000, а основание 5, то оптимизатор считает количество записей равным 5 в 4-й степени). Соответственно, чем больше основание, тем менее точной становится статистика, а значит уменьшается время компиляции, размеры кэшей и генерируемых запросов, но при этом может существенно повышаться вероятность ошибки при построении правильного плана запроса.5
authTokenExpirationintВремя действия токена аутентификации в минутах.60*24 (1 день)
reserveIDStepintКоличество ID, которые сразу резервирует сервер приложений для оптимизации при выполнении одиночных операций добавления объектов (при асинхронном вводе, одиночном NEW и т.п.)50
excessThreadAllocatedBytes, accessInterruptCountlong, intОпределяют порог и количество итераций замера памяти, в течении которых этот порог превышен, после которых java поток будет автоматически прерываться. Этот механизм как правило используется для повышения отказоустойчивости сервера приложений.5GB, 4
queryLengthTimeoutintПараметры механизма материализации запросов. queryLengthTimeout - с какой длины запроса включать этот механизм1000
useRequestTimeoutbooleanВключает механизм повторных удаленных вызовов, если эти вызовы выполняются слишком долго. Необходимо для разрешения ситуаций, когда вызов выполнен на сервере, но ответ из-за сетевых проблем не приходит (где-то теряется). Последнее обычно бывает, когда сервер приложений работает в виртуализированной среде. Соответственно, в таком случае эту настройку рекомендуется включать, и выключать в обратном случае.true
tempTablesTimeThreshold, tempTablesCountThresholdint, intОпределяют минимальный порог времени жизни (в секундах) временной таблицы и количество таблиц на соединение, при превышении которых эти временные таблицы начинают очищаться / удаляться в регламентном режиме. Минимальный порог времени жизни таблицы должен быть соизмерим со стандартным временем использования временной таблицы. Чем эти пороги меньше, тем меньше потребление ресурсов сервером бд, но тем выше вероятность возникновения "ротации кэшей"240, 40
queryRowCountPessLimit, queryRowCountOptDividerint, intПараметры механизма защиты от слишком больших запросов. queryRowCountPessLimit - минимальное количество записей, для которых начинает работать эта защита, queryRowCountOptDivider - порог, при превышении которого сервер приложений будет кидать ошибку (задается как часть памяти от всей имеющейся в распоряжении сервера приложений памяти, так если равно значение параметра равно 50, а объем памяти 100GB, то порог равен 100GB/50=2GB).1000, 50
queryLengthLimitintПараметры механизма защиты от слишком длинных запросов. queryLengthLimit - длина запроса, при превышении которого сервер приложений будет кидать ошибку.2000000
remoteLogTimeintПорог времени выполнения (в миллисекундах), при превышении которого удаленный вызов записывается в соответствующий лог (server-remote)3000
explainThreshold, explainJavaStack, explainCompileint, boolean, booleanПараметры вывода логов планов выполнения запросов
  • explainThreshold - порог времени выполнения (в миллисекундах), при превышении которого SQL-запрос записывается в соответствующий лог (explain). Используется только если для пользователя включен Service.explainAnalyzeMode[User].
  • explainJavaStack - определяет надо ли выводить помимо lsf-стэка, также и java-стэк в лог.
  • explainCompile - выводит в специальный лог (explaincompile) информацию о компиляции запроса (предполагаемые планы, проталкивания условий внутрь подзапросов и т.п.).
100, false, false
startServerAnyWaybooleanСтартовать сервер, даже при наличии ошибок в структуре индексов или синхронизации метаданныхfalse
conflictSleepThreshold, conflictSleepTimeDegreeint, intПараметры устранения повторяющихся update conflict'ов:
  • сonflictSleepThreshold - после какого количества неудачных (когда возникал конфликт) попыток включать механизм.
  • conflictSleepTimeDegree - основание времени (в секундах), на степень попыток которого необходимо останавливать поток (например если основание 2 то на третьей попытке таймаут будет 8, на четвертой - 16 и т.п.)
3, 2
timeoutNanosPerRowintСреднее количество наносекунд на обработку одного ряда (необходимо для оценки того, сколько приблизительно должен выполняться запрос). Если это расчетное время превышено платформа пытается материализовать некоторые подзапросы (или как-то изменить этот запрос на более пессимистичный) и выполнить запрос снова. Уменьшение этого параметра может приводить, к более частым материализациям и вообще дополнительным повторным выполнениям запроса, увеличение может привести к использованию неправильных планов (прежде всего nested loop'ов на соединении больших таблиц), в случаях когда, к примеру, SQL сервер неправильно оценивает статистику подзапросов.20
deadLockThresholdintПараметры устранения повторяющихся dead lock'ов. deadLockThreshold - после какого количества неудачных (когда возникал dead lock) попыток включать механизм.0
periodRestartConnections, percentRestartConnectionsint, intПараметры механизма перестарта соединений. periodRestartConnections - определяет как часто (период в секундах) будет запускаться этот механизм. percentRestartConnections - какой процент соединений с максимальным скорингом будет перестартовываться.60, 1
closeFormDelayintПериод, который дается клиенту на то, чтобы закончить все дела с формой после инициации ее закрытия на сервере (этот механизм нужен для экономии round trip запроса при закрытии формы).5000
constraintRowsLimitintОпределяет сколько рядов выводить при выдаче сообщения о нарушении ограничения30
defaultCompareForStringContainsbooleanИспользовать Содержит в качестве фильтра по умолчанию в пользовательских фильтрахfalse
limitHintIncrementComplexity, limitComplexityGrowthCoeff, limitHintIncrementStat, limitHintIncrementValueComplexity, limitApplyHintIncrementComplexity, limitApplyHintIncrementStatint, double, int, int, int, intПараметры управления сложностью изменений (материализация изменений свойств, когда сложность инкрементальных вычислений становится слишком большой):
  • limitHintIncrementComplexity - порог сложности (определяется как приблизительное количество выполняемых операторов), при превышении которого изменения свойства материализуются во временную таблицу. Этот порог должен превышаться или условием, определяющим наборы объектов, для которых изменилось свойство, или непосредственно значением этого свойства (для значения также дополнительно проверяется, что рост сложности по сравнению с вычислением без изменений превышает limitComplexityGrowthCoeff)
  • limitHintIncrementStat - порог предполагаемого количества наборов объектов, для которых изменяется свойство, при превышении которого изменения материализоваться не будут (чтобы не материализовывать очень большое количество данных). Это значение умножается на квадрат отношения сложности изменения к порогу (чем больше сложность, тем меньшим злом является дополнительные затраты на сохранение большого объема данныъ), а также, после этого умножения, проверяется, что полученный порог должен быть не меньше максимального количества записей среди всех использованных временных таблиц (если меньше, то увеличивается до этого значения).
  • limitHintIncrementValueComplexity - по умолчанию если один из параметров свойства константное заранее известное значение, его изменения материализоваться не будут. В то же время сложность может расти очень быстро, поэтому в платформе существует дополнительный порог, при превышении которого изменения будут материализоваться даже в этом случае (с константным параметром). Впрочем, если свойство помечено специальной опцией COMPLEX, или зависит от такого свойства, его изменения, когда один из параметров константное значение, не будут материализоваться никогда.
  • limitApplyHintIncrementComplexity, limitApplyHintIncrementStat - параметры аналогичные верхним без префикса Apply, и соответственно используются при выполнении действий внутри оператора применения изменений (APPLY) (например внутри обработки событий)
При повышении всех вышеперечисленных параметров компилятор и оптимизатор будут иметь больше информации (возможно избыточной) для построения более эффективных планов, но при этом будут потреблять больше процессорного времени / памяти (зачастую значительно, поэтому не рекомендуется устанавливать их слишком большими)
50, 1.5, 200, 1000, 100, 1000
excessThreadAllocatedBytes, excessInterruptCount, threadAllocatedMemoryPeriodlong, int, intПараметры механизма защиты от слишком большого потребления памяти на сервере приложений:
  • excessThreadAllocatedBytes - количество байт, при превышении которого считается, что поток потребляет слишком много памяти
  • excessInterruptCount - количество подряд идущих замеров, в течении которых поток потребляет слишком памяти, при превышение которого поток будет прерван
  • threadAllocatedMemoryPeriod - период (в секундах), определяющий как часто проводятся замеры потребления памяти потоками
5368709120L (5GB), 4, 180 (3 минуты)
useSavePointsThreshold, savePointCountForExceptions, updateSavePointsMinMultiplier, updateSavePointsMaxMultiplierint, int, double, doubleПараметры механизма использования savepoint'ов в транзакциях (для того чтобы не перестартовывать всю транзакцию, например в механизме материализации подзапросов):
  • useSavePointsThreshold - количество одновременных savepoint'ов на сервере приложений. Чем выше, тем реже будут перестартовываться транзакции, но с тем большей вероятностью некоторые СУБД (например Postgres) будут уходить в глобальные блокировки (LWLock - в Postgres). Этот параметр является адаптивным может меняться в зависимости от реальной потребности в использовании savepoint'ов (так как механизм savepoint'ов включается только после некоторого количества перестартов транзакции).
  • savePointCountForExceptions - количество перестартов транзакции, при превышении которого включается механизм savepoint'ов (-1 - отключить вообще).
  • updateSavePointsMaxMultiplier, updateSavePointsMinMultiplier - минимальный и максимальные коэффициенты, которые могут устанавливаться сервером при адаптивном определении количества одновременных savepoint'ов на сервере приложений (к примеру по умолчанию эти коэффициент 0.8 и 3.0, то есть минимальное таргетируемое количество одновременных savepoint'ов - 5*0.8=4, максимальное - 5*3=15)
5, -1, 0.8, 3.0
editLogicalOnSingleClickbooleanОпределяет будет ли событие изменения свойства логического типа на форме инициироваться по одиночному (true) или двойному (false) клику мышиfalse
editActionOnSingleClickbooleanОпределяет будет ли событие вызова действия на форме инициироваться по одиночному (true) или двойному (false) клику мышиfalse
к сведению

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