Skip to main contentLinuxForHealth FHIR® Server

IBM FHIR Server 4.5.0 - Performance

IBM FHIR Server 4.5.0 - Performance

Workloads

  1. Ingestion
  2. Client Access

Ingestion Workload

The fhir-bucket utility scans an IBM Cloud Object Store (COS) bucket for matching json or ndjson files. Matching files are recorded in the fhirbucket database and this information is subsequently used to drive the loading of those files into the LinuxForHealth FHIR Server.

The test described here uses bundles based on Synthea - Synthetic Mass data. The original bundles have been preprocessed and broken into smaller bundles of no more than 100 resources. Resources within original bundles contain references to other resources within the same bundle. Traditionally, these references would be resolved by the LinuxForHealth FHIR Server on ingestion. However, because the bundles are being broken into smaller units of work, the references must be resolved in advance. This requires that any create requests using server-asserted ids must be rewritten as client asserted id requests, using PUT.

The fhir-bucket uses a large thread-pool to fetch the bundles from COS and POST each to the LinuxForHealth FHIR Server. The result bundle is parsed and each of the returned logical resource ids are stored in the fhirbucket database, along with some timing metrics.

Client Access

The client access workload is generated using fhir-bucket running within the same K8s cluster. Random patients are selected from the fhirbucket.logical_resources table which is populated by first running the fhir-bucket ingestion mode. The client workload is comprised of the following steps:

  1. Select a random patient id and submit to the thread-pool;
  2. Create a Bundle resource containing a read for the patient resource and a search for ExplanationOfBenefit resources which refer to that patient limit 20;
  3. POST the bundle request;
  4. Process the response, constructing a new Bundle resource containing GET requests for each Claim and Provider referenced by the ExplanationOfBenefit resources contained in the first response.
  5. Collect statistics on the number of calls, number of resources returned and the time taken for each request.

The request bundles are configured to use a type of TRANSACTION. This provides the best performance as the LinuxForHealth FHIR Server processes each request within the bundle using a single transaction, reducing the commit load on the database.

System Configuration

Configuration ItemValue
IBM FHIR ServerRelease 4.5.0
Client thread-pool size300
FHIR Server Deployment Size6 PODS
PostgreSQL ServiceIBM Cloud Database
PostgreSQL Version12.4
PostgreSQL CPU9 cores dedicated
PostgreSQL RAM24GB
PostgreSQL Storage1TB up to 10K IOPS

Top Resource Counts

Top resource counts in the database using the query:

SELECT rt.resource_type, count(*)
FROM fhirdata.logical_resources lr,
fhirdata.resource_types rt
WHERE rt.resource_type_id = lr.resource_type_id
GROUP BY rt.resource_type
ORDER BY 2 DESC;
resource_typecount
Observation28643640
Claim9809811
Procedure9533768
Encounter8788209
ExplanationOfBenefit7795369
DiagnosticReport2942204
MedicationRequest2761835
Condition1755335
Immunization1656535
CarePlan1320978
Goal347835
CareTeam341226
Practitioner319783
Organization319729
AllergyIntolerance216350
Patient174388

The full list is included at the end of this report.

Ingestion Performance

To compute the ingestion rate we can query the fhirbucket.logical_resources table, looking for the first and last creation times for the latest run of the loader, loader_instance_id = 212 in the example below:

select count(*), max(created_tstamp) - min(created_tstamp) as elapsed
from fhirbucket.logical_resources lr, fhirbucket.resource_bundle_loads bl
where bl.resource_bundle_load_id = lr.resource_bundle_load_id
and bl.loader_instance_id = 212;
countelapsed
52552500:09:19.253087

Ingestion rate:

525525 resources
---------------- = 940 resources/second
559 seconds

The inserts into the Observation parameter tables for token_values and quantity_values come from composite values, and there is room for improvement for how these inserts are handled:

Application Breakdown

The GC activity is very reasonable given the complexity of FHIR resource parsing and validation:

GC CPU Time

The throughput is stable throughout the loading period:

Throughput

The top database operations reflect what is seen in the application breakdown, with observation_token_values and observation_quantity_values being a good target for future improvement:

Top DB Operations

Time series view of the same data:

TOP DB Operations Timeseries

Client Read Performance

The average server response time reported by the client is consistently under 180ms as shown below (statistics are sampled and printed by fhir-bucket every 10 seconds:

STATS: FHIR= 1643.8 calls/s, rate=16825.1 resources/s, response time=0.179 s
STATS: FHIR= 1655.6 calls/s, rate=16860.8 resources/s, response time=0.178 s
STATS: FHIR= 1693.2 calls/s, rate=17323.5 resources/s, response time=0.176 s
STATS: FHIR= 1699.1 calls/s, rate=17431.5 resources/s, response time=0.174 s
STATS: FHIR= 1647.1 calls/s, rate=16849.2 resources/s, response time=0.179 s
STATS: FHIR= 1676.6 calls/s, rate=17180.6 resources/s, response time=0.176 s
STATS: FHIR= 1691.3 calls/s, rate=17242.2 resources/s, response time=0.175 s
STATS: FHIR= 1663.7 calls/s, rate=17043.8 resources/s, response time=0.178 s
STATS: FHIR= 1639.9 calls/s, rate=16723.9 resources/s, response time=0.175 s

Throughput is constrained by exhaustion of PostgreSQL CPU.

Client Workload Performance Metrics

Database processing rate is slightly more than 3000 transactions per second. This reached 15K transactions/second when using BATCH as the bundle type instead of TRANSACTION. In that case, although the TPS is higher, the overall throughput is lower because each request required multiple transactions.

DB Transactions Per SecondWeb Transaction Time

The peak aggregate CPU usage for the POD (including the fhirbucket instance driving the test workload) is around 36 cores.

FHIR POD CPU Usage

No significant hotspots in the application breakdown:

Application Breakdown

GC times are remarkably good, especially given the complexity of processing FHIR resources.

GC CPU Time

The top DB operations align with the above Application Breakdown.

Top DB OperationsTop DB Ops Timeseries

The database CPU is hitting its limit, suggesting that scaling up to more cores would increase throughput.

DB CPU Usage

Postgres Database Configuration

NameCategorySettingUnitDescription
DateStyleClient Connection Defaults / Locale and FormattingISO, MDYSets the display format for date and time values.
IntervalStyleClient Connection Defaults / Locale and FormattingpostgresSets the display format for interval values.
TimeZoneClient Connection Defaults / Locale and FormattingUTCSets the time zone for displaying and interpreting time stamps.
allow_system_table_modsDeveloper OptionsoffAllows modifications of the structure of system tables.
application_nameReporting and Logging / What to LogpgAdmin 4 - DB:fhirdbSets the application name to be reported in statistics and logs.
archive_cleanup_commandWrite-Ahead Log / Archive RecoverySets the shell command that will be executed at every restart point.
archive_commandWrite-Ahead Log / Archiving/usr/bin/pgbackrest —config /conf/postgresql/pgbackrest.conf —stanza=formation archive-push %pSets the shell command that will be called to archive a WAL file.
archive_modeWrite-Ahead Log / ArchivingonAllows archiving of WAL files using archive_command.
archive_timeoutWrite-Ahead Log / Archiving1800sForces a switch to the next WAL file if a new file has not been started within N seconds.
array_nullsVersion and Platform Compatibility / Previous PostgreSQL VersionsonEnable input of NULL elements in arrays.
authentication_timeoutConnections and Authentication / Authentication30sSets the maximum allowed time to complete client authentication.
autovacuumAutovacuumonStarts the autovacuum subprocess.
autovacuum_analyze_scale_factorAutovacuum0.1Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples.
autovacuum_analyze_thresholdAutovacuum50Minimum number of tuple inserts, updates, or deletes prior to analyze.
autovacuum_freeze_max_ageAutovacuum200000000Age at which to autovacuum a table to prevent transaction ID wraparound.
autovacuum_max_workersAutovacuum3Sets the maximum number of simultaneously running autovacuum worker processes.
autovacuum_multixact_freeze_max_ageAutovacuum400000000Multixact age at which to autovacuum a table to prevent multixact wraparound.
autovacuum_naptimeAutovacuum60sTime to sleep between autovacuum runs.
autovacuum_vacuum_cost_delayAutovacuum20msVacuum cost delay in milliseconds, for autovacuum.
autovacuum_vacuum_cost_limitAutovacuum-1Vacuum cost amount available before napping, for autovacuum.
autovacuum_vacuum_scale_factorAutovacuum0.2Number of tuple updates or deletes prior to vacuum as a fraction of reltuples.
autovacuum_vacuum_thresholdAutovacuum50Minimum number of tuple updates or deletes prior to vacuum.
autovacuum_work_memResource Usage / Memory-1kBSets the maximum memory to be used by each autovacuum worker process.
backend_flush_afterResource Usage / Asynchronous Behavior08kBNumber of pages after which previously performed writes are flushed to disk.
backslash_quoteVersion and Platform Compatibility / Previous PostgreSQL Versionssafe_encodingSets whether ”\’” is allowed in string literals.
bgwriter_delayResource Usage / Background Writer200msBackground writer sleep time between rounds.
bgwriter_flush_afterResource Usage / Background Writer648kBNumber of pages after which previously performed writes are flushed to disk.
bgwriter_lru_maxpagesResource Usage / Background Writer100Background writer maximum number of LRU pages to flush per round.
bgwriter_lru_multiplierResource Usage / Background Writer2Multiple of the average buffer usage to free per round.
block_sizePreset Options8192Shows the size of a disk block.
bonjourConnections and Authentication / Connection SettingsoffEnables advertising the server via Bonjour.
bonjour_nameConnections and Authentication / Connection SettingsSets the Bonjour service name.
bytea_outputClient Connection Defaults / Statement BehaviorhexSets the output format for bytea.
check_function_bodiesClient Connection Defaults / Statement BehavioronCheck function bodies during CREATE FUNCTION.
checkpoint_completion_targetWrite-Ahead Log / Checkpoints0.7Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval.
checkpoint_flush_afterWrite-Ahead Log / Checkpoints328kBNumber of pages after which previously performed writes are flushed to disk.
checkpoint_timeoutWrite-Ahead Log / Checkpoints300sSets the maximum time between automatic WAL checkpoints.
checkpoint_warningWrite-Ahead Log / Checkpoints30sEnables warnings if checkpoint segments are filled more frequently than this.
client_encodingClient Connection Defaults / Locale and FormattingUNICODESets the client’s character set encoding.
client_min_messagesClient Connection Defaults / Statement BehaviornoticeSets the message levels that are sent to the client.
cluster_nameProcess TitlepostgresqlSets the name of the cluster, which is included in the process title.
commit_delayWrite-Ahead Log / Settings0Sets the delay in microseconds between transaction commit and flushing WAL to disk.
commit_siblingsWrite-Ahead Log / Settings5Sets the minimum concurrent open transactions before performing commit_delay.
constraint_exclusionQuery Tuning / Other Planner OptionspartitionEnables the planner to use constraints to optimize queries.
cpu_index_tuple_costQuery Tuning / Planner Cost Constants0.005Sets the planner’s estimate of the cost of processing each index entry during an index scan.
cpu_operator_costQuery Tuning / Planner Cost Constants0.0025Sets the planner’s estimate of the cost of processing each operator or function call.
cpu_tuple_costQuery Tuning / Planner Cost Constants0.01Sets the planner’s estimate of the cost of processing each tuple (row).
cursor_tuple_fractionQuery Tuning / Other Planner Options0.1Sets the planner’s estimate of the fraction of a cursor’s rows that will be retrieved.
data_checksumsPreset OptionsonShows whether data checksums are turned on for this cluster.
data_directory_modePreset Options0700Mode of the data directory.
data_sync_retryError HandlingoffWhether to continue running after a failure to sync data files.
db_user_namespaceConnections and Authentication / AuthenticationoffEnables per-database user names.
deadlock_timeoutLock Management10000msSets the time to wait on a lock before checking for deadlock.
debug_assertionsPreset OptionsoffShows whether the running server has assertion checks enabled.
debug_pretty_printReporting and Logging / What to LogonIndents parse and plan tree displays.
debug_print_parseReporting and Logging / What to LogoffLogs each query’s parse tree.
debug_print_planReporting and Logging / What to LogoffLogs each query’s execution plan.
debug_print_rewrittenReporting and Logging / What to LogoffLogs each query’s rewritten parse tree.
default_statistics_targetQuery Tuning / Other Planner Options100Sets the default statistics target.
default_table_access_methodClient Connection Defaults / Statement BehaviorheapSets the default table access method for new tables.
default_tablespaceClient Connection Defaults / Statement BehaviorSets the default tablespace to create tables and indexes in.
default_text_search_configClient Connection Defaults / Locale and Formattingpg_catalog.englishSets default text search configuration.
default_transaction_deferrableClient Connection Defaults / Statement BehavioroffSets the default deferrable status of new transactions.
default_transaction_isolationClient Connection Defaults / Statement Behaviorread committedSets the transaction isolation level of each new transaction.
default_transaction_read_onlyClient Connection Defaults / Statement BehavioroffSets the default read-only status of new transactions.
dynamic_shared_memory_typeResource Usage / MemoryposixSelects the dynamic shared memory implementation used.
effective_cache_sizeQuery Tuning / Planner Cost Constants23592968kBSets the planner’s assumption about the total size of the data caches.
effective_io_concurrencyResource Usage / Asynchronous Behavior12Number of simultaneous requests that can be handled efficiently by the disk subsystem.
enable_bitmapscanQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of bitmap-scan plans.
enable_gathermergeQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of gather merge plans.
enable_hashaggQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of hashed aggregation plans.
enable_hashjoinQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of hash join plans.
enable_indexonlyscanQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of index-only-scan plans.
enable_indexscanQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of index-scan plans.
enable_materialQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of materialization.
enable_mergejoinQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of merge join plans.
enable_nestloopQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of nested-loop join plans.
enable_parallel_appendQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of parallel append plans.
enable_parallel_hashQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of parallel hash plans.
enable_partition_pruningQuery Tuning / Planner Method ConfigurationonEnables plan-time and run-time partition pruning.
enable_partitionwise_aggregateQuery Tuning / Planner Method ConfigurationoffEnables partitionwise aggregation and grouping.
enable_partitionwise_joinQuery Tuning / Planner Method ConfigurationoffEnables partitionwise join.
enable_seqscanQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of sequential-scan plans.
enable_sortQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of explicit sort steps.
enable_tidscanQuery Tuning / Planner Method ConfigurationonEnables the planner’s use of TID scan plans.
escape_string_warningVersion and Platform Compatibility / Previous PostgreSQL VersionsonWarn about backslash escapes in ordinary string literals.
event_sourceReporting and Logging / Where to LogPostgreSQLSets the application name used to identify PostgreSQL messages in the event log.
exit_on_errorError HandlingoffTerminate session on any error.
extra_float_digitsClient Connection Defaults / Locale and Formatting1Sets the number of digits displayed for floating-point values.
force_parallel_modeQuery Tuning / Other Planner OptionsoffForces use of parallel query facilities.
from_collapse_limitQuery Tuning / Other Planner Options8Sets the FROM-list size beyond which subqueries are not collapsed.
fsyncWrite-Ahead Log / SettingsonForces synchronization of updates to disk.
full_page_writesWrite-Ahead Log / SettingsonWrites full pages to WAL when first modified after a checkpoint.
geqoQuery Tuning / Genetic Query OptimizeronEnables genetic query optimization.
geqo_effortQuery Tuning / Genetic Query Optimizer5GEQO: effort is used to set the default for other GEQO parameters.
geqo_generationsQuery Tuning / Genetic Query Optimizer0GEQO: number of iterations of the algorithm.
geqo_pool_sizeQuery Tuning / Genetic Query Optimizer0GEQO: number of individuals in the population.
geqo_seedQuery Tuning / Genetic Query Optimizer0GEQO: seed for random path selection.
geqo_selection_biasQuery Tuning / Genetic Query Optimizer2GEQO: selective pressure within the population.
geqo_thresholdQuery Tuning / Genetic Query Optimizer12Sets the threshold of FROM items beyond which GEQO is used.
gin_fuzzy_search_limitClient Connection Defaults / Other Defaults0Sets the maximum allowed result for exact search by GIN.
gin_pending_list_limitClient Connection Defaults / Statement Behavior4096kBSets the maximum size of the pending list for GIN index.
hot_standbyReplication / Standby ServersonAllows connections and queries during recovery.
hot_standby_feedbackReplication / Standby ServersoffAllows feedback from a hot standby to the primary that will avoid query conflicts.
huge_pagesResource Usage / MemoryoffUse of huge pages on Linux or Windows.
idle_in_transaction_session_timeoutClient Connection Defaults / Statement Behavior0msSets the maximum allowed duration of any idling transaction.
ignore_checksum_failureDeveloper OptionsoffContinues processing after a checksum failure.
ignore_system_indexesDeveloper OptionsoffDisables reading from system indexes.
integer_datetimesPreset OptionsonDatetimes are integer based.
jitQuery Tuning / Other Planner OptionsonAllow JIT compilation.
jit_above_costQuery Tuning / Planner Cost Constants100000Perform JIT compilation if query is more expensive.
jit_debugging_supportDeveloper OptionsoffRegister JIT compiled function with debugger.
jit_dump_bitcodeDeveloper OptionsoffWrite out LLVM bitcode to facilitate JIT debugging.
jit_expressionsDeveloper OptionsonAllow JIT compilation of expressions.
jit_inline_above_costQuery Tuning / Planner Cost Constants500000Perform JIT inlining if query is more expensive.
jit_optimize_above_costQuery Tuning / Planner Cost Constants500000Optimize JITed functions if query is more expensive.
jit_profiling_supportDeveloper OptionsoffRegister JIT compiled function with perf profiler.
jit_tuple_deformingDeveloper OptionsonAllow JIT compilation of tuple deforming.
join_collapse_limitQuery Tuning / Other Planner Options8Sets the FROM-list size beyond which JOIN constructs are not flattened.
krb_caseins_usersConnections and Authentication / AuthenticationoffSets whether Kerberos and GSSAPI user names should be treated as case-insensitive.
lc_collateClient Connection Defaults / Locale and FormattingC.UTF-8Shows the collation order locale.
lc_ctypeClient Connection Defaults / Locale and FormattingC.UTF-8Shows the character classification and case conversion locale.
lc_messagesClient Connection Defaults / Locale and Formattingen_US.UTF-8Sets the language in which messages are displayed.
lc_monetaryClient Connection Defaults / Locale and Formattingen_US.UTF-8Sets the locale for formatting monetary amounts.
lc_numericClient Connection Defaults / Locale and Formattingen_US.UTF-8Sets the locale for formatting numbers.
lc_timeClient Connection Defaults / Locale and Formattingen_US.UTF-8Sets the locale for formatting date and time values.
listen_addressesConnections and Authentication / Connection Settings0.0.0.0Sets the host name or IP address(es) to listen to.
lo_compat_privilegesVersion and Platform Compatibility / Previous PostgreSQL VersionsoffEnables backward compatibility mode for privilege checks on large objects.
local_preload_librariesClient Connection Defaults / Shared Library PreloadingpgextwlistLists unprivileged shared libraries to preload into each backend.
lock_timeoutClient Connection Defaults / Statement Behavior0msSets the maximum allowed duration of any wait for a lock.
log_autovacuum_min_durationReporting and Logging / What to Log1000msSets the minimum execution time above which autovacuum actions will be logged.
log_checkpointsReporting and Logging / What to LogonLogs each checkpoint.
log_connectionsReporting and Logging / What to LogoffLogs each successful connection.
log_destinationReporting and Logging / Where to LogstderrSets the destination for server log output.
log_disconnectionsReporting and Logging / What to LogoffLogs end of a session, including duration.
log_durationReporting and Logging / What to LogoffLogs the duration of each completed SQL statement.
log_error_verbosityReporting and Logging / What to LogdefaultSets the verbosity of logged messages.
log_executor_statsStatistics / MonitoringoffWrites executor performance statistics to the server log.
log_file_modeReporting and Logging / Where to Log0600Sets the file permissions for log files.
log_hostnameReporting and Logging / What to LogoffLogs the host name in the connection logs.
log_line_prefixReporting and Logging / What to Log%t [%a][%e] [%p]: [%l-1] user=%u,db=%d,client=%hControls information prefixed to each log line.
log_lock_waitsReporting and Logging / What to LogonLogs long lock waits.
log_min_duration_statementReporting and Logging / When to Log100msSets the minimum execution time above which statements will be logged.
log_min_error_statementReporting and Logging / When to LogerrorCauses all statements generating error at or above this level to be logged.
log_min_messagesReporting and Logging / When to LognoticeSets the message levels that are logged.
log_parser_statsStatistics / MonitoringoffWrites parser performance statistics to the server log.
log_planner_statsStatistics / MonitoringoffWrites planner performance statistics to the server log.
log_replication_commandsReporting and Logging / What to LogoffLogs each replication command.
log_rotation_ageReporting and Logging / Where to Log1440minAutomatic log file rotation will occur after N minutes.
log_rotation_sizeReporting and Logging / Where to Log10240kBAutomatic log file rotation will occur after N kilobytes.
log_statementReporting and Logging / What to LognoneSets the type of statements logged.
log_statement_statsStatistics / MonitoringoffWrites cumulative performance statistics to the server log.
log_temp_filesReporting and Logging / What to Log0kBLog the use of temporary files larger than this number of kilobytes.
log_timezoneReporting and Logging / What to LogUTCSets the time zone to use in log messages.
log_transaction_sample_rateReporting and Logging / When to Log0Set the fraction of transactions to log for new transactions.
log_truncate_on_rotationReporting and Logging / Where to LogoffTruncate existing log files of same name during log rotation.
logging_collectorReporting and Logging / Where to LogoffStart a subprocess to capture stderr output and/or csvlogs into log files.
maintenance_work_memResource Usage / Memory1572864kBSets the maximum memory to be used for maintenance operations.
max_connectionsConnections and Authentication / Connection Settings400Sets the maximum number of concurrent connections.
max_files_per_processResource Usage / Kernel Resources1000Sets the maximum number of simultaneously open files for each server process.
max_function_argsPreset Options100Shows the maximum number of function arguments.
max_identifier_lengthPreset Options63Shows the maximum identifier length.
max_index_keysPreset Options32Shows the maximum number of index keys.
max_locks_per_transactionLock Management64Sets the maximum number of locks per transaction.
max_logical_replication_workersReplication / Subscribers4Maximum number of logical replication worker processes.
max_parallel_maintenance_workersResource Usage / Asynchronous Behavior2Sets the maximum number of parallel processes per maintenance operation.
max_parallel_workersResource Usage / Asynchronous Behavior8Sets the maximum number of parallel workers that can be active at one time.
max_parallel_workers_per_gatherResource Usage / Asynchronous Behavior2Sets the maximum number of parallel processes per executor node.
max_pred_locks_per_pageLock Management2Sets the maximum number of predicate-locked tuples per page.
max_pred_locks_per_relationLock Management-2Sets the maximum number of predicate-locked pages and tuples per relation.
max_pred_locks_per_transactionLock Management64Sets the maximum number of predicate locks per transaction.
max_prepared_transactionsResource Usage / Memory150Sets the maximum number of simultaneously prepared transactions.
max_replication_slotsReplication / Sending Servers10Sets the maximum number of simultaneously defined replication slots.
max_stack_depthResource Usage / Memory2048kBSets the maximum stack depth, in kilobytes.
max_standby_archive_delayReplication / Standby Servers30000msSets the maximum delay before canceling queries when a hot standby server is processing archived WAL data.
max_standby_streaming_delayReplication / Standby Servers30000msSets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data.
max_sync_workers_per_subscriptionReplication / Subscribers2Maximum number of table synchronization workers per subscription.
max_wal_sendersReplication / Sending Servers12Sets the maximum number of simultaneously running WAL sender processes.
max_wal_sizeWrite-Ahead Log / Checkpoints1024MBSets the WAL size that triggers a checkpoint.
max_worker_processesResource Usage / Asynchronous Behavior8Maximum number of concurrent worker processes.
min_parallel_index_scan_sizeQuery Tuning / Planner Cost Constants648kBSets the minimum amount of index data for a parallel scan.
min_parallel_table_scan_sizeQuery Tuning / Planner Cost Constants10248kBSets the minimum amount of table data for a parallel scan.
min_wal_sizeWrite-Ahead Log / Checkpoints80MBSets the minimum size to shrink the WAL to.
old_snapshot_thresholdResource Usage / Asynchronous Behavior-1minTime before a snapshot is too old to read pages changed after the snapshot was taken.
operator_precedence_warningVersion and Platform Compatibility / Previous PostgreSQL VersionsoffEmit a warning for constructs that changed meaning since PostgreSQL 9.4.
parallel_leader_participationResource Usage / Asynchronous BehavioronControls whether Gather and Gather Merge also run subplans.
parallel_setup_costQuery Tuning / Planner Cost Constants1000Sets the planner’s estimate of the cost of starting up worker processes for parallel query.
parallel_tuple_costQuery Tuning / Planner Cost Constants0.1Sets the planner’s estimate of the cost of passing each tuple (row) from worker to master backend.
password_encryptionConnections and Authentication / Authenticationmd5Chooses the algorithm for encrypting passwords.
pg_stat_statements.maxCustomized Options5000Sets the maximum number of statements tracked by pg_stat_statements.
pg_stat_statements.saveCustomized OptionsonSave pg_stat_statements statistics across server shutdowns.
pg_stat_statements.trackCustomized OptionstopSelects which statements are tracked by pg_stat_statements.
pg_stat_statements.track_utilityCustomized OptionsonSelects whether utility commands are tracked by pg_stat_statements.
pgaudit.logCustomized OptionsnoneSpecifies which classes of statements will be logged by session audit logging. Multiple classes can be provided using a comma-separated list and classes can be subtracted by prefacing the class with a - sign.
pgaudit.log_catalogCustomized OptionsoffSpecifies that session logging should be enabled in the case where all relations in a statement are in pg_catalog. Disabling this setting will reduce noise in the log from tools like psql and PgAdmin that query the catalog heavily.
pgaudit.log_clientCustomized OptionsoffSpecifies whether audit messages should be visible to the client. This setting should generally be left disabled but may be useful for debugging or other purposes.
pgaudit.log_levelCustomized OptionslogSpecifies the log level that will be used for log entries. This setting is used for regression testing and may also be useful to end users for testing or other purposes. It is not intended to be used in a production environment as it may leak which statements are being logged to the user.
pgaudit.log_parameterCustomized OptionsoffSpecifies that audit logging should include the parameters that were passed with the statement. When parameters are present they will be be included in CSV format after the statement text.
pgaudit.log_relationCustomized OptionsoffSpecifies whether session audit logging should create a separate log entry for each relation referenced in a SELECT or DML statement. This is a useful shortcut for exhaustive logging without using object audit logging.
pgaudit.log_statement_onceCustomized OptionsoffSpecifies whether logging will include the statement text and parameters with the first log entry for a statement/substatement combination or with every entry. Disabling this setting will result in less verbose logging but may make it more difficult to determine the statement that generated a log entry, though the statement/substatement pair along with the process id should suffice to identify the statement text logged with a previous entry.
pgaudit.roleCustomized OptionsSpecifies the master role to use for object audit logging. Muliple audit roles can be defined by granting them to the master role. This allows multiple groups to be in charge of different aspects of audit logging.
plan_cache_modeQuery Tuning / Other Planner OptionsautoControls the planner’s selection of custom or generic plan.
portConnections and Authentication / Connection Settings5432Sets the TCP port the server listens on.
post_auth_delayDeveloper Options0sWaits N seconds on connection startup after authentication.
pre_auth_delayDeveloper Options0sWaits N seconds on connection startup before authentication.
primary_slot_nameReplication / Standby ServersSets the name of the replication slot to use on the sending server.
promote_trigger_fileReplication / Standby ServersSpecifies a file name whose presence ends recovery in the standby.
quote_all_identifiersVersion and Platform Compatibility / Previous PostgreSQL VersionsoffWhen generating SQL fragments, quote all identifiers.
random_page_costQuery Tuning / Planner Cost Constants2.5Sets the planner’s estimate of the cost of a nonsequentially fetched disk page.
recovery_end_commandWrite-Ahead Log / Archive RecoverySets the shell command that will be executed once at the end of recovery.
recovery_min_apply_delayReplication / Standby Servers0msSets the minimum delay for applying changes during recovery.
recovery_targetWrite-Ahead Log / Recovery TargetSet to “immediate” to end recovery as soon as a consistent state is reached.
recovery_target_actionWrite-Ahead Log / Recovery TargetpauseSets the action to perform upon reaching the recovery target.
recovery_target_inclusiveWrite-Ahead Log / Recovery TargetonSets whether to include or exclude transaction with recovery target.
recovery_target_lsnWrite-Ahead Log / Recovery TargetSets the LSN of the write-ahead log location up to which recovery will proceed.
recovery_target_nameWrite-Ahead Log / Recovery TargetSets the named restore point up to which recovery will proceed.
recovery_target_timeWrite-Ahead Log / Recovery TargetSets the time stamp up to which recovery will proceed.
recovery_target_timelineWrite-Ahead Log / Recovery TargetlatestSpecifies the timeline to recover into.
recovery_target_xidWrite-Ahead Log / Recovery TargetSets the transaction ID up to which recovery will proceed.
restart_after_crashError HandlingonReinitialize server after backend crash.
restore_commandWrite-Ahead Log / Archive Recovery/usr/bin/pgbackrest —config /conf/postgresql/pgbackrest.conf —stanza=formation archive-get %f “%p”Sets the shell command that will retrieve an archived WAL file.
row_securityClient Connection Defaults / Statement BehavioronEnable row security.
search_pathClient Connection Defaults / Statement Behavior“$user”, publicSets the schema search order for names that are not schema-qualified.
segment_sizePreset Options1310728kBShows the number of pages per disk file.
seq_page_costQuery Tuning / Planner Cost Constants1Sets the planner’s estimate of the cost of a sequentially fetched disk page.
server_encodingClient Connection Defaults / Locale and FormattingUTF8Sets the server (database) character set encoding.
server_versionPreset Options12.4Shows the server version.
server_version_numPreset Options120004Shows the server version as an integer.
session_replication_roleClient Connection Defaults / Statement BehaviororiginSets the session’s behavior for triggers and rewrite rules.
shared_buffersResource Usage / Memory7864328kBSets the number of shared memory buffers used by the server.
shared_memory_typeResource Usage / MemorymmapSelects the shared memory implementation used for the main shared memory region.
sslConnections and Authentication / SSLonEnables SSL connections.
ssl_ca_fileConnections and Authentication / SSLLocation of the SSL certificate authority file.
ssl_cert_fileConnections and Authentication / SSL/conf/cert/tls.crtLocation of the SSL server certificate file.
ssl_crl_fileConnections and Authentication / SSLLocation of the SSL certificate revocation list file.
ssl_key_fileConnections and Authentication / SSL/conf/cert/tls.keyLocation of the SSL server private key file.
ssl_libraryPreset OptionsOpenSSLName of the SSL library.
ssl_passphrase_commandConnections and Authentication / SSLCommand to obtain passphrases for SSL.
ssl_passphrase_command_supports_reloadConnections and Authentication / SSLoffAlso use ssl_passphrase_command during server reload.
ssl_prefer_server_ciphersConnections and Authentication / SSLonGive priority to server ciphersuite order.
standard_conforming_stringsVersion and Platform Compatibility / Previous PostgreSQL VersionsonCauses ’…’ strings to treat backslashes literally.
statement_timeoutClient Connection Defaults / Statement Behavior43200000msSets the maximum allowed duration of any statement.
superuser_reserved_connectionsConnections and Authentication / Connection Settings15Sets the number of connection slots reserved for superusers.
synchronize_seqscansVersion and Platform Compatibility / Previous PostgreSQL VersionsonEnable synchronized sequential scans.
synchronous_commitWrite-Ahead Log / SettingslocalSets the current transaction’s synchronization level.
synchronous_standby_namesReplication / Master Server“c-a343dd6d-23fd-4229-aa12-1171a4fc8c13-m-0”,“c-a343dd6d-23fd-4229-aa12-1171a4fc8c13-m-1”Number of synchronous standbys and list of names of potential synchronous ones.
syslog_facilityReporting and Logging / Where to Loglocal0Sets the syslog “facility” to be used when syslog enabled.
syslog_identReporting and Logging / Where to LogpostgresSets the program name used to identify PostgreSQL messages in syslog.
syslog_sequence_numbersReporting and Logging / Where to LogonAdd sequence number to syslog messages to avoid duplicate suppression.
syslog_split_messagesReporting and Logging / Where to LogonSplit messages sent to syslog by lines and to fit into 1024 bytes.
tcp_keepalives_countClient Connection Defaults / Other Defaults6Maximum number of TCP keepalive retransmits.
tcp_keepalives_idleClient Connection Defaults / Other Defaults300sTime between issuing TCP keepalives.
tcp_keepalives_intervalClient Connection Defaults / Other Defaults30sTime between TCP keepalive retransmits.
tcp_user_timeoutClient Connection Defaults / Other Defaults0msTCP user timeout.
temp_buffersResource Usage / Memory10248kBSets the maximum number of temporary buffers used by each session.
temp_file_limitResource Usage / Disk-1kBLimits the total size of all temporary files used by each process.
temp_tablespacesClient Connection Defaults / Statement BehaviorSets the tablespace(s) to use for temporary tables and sort files.
timezone_abbreviationsClient Connection Defaults / Locale and FormattingDefaultSelects a file of time zone abbreviations.
trace_notifyDeveloper OptionsoffGenerates debugging output for LISTEN and NOTIFY.
trace_recovery_messagesDeveloper OptionslogEnables logging of recovery-related debugging information.
trace_sortDeveloper OptionsoffEmit information about resource usage in sorting.
track_activitiesStatistics / Query and Index Statistics CollectoronCollects information about executing commands.
track_activity_query_sizeResource Usage / Memory1024BSets the size reserved for pg_stat_activity.query, in bytes.
track_commit_timestampReplicationonCollects transaction commit time.
track_countsStatistics / Query and Index Statistics CollectoronCollects statistics on database activity.
track_functionsStatistics / Query and Index Statistics CollectornoneCollects function-level statistics on database activity.
track_io_timingStatistics / Query and Index Statistics CollectoronCollects timing statistics for database I/O activity.
transaction_deferrableClient Connection Defaults / Statement BehavioroffWhether to defer a read-only serializable transaction until it can be executed with no possible serialization failures.
transaction_isolationClient Connection Defaults / Statement Behaviorread committedSets the current transaction’s isolation level.
transaction_read_onlyClient Connection Defaults / Statement BehavioroffSets the current transaction’s read-only status.
transform_null_equalsVersion and Platform Compatibility / Other Platforms and ClientsoffTreats “expr=NULL” as “expr IS NULL”.
unix_socket_groupConnections and Authentication / Connection SettingsSets the owning group of the Unix-domain socket.
unix_socket_permissionsConnections and Authentication / Connection Settings0777Sets the access permissions of the Unix-domain socket.
update_process_titleProcess TitleonUpdates the process title to show the active SQL command.
vacuum_cleanup_index_scale_factorClient Connection Defaults / Statement Behavior0.1Number of tuple inserts prior to index cleanup as a fraction of reltuples.
vacuum_cost_delayResource Usage / Cost-Based Vacuum Delay0msVacuum cost delay in milliseconds.
vacuum_cost_limitResource Usage / Cost-Based Vacuum Delay200Vacuum cost amount available before napping.
vacuum_cost_page_dirtyResource Usage / Cost-Based Vacuum Delay20Vacuum cost for a page dirtied by vacuum.
vacuum_cost_page_hitResource Usage / Cost-Based Vacuum Delay1Vacuum cost for a page found in the buffer cache.
vacuum_cost_page_missResource Usage / Cost-Based Vacuum Delay10Vacuum cost for a page not found in the buffer cache.
vacuum_defer_cleanup_ageReplication / Master Server0Number of transactions by which VACUUM and HOT cleanup should be deferred, if any.
vacuum_freeze_min_ageClient Connection Defaults / Statement Behavior50000000Minimum age at which VACUUM should freeze a table row.
vacuum_freeze_table_ageClient Connection Defaults / Statement Behavior150000000Age at which VACUUM should scan whole table to freeze tuples.
vacuum_multixact_freeze_min_ageClient Connection Defaults / Statement Behavior5000000Minimum age at which VACUUM should freeze a MultiXactId in a table row.
vacuum_multixact_freeze_table_ageClient Connection Defaults / Statement Behavior150000000Multixact age at which VACUUM should scan whole table to freeze tuples.
wal_block_sizePreset Options8192Shows the block size in the write ahead log.
wal_buffersWrite-Ahead Log / Settings20488kBSets the number of disk-page buffers in shared memory for WAL.
wal_compressionWrite-Ahead Log / SettingsonCompresses full-page writes written in WAL file.
wal_consistency_checkingDeveloper OptionsSets the WAL resource managers for which WAL consistency checks are done.
wal_init_zeroWrite-Ahead Log / SettingsonWrites zeroes to new WAL files before first use.
wal_keep_segmentsReplication / Sending Servers16Sets the number of WAL files held for standby servers.
wal_levelWrite-Ahead Log / SettingsreplicaSet the level of information written to the WAL.
wal_log_hintsWrite-Ahead Log / SettingsonWrites full pages to WAL when first modified after a checkpoint, even for a non-critical modifications.
wal_receiver_status_intervalReplication / Standby Servers10sSets the maximum interval between WAL receiver status reports to the sending server.
wal_receiver_timeoutReplication / Standby Servers60000msSets the maximum wait time to receive data from the sending server.
wal_recycleWrite-Ahead Log / SettingsonRecycles WAL files by renaming them.
wal_retrieve_retry_intervalReplication / Standby Servers5000msSets the time to wait before retrying to retrieve WAL after a failed attempt.
wal_segment_sizePreset Options16777216BShows the size of write ahead log segments.
wal_sender_timeoutReplication / Sending Servers60000msSets the maximum time to wait for WAL replication.
wal_sync_methodWrite-Ahead Log / SettingsfdatasyncSelects the method used for forcing WAL updates to disk.
wal_writer_delayWrite-Ahead Log / Settings200msTime between WAL flushes performed in the WAL writer.
wal_writer_flush_afterWrite-Ahead Log / Settings1288kBAmount of WAL written out by WAL writer that triggers a flush.
work_memResource Usage / Memory15728kBSets the maximum memory to be used for query workspaces.
xmlbinaryClient Connection Defaults / Statement Behaviorbase64Sets how binary values are to be encoded in XML.
xmloptionClient Connection Defaults / Statement BehaviorcontentSets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments.
zero_damaged_pagesDeveloper OptionsoffContinues processing past damaged page headers.

Complete List of Resource Counts

Resource counts prior to running the ingestion load:

resource_typecount
Observation28643640
Claim9809811
Procedure9533768
Encounter8788209
ExplanationOfBenefit7795369
DiagnosticReport2942204
MedicationRequest2761835
Condition1755335
Immunization1656535
CarePlan1320978
Goal347835
CareTeam341226
Practitioner319783
Organization319729
AllergyIntolerance216350
Patient174388
ImagingStudy131088
MedicationAdministration58620
Device5444
ValueSet688
CodeSystem533
Parameters196
StructureMap162
Task155
ConceptMap94
Questionnaire68
Contract66
QuestionnaireResponse59
ActivityDefinition44
Location43
MedicationDispense40
Bundle39
PlanDefinition37
FamilyMemberHistory32
Medication32
EvidenceVariable29
Library28
Coverage28
ServiceRequest28
Group27
MedicationKnowledge26
RequestGroup25
ClaimResponse25
DeviceRequest21
Schedule21
Appointment21
SubstanceSpecification18
Person17
Consent17
RelatedPerson17
List17
AuditEvent17
NutritionOrder17
CoverageEligibilityResponse16
Slot16
GuidanceResponse16
Account15
Communication15
CommunicationRequest15
DeviceUseStatement15
Flag15
Measure15
ResearchElementDefinition15
AdverseEvent14
ChargeItem14
MedicationStatement14
HealthcareService14
PractitionerRole13
RiskAssessment13
AppointmentResponse13
SupplyRequest13
Media13
DetectedIssue13
Provenance12
Specimen11
CompartmentDefinition11
CoverageEligibilityRequest11
Composition11
SupplyDelivery11
CapabilityStatement11
ImmunizationEvaluation10
DeviceDefinition10
OperationOutcome10
EventDefinition10
BiologicallyDerivedProduct10
Invoice10
ClinicalImpression10
MessageDefinition10
Substance9
MessageHeader9
MedicinalProduct9
MedicinalProductContraindication8
Endpoint8
MedicinalProductAuthorization8
MedicinalProductIndication8
MedicinalProductInteraction8
ResearchDefinition8
SpecimenDefinition8
SubstanceReferenceInformation8
Basic8
ImmunizationRecommendation7
Binary7
DocumentManifest7
ChargeItemDefinition7
EnrollmentResponse6
EpisodeOfCare6
GraphDefinition6
NamingSystem6
CatalogEntry6
DocumentReference6
ExampleScenario6
Evidence6
OrganizationAffiliation6
EffectEvidenceSynthesis6
EnrollmentRequest6
BodyStructure6
ObservationDefinition5
PaymentReconciliation5
MedicinalProductUndesirableEffect5
MedicinalProductPharmaceutical5
MedicinalProductPackaged5
MedicinalProductManufactured5
MedicinalProductIngredient5
VisionPrescription5
ResearchStudy5
ResearchSubject5
RiskEvidenceSynthesis5
Subscription5
PaymentNotice5
InsurancePlan4
VerificationResult4
DeviceMetric4
SubstancePolymer3
SubstanceNucleicAcid3
TerminologyCapabilities3
SubstanceProtein3
SubstanceSourceMaterial3
ImplementationGuide3
MeasureReport2