从 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 表存储相对路径