#liquibase #query-performance
#liquibase #производительность запросов
Вопрос:
Я должен обновить схему 20 баз данных с тем же списком изменений Liquibase. Время, требуемое для создания схемы для одной пустой базы данных, составляет около 5 секунд. При последующем обновлении базы данных Liquibase для той же базы данных все равно требуется 3,6 с, даже если изменения не применяются. Поскольку обновление Liquibase выполняется 20 раз (один раз для каждой базы данных), итоговое общее время выполнения (100 и 72 секунды) для создания схемы или проверки схемы имеет решающее значение для моего варианта использования.
Моя версия 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 только один раз?
Ответ №1:
Вы можете запускать каждый процесс в фоновом режиме, используя amp;
, и 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 amp;> nohup$i.outamp;
done