liquibase.snapshot.DatabaseSnapshot process taking time

I have a liquibase process where when creating a new table in DB , the liquibase.snapshot.DatabaseSnapshot step is taking a lot of time on the constraints, i already have the stats gather on metadata but still the step takes time and overall contribute to slowness of the liquibase process in my application.
How can i debug this further ? what sql might be slow or any other setting ? Any ideas ?

the change log for create a pre condition

Degug logs of liquibase process ,

2025-07-16 15:18:29,493 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:29,493 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:29,579 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:29,579 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:29,932 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:29,933 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:30,055 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:30,055 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:30,161 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:30,162 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name
2025-07-16 15:18:30,492 liquibase.snapshot.DatabaseSnapshot : DEBUG - Excluding XXX_Constraint_Name

Welcome to the forums @hca007 . We’ll need more information to figure out what’s going on.

  • How long is the DatabaseSnapshot taking start to finish? The log lines you’ve provided only cover a second or so of elapsed time so it’s hard to gauge a the impact of the DatabaseSnapshot run time.
  • What does the changeset to create your table look like? I see in your description there might be a precondition involved, so including that will help too.
  • What database is this happening with?

The more of the log we can see, the better. Thanks!

Thanks @Pete for your response, the liquibase version we are using is 4.8.0 and the database is Oracle.

From the logs, the databasesnapshot process from start to finish is taking around 1 minute everytime there is a changeset to create a table, with a precondition like below,

"
<preConditions onFail="MARK_RAN"> 
<not> 
<tableExists tableName="XXXX"/> 
  </not> 
</preConditions>
"

I took a jstack on the process during liquibase.snapshot.DatabaseSnapshot and observed that it is calculating a hash of all environment variables ,
i also tried Liquibase’s configuration system to bypass the environment variable lookup, added the following Java system properties , But still the stack was showing same as below, (hashing the env variables)

    • -jopt:-Dliquibase.databaseChangeLogTableName=DATABASECHANGELOG

    • -jopt:-Dliquibase.databaseChangeLogLockTableName=DATABASECHANGELOGLOCK

    • -jopt:-Dliquibase.liquibaseSchemaName=XXX

                *at java.util.HashMap$HashIterator.nextNode([java.base@17.0.12/HashMap.java:1601](mailto:java.base@17.0.12/HashMap.java:1601))*
      
           *at java.util.HashMap$EntryIterator.next([java.base@17.0.12/HashMap.java:1630](mailto:java.base@17.0.12/HashMap.java:1630))*
      
           *at java.util.HashMap$EntryIterator.next([java.base@17.0.12/HashMap.java:1628](mailto:java.base@17.0.12/HashMap.java:1628))*
      
           *at java.lang.ProcessEnvironment$StringEntrySet$1.next([java.base@17.0.12/ProcessEnvironment.java:333](mailto:java.base@17.0.12/ProcessEnvironment.java:333))*
      
           *at java.lang.ProcessEnvironment$StringEntrySet$1.next([java.base@17.0.12/ProcessEnvironment.java:329](mailto:java.base@17.0.12/ProcessEnvironment.java:329))*
      
           *at java.util.AbstractMap.hashCode([java.base@17.0.12/AbstractMap.java:525](mailto:java.base@17.0.12/AbstractMap.java:525))*
      
           *at java.util.Collections$UnmodifiableMap.hashCode([java.base@17.0.12/Collections.java:1540](mailto:java.base@17.0.12/Collections.java:1540))*
      
           *at liquibase.configuration.AbstractMapConfigurationValueProvider.getMapHash(AbstractMapConfigurationValueProvider.java:73)*
      
           *at liquibase.configuration.AbstractMapConfigurationValueProvider.getProvidedValue(AbstractMapConfigurationValueProvider.java:37)*
      
           *at liquibase.configuration.LiquibaseConfiguration.getCurrentConfiguredValue(LiquibaseConfiguration.java:123)*
      
           *at liquibase.configuration.ConfigurationDefinition.getCurrentConfiguredValue(ConfigurationDefinition.java:93)*
      
           *at liquibase.configuration.ConfigurationDefinition.getCurrentValue(ConfigurationDefinition.java:61)*
      
           *at liquibase.database.AbstractJdbcDatabase**.getDatabaseChangeLogLockTableName**(AbstractJdbcDatabase.java:641)*
      
           *at liquibase.database.AbstractJdbcDatabase.isLiquibaseObject(AbstractJdbcDatabase.java:864)*
      
           *at liquibase.database.core.OracleDatabase.isSystemObject(OracleDatabase.java:368)*
      
           *at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:35)*
      
           *at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:69)*
      
           *at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:49)*
      
           *at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:69)*
      
           *at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:49)*
      
           *at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:69)*
      
           *at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:49)*
      
           *at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:69)*
      
           *at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:49)*
      
           *at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:69)*
      
           *at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:49)*
      
           *at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:69)*
      
           *at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:49)*
      
           *at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:69)*
      
           *at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:49)*
      
           *at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:312)*
      
           *at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:445)*
      
           *at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:467)*
      
           *at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:373)*
      
           *at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:335)*
      
           *at liquibase.snapshot.DatabaseSnapshot.init(DatabaseSnapshot.java:105)*
      
           *at liquibase.snapshot.DatabaseSnapshot.<init>(DatabaseSnapshot.java:58)*
      
           *at liquibase.snapshot.JdbcDatabaseSnapshot.<init>(JdbcDatabaseSnapshot.java:34)*
      
           *at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:215)*
      
           *at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:188)*
      
           *at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:155)*
      
           *at liquibase.snapshot.SnapshotGeneratorFactory.has(SnapshotGeneratorFactory.java:142)*
      
           *at liquibase.precondition.core.TableExistsPrecondition.check(TableExistsPrecondition.java:59)*
      
           *at liquibase.precondition.core.NotPrecondition.check(NotPrecondition.java:40)*
      
           *at liquibase.precondition.core.AndPrecondition.check(AndPrecondition.java:45)*
      
           *at liquibase.precondition.core.PreconditionContainer.check(PreconditionContainer.java:213)*
      
           *at liquibase.changelog.ChangeSet.execute(ChangeSet.java:577)*