Как ускорить выполнение Liquibase?

#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