Performance Tuning - Smile CDR Documentation

Performance Tuning for FHIR Storage (Relational)

The default FHIR Storage (Relational) module configuration is tuned to prioritize complete FHIR specification conformance and feature set over prioritizing performance.

This page outlines various settings that can be set to improve performance.

Improving Write Performance

In many scenarios large amounts of data needs to be written to the CDR (e.g. during initial backloads, or for update-heavy applications). Even for routine operation, if your architecture involves lots of resource writing (create/update/patch/etc) then it is worth

The following considerations may be helpful in planning for high-volume write scenarios:

Smile CDR Settings

The following settings can be used to tune your system for the fastest write performance.

Example Properties File

The following snippet may be uses in your configuration properties file in order to enable many of the settings described above.

# Disable Audit and Transaction Logs
module.clustermgr.config.audit_log.db.enabled=false
module.clustermgr.config.audit_log.broker.enabled=false
module.clustermgr.config.transactionlog.enabled=false

# Read performance
# Note: Setting this property to true will prevent pagination from working with the $everything operation
module.persistence.config.always_use_offset_searches               =true

# Write Performance
module.persistence.config.seed_default_search_params               =false
module.persistence.config.suppress_string_indexing_in_tokens       =true
module.persistence.config.dao_config.tag_storage_mode              =INLINE
module.persistence.config.dao_config.delete_enabled                =false
module.persistence.config.dao_config.match_url_cache.enabled       =true
module.persistence.config.dao_config.mass_ingestion_mode           =true
module.persistence.config.dao_config.enforce_reference_target_types=false

# Reduce the number of active Search Parameters. The values below are an example only,
# your specific needs may be different.
module.persistence.config.search_parameter_seeding.disable_patterns=*
module.persistence.config.search_parameter_seeding.enable_patterns =\
  *:patient\
  Practitioner:identifier\
  Location:identifier\
  Organization:identifier\
  ExplanationOfBenefit:identifier\
  ExplanationOfBenefit:type\
  ExplanationOfBenefit:service-date

Copy

Environment Preparation

Data Design

Disabling Non Resource DB History

This setting controls whether non-resource (ex: Patient is a resource, MdmLink is not) DB history is enabled. Presently, this only affects the history for MDM links, but the functionality may be extended to other domains.

Clients may want to disable this setting for performance reasons as it populates a new set of database tables when enabled.

Setting this property explicitly to false disables the feature: Non Resource DB History

Enabling Index Storage Optimization LMA

If enabled, the server will not write data to the SP_NAME, RES_TYPE columns for all HFJ_SPIDX_xxx tables.

This setting may be enabled on servers where HFJ_SPIDX_xxx tables are expected to have a large amount of data (millions of rows) in order to reduce overall storage size. The size of 'HFJ_SPIDX_xxx' tables can be lowered by up to 10%, saving up to 5% of persistent database space.

Setting this property explicitly to true enables the feature: Optimize index storage

Limitations

Tuning External Object Storage

When using Externalized Binary Storage or Externalized Resource Body Storage, make sure to tune External Object Storage connection pool size and timeouts appropriately. The default values are conservative to ensure stability on standard hardware. When processing large volumes of data, these settings often limit throughput.

See External Object Storage Performance Tuning for detailed information on configuring connection pool size, timeouts, and queue parameters.

Smile CDR Observability

Performance Tuning

Operating

Monitoring Basics Externalized Metrics Smile CDR Observability Performance Tuning Troubleshooting

Troubleshooting