Skip to main content
Version: V3 (Ignition 8.3)

Tamaki MES Properties

This page consolidates all Spring configuration properties for Tamaki MES services.

Hibernate

PropertyDefaultDescription
hibernate.jdbc.batch_size50Number of statements Hibernate will batch per roundtrip to the database. Increase to reduce network roundtrips; ensure your JDBC driver and DB support batching.

Notes

  • Tuning: Start at 50–100. Validate with database metrics and profiling.
  • Constraints: Consider triggers/sequences that may affect batching semantics.

Db

Driver-level connection properties that Tamaki MES requires on the Ignition database connection it uses, per database vendor. The properties are added only when the Allow Module to Manage Datasource gateway setting is enabled (it is off by default): the module then checks the datasource's Extra Connection Properties at startup (and when the MES datasource setting changes) and adds any required keys that are missing - exactly as if they were entered in the gateway web UI, including the automatic connection-pool restart. Keys you have set explicitly are never overridden; a differing explicit value is kept and logged as a warning. While the setting is disabled the module never modifies the connection; it only logs a startup warning if required properties are missing.

PropertyDefaultDescription
db.extra_connection_properties.mssqlsendStringParametersAsUnicode=falseRequired properties for Microsoft SQL Server connections (semicolon-separated key=value pairs).
db.extra_connection_properties.mysql(empty)Required properties for MySQL connections.
db.extra_connection_properties.mariadb(empty)Required properties for MariaDB connections.
db.extra_connection_properties.postgresql(empty)Required properties for PostgreSQL connections.

Notes

  • Why sendStringParametersAsUnicode=false on SQL Server: the Microsoft JDBC driver sends string parameters as nvarchar by default, while Tamaki MES key columns are varchar. Under SQL Server collations the resulting implicit conversion prevents index seeks, so every keyed UPDATE scans an entire index under update locks. With many active OEE locations this causes severe lock contention and recurring deadlocks (Transaction ... was deadlocked on lock resources). Setting the property restores index seeks.
  • The properties are applied to the database connection selected as the MES datasource in the Tamaki MES gateway settings, not to other Ignition database connections.
  • The properties change driver behavior for everything using that database connection, not just Tamaki MES - named queries, tag history, scripts, or other modules pointed at the same connection are affected too. In particular, with sendStringParametersAsUnicode=false string parameters are sent in the database collation's code page instead of as Unicode (nvarchar). If non-MES tables on the same connection store non-Latin text (e.g. macrons, CJK) in nvarchar columns, give Tamaki MES its own database connection, set the property explicitly to true (the module respects explicit values), or leave Allow Module to Manage Datasource disabled.
  • On redundant gateways, only the master node applies changes; the configuration synchronizes to the backup automatically.
  • If you intentionally need a conflicting driver setting, set it explicitly in the gateway's Extra Connection Properties field - the module will respect it - or simply leave Allow Module to Manage Datasource disabled.

Transaction

PropertyDefaultDescription
transaction.retry.max_attempts3Maximum retry attempts for transient transactional failures.
transaction.retry.backoff_delay_ms500Backoff delay between retries (milliseconds).
transaction.retry.backoff_delay_multiplier2Multiplier applied to the previous delay for exponential backoff.

Notes

Effective delay sequence is backoff_delay_ms * multiplier^(attempt-1) until max attempts.

Async Executor

Bounds the thread pool that runs @Async work (currently the Perspective tree-update push handlers). Bounding it stops a burst of change events from spawning unlimited threads — and, by extension, unlimited database connections — against the gateway's shared connection pool.

PropertyDefaultDescription
async.executor.core_pool_size6Threads kept alive to service async tasks at steady state.
async.executor.max_pool_size12Hard ceiling on concurrent async threads; reached only when the queue is full. Caps connection demand from async work.
async.executor.queue_capacity500Tasks buffered before the pool grows toward max_pool_size. Absorbs bursts.
async.executor.keep_alive_seconds60Idle time before non-core threads are released (seconds).

Notes

  • With a bounded queue, the pool only grows from core_pool_size toward max_pool_size once the queue is full; until then tasks queue and the core threads drain them. So core_pool_size is the effective steady-state concurrency, queue_capacity is the burst buffer, and max_pool_size is a safety valve.
  • When both the pool and the queue are saturated, new tasks run on the calling thread (caller-runs backpressure) rather than being dropped — this slows the producer instead of overrunning the pool.
  • Keep max_pool_size comfortably below the database connection-pool limit, accounting for the other concurrent consumers (OEE/operation/inventory data collection, REST requests).

Import

PropertyDefaultDescription
import.batch_size1000Number of records committed per batch when importing data (materials, equipment, OEE configs, etc.).
import.batch_flush_delay_ms5000Delay between batch flushes during import (milliseconds) to throttle database load on large imports.
import.restore_thread_pool_size4Maximum threads used to import entity types in parallel during a backup restore. Bounds the database connections a restore can consume.

Cache

PropertyDefaultDescription
cache.default_expiry_ms600000Time to live for cache entries in milliseconds.
cache.max_heap_entries10000Maximum number of entries in cache per entity type.
cache.max_disk_size_mb100Maximum size of overflow disk cache in megabytes.
cache.disk_persistence_pathtamakimes/cachePath to location of disk cache.
cache.equipment.enabledtrueEnable caching of equipment lookups. Disable any region to read that entity straight from the database.
cache.equipment_class.enabledtrueEnable caching of equipment class lookups.
cache.material.enabledtrueEnable caching of material lookups.
cache.material_class.enabledtrueEnable caching of material class lookups.
cache.department.enabledtrueEnable caching of department lookups.
cache.location.enabledtrueEnable caching of location lookups.
cache.unit_of_measure.enabledtrueEnable caching of unit of measure lookups.
cache.unit_of_measure_conversion.enabledtrueEnable caching of unit of measure conversion lookups. Disable to always read conversions from the database.
cache.production_order.enabledtrueEnable caching of production order detail reads. Disable for high-churn workloads where stale reads are unacceptable.
cache.production_order.expiry_ms30000Time to live for production order cache entries in milliseconds. Kept short because production orders change frequently; bounds how stale a cached read can be.

Inventory

PropertyDefaultDescription
inventory.data_collection.execution_interval_ms250Interval between inventory data collection executions (milliseconds).

Notes

  • Align with PLC tag update rates to avoid stale reads.

OEE

PropertyDefaultDescription
oee.data_collection.execution_interval_ms250Interval between OEE data collection executions (milliseconds).
oee.data_collection.flush_check_interval_ms10000Frequency to check whether buffered OEE data should be flushed to the database (milliseconds).
oee.data_collection.prune_records_cron0 0 0 * * ?Cron expression for pruning old OEE records. Uses Spring Cron Format. The default value is Daily at Midnight.
oee.data_collection.logs.throttling.threshold10The maximum number of errors to show within the throttling window before suppressing them.
oee.data_collection.logs.throttling.window_ms5000The logs throttling window (milliseconds). Duplicate logs inside this window will be suppressed.
oee.alarms.alarm_flush_interval_ms10000Interval between OEE alarm flush operations (milliseconds).
oee.pruning.batch_size1000Number of OEE records deleted per pruning batch.
oee.pruning.batch_delay_ms500Delay between pruning batches to reduce DB load (milliseconds).
oee.optimizations.cron0 0 0 * * ?Cron expression for the OEE optimizations job (heal then backfill). Uses Spring Cron Format. The default value is Daily at Midnight.
oee.optimizations.heal.enabledtrueEnables the heal phase of the optimizations job, which repairs faulted OEE state, mode, and OEE records.
oee.optimizations.heal.batch_size200Number of faulted record IDs fetched per location, per record type, per healing batch.
oee.optimizations.heal.max_per_run1000Soft cap on the number of records healed per record type (state/mode/OEE) per scheduled run.
oee.optimizations.heal.parallelism4Number of locations healed in parallel during a single healing run.
oee.optimizations.backfill.enabledtrueEnables the backfill phase of the optimizations job, which pre-computes OEE calculation records for configured period types.

Notes

  • Execution Interval

    • Lower → collects data more frequently, more CPU/memory use.
    • Higher → collects data less frequently, less CPU/memory use, risk of missing short-lived events.
  • Flush Check Interval

    • Lower → more DB writes.
    • Higher → fewer DB writes, higher crash-loss risk.
  • Flush Check Interval needs to be larger than Execution Interval

  • Mismatch causes wasted flushes (too frequent) or buffer growth (too slow).

Operation

PropertyDefaultDescription
operation.data_collection.execution_interval_ms250Interval between operation data collection executions (milliseconds).

Shift

PropertyDefaultDescription
shift.data_collection.expression_schedule_evaluation_interval_ms500Interval for evaluating expression-based shift schedules (milliseconds).
shift.data_collection.ignition_schedule_evaluation_interval_ms10000Interval for evaluating Ignition-bound shift schedules (milliseconds).

Expression

PropertyDefaultDescription
expression.health_check.min_batch_size5Minimum number of expressions evaluated per health check cycle.
expression.health_check.scan_interval_ms3000Interval between expression health check scans (milliseconds).
expression.health_check.max_log_expressions10Max number of expressions logged when anomalies are detected.
expression.logs.throttling.window_ms5000The logs throttling window (milliseconds). Duplicate logs inside this window will be suppressed.

Tracegraph

PropertyDefaultDescription
tracegraph.max_nodes10000Maximum number of nodes visited during a trace to prevent runaway traversal.
tracegraph.max_depth100Maximum traversal depth for trace graph operations.

Additional Logging

PropertyDefaultDescription
logs.diagnosticstrueWhether or not to enable additional diagnostic logging.
PropertyDefaultDescription
tree.search.max_results1000Maximum number of nodes returned by tree search components (Material, Location, Personnel, Downtime Reason, etc.).