我必须使用相同的Liquibase更新日志更新20个数据库的架构。为一个空数据库创建模式所需的时间约为5s。在同一数据库上的后续Liquibase更新中,即使没有应用任何更改,仍然需要3.6秒。 由于Liquibase更新执行了20次(每个数据库一次),因此对于模式创建或模式验证而言,最终的总体执行时间(100s和72s)对于我的用例至关重要。
我的Liquibase版本是3.5.5,但我也尝试了3.6.3版本,结果却有些差。
我使用bash脚本遍历数据库并执行Liquibase更新。看起来如下:
for i in {1..5}; do
liquibase --contexts=MT --logLevel=warning \
--username=sa --password=XXX \
--url="jdbc:sqlserver://<ip-address>:50179;DatabaseName=db$i" \
--changeLogFile=/my-changelogs.xml \
update
done
是否有一种方法可以减少一次更新的Liquibase执行时间?另外,是否可以通过并行运行Liquibase更新或仅加载一次Liquibase类路径来减少总体执行时间?
答案 0 :(得分:0)
您可以使用&
和nohup
在后台运行每个进程,这些进程可以关闭终端而不关闭进程。
结果将是
for i in {1..5}; do
nohup liquibase --contexts=MT --logLevel=warning \
--username=sa --password=XXX \
--url="jdbc:sqlserver://<ip-address>:50179;DatabaseName=db$i" \
--changeLogFile=/my-changelogs.xml \
update &> nohup$i.out&
done