]> source.dussan.org Git - sonarqube.git/commitdiff
Improve DB migration 1267 on MySQL
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 25 Aug 2017 19:27:17 +0000 (21:27 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 25 Aug 2017 19:27:17 +0000 (21:27 +0200)
In our LTS upgrade environment:
Before 13 hours
After 10 minutes

server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v60/PopulateAnalysisUuidOnMeasures.java

index c235d3648997173e3f14a959b1b073bbb78ebca0..fd213140d086fc4c832dc2a3531e4bcc97b9be1a 100644 (file)
@@ -35,11 +35,19 @@ public class PopulateAnalysisUuidOnMeasures extends DataChange {
   @Override
   public void execute(Context context) throws SQLException {
     MassUpdate massUpdate = context.prepareMassUpdate();
-    massUpdate.select("select distinct m.snapshot_id, root_snapshots.uuid " +
+    // mysql can take hours if the 2 requests are merged into a single one
+    massUpdate.select("select distinct m.snapshot_id as sId, root_snapshots.uuid as rootUuid " +
       "from project_measures m " +
       "inner join snapshots s on m.snapshot_id=s.id " +
-      "inner join snapshots root_snapshots on s.root_snapshot_id=root_snapshots.id or (s.root_snapshot_id is null and s.id=root_snapshots.id) " +
-      "where m.analysis_uuid is null");
+      "inner join snapshots root_snapshots on s.root_snapshot_id = root_snapshots.id " +
+      "where m.analysis_uuid is null " +
+      "union " +
+      "select distinct m.snapshot_id as sId, root_snapshots.uuid as rootUuid " +
+      "from project_measures m " +
+      "inner join snapshots s on m.snapshot_id=s.id " +
+      "inner join snapshots root_snapshots on s.root_snapshot_id is null and s.id = root_snapshots.id " +
+      "where m.analysis_uuid is null"
+    );
     massUpdate.update("update project_measures set analysis_uuid=? where snapshot_id=? and analysis_uuid is null");
     massUpdate.rowPluralName("measures");
     massUpdate.execute(PopulateAnalysisUuidOnMeasures::handle);