从数据库更新日志中读取 Liquibase 需要很长时间



有什么方法可以加快 liquibase 回滚和更新操作的 maven 任务吗?

我现在在数据库中有大约 280 个变更集,当我进行更新时,仅从数据库更改日志中读取就需要很长时间。

我正在使用 liquibase 2 和许多 sql 格式的文件进行变更集。谢谢

编辑:在执行时添加更具体的时间范围

INFO 11/16/12 10:46 AM:liquibase: Reading from databasechangelog
INFO 11/16/12 10:54 AM:liquibase: Successfully released change log lock

在这个例子中,它在MBP上本地运行(核心i7,有8千兆的ram)

我注意到了同样的事情。 通过Maven使用它时,我看到以下内容:

[INFO] Executing on Database: jdbc:postgresql://localhost/mydb
INFO 11/5/12 1:01 PM:liquibase: Successfully acquired change log lock
INFO 11/5/12 1:01 PM:liquibase: Reading from databasechangelog
INFO 11/5/12 1:01 PM:liquibase: Reading from databasechangelog
INFO 11/5/12 1:02 PM:liquibase: ChangeSet mydb/db.changelog-006.sql::55::ebridges ran successfully in 41ms
INFO 11/5/12 1:02 PM:liquibase: Successfully released change log lock
INFO 11/5/12 1:02 PM:liquibase: Successfully released change log lock

请注意,总体而言,运行需要两分钟来执行单个变更集,而变更集本身仅花费 41 毫秒的执行时间。这很慢。

在我的机器上,我复制了问题,主线程卡在本机方法上:

java.lang.Class.getGenericSignature()

这表明问题出在 JDK 实现上。考虑升级或切换实现。

在我的场景中,将loadData与 .csv 文件一起使用是 liquibase 需要很长时间才能执行的原因(我使用的是 liquibase 2.0.5 )。

例如,这是一个导致 liquibase 变慢的变更集:

<changeSet id="foo" author="bar">
    <comment>Baz</comment>
    <loadData encoding="UTF-8"
              separator=";"
              file="some-file.csv"
              tableName="TableName"/>
    <rollback>
        <sqlFile path="rollback.sql" relativeToChangelogFile="true" splitStatements="false" />
    </rollback>
</changeSet>

就我而言,这是因为一张上锁的桌子。我在另一个应用程序中有一个待处理的事务。

最新更新