从 databasechangelog 读取 Liquibase 需要很长时间

Posted

技术标签:

【中文标题】从 databasechangelog 读取 Liquibase 需要很长时间【英文标题】:Liquibase reading from databasechangelog takes a long time 【发布时间】:2012-06-13 12:14:00 【问题描述】:

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

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

我正在使用 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 gig)

【问题讨论】:

Define "a long time".... 这是一个性能问题,最好直接报告给 liquibase 项目。见:liquibase.jira.com/browse/CORE 【参考方案1】:

我注意到了同样的事情。通过 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 毫秒的执行时间。这很慢。

【讨论】:

【参考方案2】:

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

java.lang.Class.getGenericSignature()

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

【讨论】:

【参考方案3】:

在我的场景中,将 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>

【讨论】:

以上是关于从 databasechangelog 读取 Liquibase 需要很长时间的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 databasechangelog 表生成 liquibase sql 文件

liquibase 不生成表 DATABASECHANGELOG

Grails 应用程序在启动时卡住,因为 DATABASECHANGELOG 表被锁定

如果运行 spring boot 并让 liquibase 自动执行迁移,则 Liquibase databasechangelog 表存储相对路径

Liquibase 从 2.0.4 迁移到版本 3.4.0 后缺少列“CONTEXTS”

java从文件读取集合