From 33a78d7551b3652f2b3b7d515fff97b6adef8fba Mon Sep 17 00:00:00 2001 From: Duansg Date: Mon, 19 Jan 2026 22:39:34 +0800 Subject: [PATCH] [improve] upgrade script merge --- .../db/migration/h2/V180__update_column.sql | 517 ++++++++++++++++- .../db/migration/h2/V181__update_indexes.sql | 534 ------------------ .../migration/mysql/V180__update_column.sql | 435 +++++++++++++- .../migration/mysql/V181__update_indexes.sql | 450 --------------- .../postgresql/V180__update_column.sql | 232 +++++++- .../postgresql/V181__update_indexes.sql | 247 -------- 6 files changed, 1177 insertions(+), 1238 deletions(-) delete mode 100644 hertzbeat-startup/src/main/resources/db/migration/h2/V181__update_indexes.sql delete mode 100644 hertzbeat-startup/src/main/resources/db/migration/mysql/V181__update_indexes.sql delete mode 100644 hertzbeat-startup/src/main/resources/db/migration/postgresql/V181__update_indexes.sql diff --git a/hertzbeat-startup/src/main/resources/db/migration/h2/V180__update_column.sql b/hertzbeat-startup/src/main/resources/db/migration/h2/V180__update_column.sql index 09a4c8e3449..b770da958ba 100644 --- a/hertzbeat-startup/src/main/resources/db/migration/h2/V180__update_column.sql +++ b/hertzbeat-startup/src/main/resources/db/migration/h2/V180__update_column.sql @@ -72,7 +72,7 @@ void migrateHistoryTable(java.sql.Connection conn) throws java.sql.SQLException try (java.sql.ResultSet rs = conn.getMetaData().getColumns(null, null, "HZB_HISTORY", "METRIC_LABELS")) { if (rs.next()) metricLabelsExists = true; } - + if (monitorIdExists) { try (java.sql.Statement stmt = conn.createStatement()) { if (!metricLabelsExists) { @@ -92,3 +92,518 @@ void migrateHistoryTable(java.sql.Connection conn) throws java.sql.SQLException $$; CALL MIGRATE_HISTORY_TABLE(); DROP ALIAS MIGRATE_HISTORY_TABLE; + +-- ======================================== +-- hzb_alert_define_monitor_bind table +-- ======================================== +CREATE ALIAS UPDATE_ALERT_DEFINE_MONITOR_BIND_INDEXES AS $$ +void updateAlertDefineMonitorBindIndexes(java.sql.Connection conn) throws java.sql.SQLException { + boolean tableExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_ALERT_DEFINE_MONITOR_BIND", null)) { + if (rs.next()) tableExists = true; + } + + if (tableExists) { + try (java.sql.Statement stmt = conn.createStatement()) { + // Drop old index if exists + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_ALERT_DEFINE_MONITOR_BIND", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("INDEX_ALERT_DEFINE_MONITOR".equalsIgnoreCase(indexName)) { + stmt.execute("DROP INDEX INDEX_ALERT_DEFINE_MONITOR"); + break; + } + } + } catch (Exception e) { + // Index may not exist, continue + } + + // Create new indexes if not exist + boolean alertDefineIdIndexExists = false; + boolean monitorIdIndexExists = false; + + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_ALERT_DEFINE_MONITOR_BIND", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("IDX_ALERT_DEFINE_ID".equalsIgnoreCase(indexName)) { + alertDefineIdIndexExists = true; + } + if ("IDX_MONITOR_ID".equalsIgnoreCase(indexName)) { + monitorIdIndexExists = true; + } + } + } + + if (!alertDefineIdIndexExists) { + stmt.execute("CREATE INDEX IDX_ALERT_DEFINE_ID ON HZB_ALERT_DEFINE_MONITOR_BIND(ALERT_DEFINE_ID)"); + } + + if (!monitorIdIndexExists) { + stmt.execute("CREATE INDEX IDX_MONITOR_ID ON HZB_ALERT_DEFINE_MONITOR_BIND(MONITOR_ID)"); + } + } + } +} +$$; +CALL UPDATE_ALERT_DEFINE_MONITOR_BIND_INDEXES(); +DROP ALIAS UPDATE_ALERT_DEFINE_MONITOR_BIND_INDEXES; + +-- ======================================== +-- hzb_collector_monitor_bind table +-- ======================================== +CREATE ALIAS UPDATE_COLLECTOR_MONITOR_BIND_INDEXES AS $$ +void updateCollectorMonitorBindIndexes(java.sql.Connection conn) throws java.sql.SQLException { + boolean tableExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_COLLECTOR_MONITOR_BIND", null)) { + if (rs.next()) tableExists = true; + } + + if (tableExists) { + try (java.sql.Statement stmt = conn.createStatement()) { + // Drop old index if exists + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_COLLECTOR_MONITOR_BIND", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("INDEX_COLLECTOR_MONITOR".equalsIgnoreCase(indexName)) { + stmt.execute("DROP INDEX INDEX_COLLECTOR_MONITOR"); + break; + } + } + } catch (Exception e) { + // Index may not exist, continue + } + + // Create new indexes if not exist + boolean collectorIndexExists = false; + boolean monitorIdIndexExists = false; + + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_COLLECTOR_MONITOR_BIND", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("IDX_COLLECTOR_MONITOR_COLLECTOR".equalsIgnoreCase(indexName)) { + collectorIndexExists = true; + } + if ("IDX_COLLECTOR_MONITOR_MONITOR_ID".equalsIgnoreCase(indexName)) { + monitorIdIndexExists = true; + } + } + } + + if (!collectorIndexExists) { + stmt.execute("CREATE INDEX IDX_COLLECTOR_MONITOR_COLLECTOR ON HZB_COLLECTOR_MONITOR_BIND(COLLECTOR)"); + } + + if (!monitorIdIndexExists) { + stmt.execute("CREATE INDEX IDX_COLLECTOR_MONITOR_MONITOR_ID ON HZB_COLLECTOR_MONITOR_BIND(MONITOR_ID)"); + } + } + } +} +$$; +CALL UPDATE_COLLECTOR_MONITOR_BIND_INDEXES(); +DROP ALIAS UPDATE_COLLECTOR_MONITOR_BIND_INDEXES; + +-- ======================================== +-- hzb_monitor table +-- ======================================== +CREATE ALIAS UPDATE_MONITOR_INDEXES AS $$ +void updateMonitorIndexes(java.sql.Connection conn) throws java.sql.SQLException { + boolean tableExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_MONITOR", null)) { + if (rs.next()) tableExists = true; + } + + if (tableExists) { + try (java.sql.Statement stmt = conn.createStatement()) { + // Drop old index if exists + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_MONITOR", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("MONITOR_QUERY_INDEX".equalsIgnoreCase(indexName)) { + stmt.execute("DROP INDEX MONITOR_QUERY_INDEX"); + break; + } + } + } catch (Exception e) { + // Index may not exist, continue + } + + // Create new indexes if not exist + boolean appIndexExists = false; + boolean instanceIndexExists = false; + boolean nameIndexExists = false; + + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_MONITOR", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("IDX_HZB_MONITOR_APP".equalsIgnoreCase(indexName)) { + appIndexExists = true; + } + if ("IDX_HZB_MONITOR_INSTANCE".equalsIgnoreCase(indexName)) { + instanceIndexExists = true; + } + if ("IDX_HZB_MONITOR_NAME".equalsIgnoreCase(indexName)) { + nameIndexExists = true; + } + } + } + + if (!appIndexExists) { + stmt.execute("CREATE INDEX IDX_HZB_MONITOR_APP ON HZB_MONITOR(APP)"); + } + + if (!instanceIndexExists) { + stmt.execute("CREATE INDEX IDX_HZB_MONITOR_INSTANCE ON HZB_MONITOR(INSTANCE)"); + } + + if (!nameIndexExists) { + stmt.execute("CREATE INDEX IDX_HZB_MONITOR_NAME ON HZB_MONITOR(NAME)"); + } + } + } +} +$$; +CALL UPDATE_MONITOR_INDEXES(); +DROP ALIAS UPDATE_MONITOR_INDEXES; + +-- ======================================== +-- hzb_monitor_bind table +-- ======================================== +CREATE ALIAS UPDATE_MONITOR_BIND_INDEXES AS $$ +void updateMonitorBindIndexes(java.sql.Connection conn) throws java.sql.SQLException { + boolean tableExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_MONITOR_BIND", null)) { + if (rs.next()) tableExists = true; + } + + if (tableExists) { + try (java.sql.Statement stmt = conn.createStatement()) { + // Create new index if not exist + boolean bindIndexExists = false; + + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_MONITOR_BIND", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("INDEX_MONITOR_BIND".equalsIgnoreCase(indexName)) { + bindIndexExists = true; + } + } + } + + if (!bindIndexExists) { + stmt.execute("CREATE INDEX INDEX_MONITOR_BIND ON HZB_MONITOR_BIND(BIZ_ID)"); + } + } + } +} +$$; +CALL UPDATE_MONITOR_BIND_INDEXES(); +DROP ALIAS UPDATE_MONITOR_BIND_INDEXES; + +-- ======================================== +-- hzb_status_page_incident_component_bind table +-- Special handling: component_id might have auto-created index from FK +-- ======================================== +CREATE ALIAS UPDATE_STATUS_PAGE_INCIDENT_COMPONENT_BIND_INDEXES AS $$ +void updateStatusPageIncidentComponentBindIndexes(java.sql.Connection conn) throws java.sql.SQLException { + boolean tableExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_STATUS_PAGE_INCIDENT_COMPONENT_BIND", null)) { + if (rs.next()) tableExists = true; + } + + if (tableExists) { + try (java.sql.Statement stmt = conn.createStatement()) { + // Check if component_id column already has any index + boolean hasComponentIdIndex = false; + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_STATUS_PAGE_INCIDENT_COMPONENT_BIND", false, false)) { + while (rs.next()) { + String columnName = rs.getString("COLUMN_NAME"); + if (columnName != null && "COMPONENT_ID".equalsIgnoreCase(columnName)) { + hasComponentIdIndex = true; + break; + } + } + } + + // Create index on component_id only if no index exists on this column + if (!hasComponentIdIndex) { + stmt.execute("CREATE INDEX IDX_INCIDENT_COMPONENT_COMPONENT_ID ON HZB_STATUS_PAGE_INCIDENT_COMPONENT_BIND(COMPONENT_ID)"); + } + } + } +} +$$; +CALL UPDATE_STATUS_PAGE_INCIDENT_COMPONENT_BIND_INDEXES(); +DROP ALIAS UPDATE_STATUS_PAGE_INCIDENT_COMPONENT_BIND_INDEXES; + +-- ======================================== +-- hzb_push_metrics table +-- ======================================== +CREATE ALIAS UPDATE_PUSH_METRICS_INDEXES AS $$ +void updatePushMetricsIndexes(java.sql.Connection conn) throws java.sql.SQLException { + boolean tableExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_PUSH_METRICS", null)) { + if (rs.next()) tableExists = true; + } + + if (tableExists) { + try (java.sql.Statement stmt = conn.createStatement()) { + // Drop old index if exists + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PUSH_METRICS", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("PUSH_QUERY_INDEX".equalsIgnoreCase(indexName)) { + stmt.execute("DROP INDEX PUSH_QUERY_INDEX"); + break; + } + } + } catch (Exception e) { + // Index may not exist, continue + } + + // Create new indexes if not exist + boolean monitorIdIndexExists = false; + boolean timeIndexExists = false; + + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PUSH_METRICS", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("IDX_PUSH_METRICS_MONITOR_ID".equalsIgnoreCase(indexName)) { + monitorIdIndexExists = true; + } + if ("IDX_PUSH_METRICS_TIME".equalsIgnoreCase(indexName)) { + timeIndexExists = true; + } + } + } + + if (!monitorIdIndexExists) { + stmt.execute("CREATE INDEX IDX_PUSH_METRICS_MONITOR_ID ON HZB_PUSH_METRICS(MONITOR_ID)"); + } + + if (!timeIndexExists) { + stmt.execute("CREATE INDEX IDX_PUSH_METRICS_TIME ON HZB_PUSH_METRICS(TIME)"); + } + } + } +} +$$; +CALL UPDATE_PUSH_METRICS_INDEXES(); +DROP ALIAS UPDATE_PUSH_METRICS_INDEXES; + +-- ======================================== +-- hzb_history table +-- ======================================== +CREATE ALIAS UPDATE_HISTORY_INDEXES AS $$ +void updateHistoryIndexes(java.sql.Connection conn) throws java.sql.SQLException { + boolean tableExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_HISTORY", null)) { + if (rs.next()) tableExists = true; + } + + if (tableExists) { + try (java.sql.Statement stmt = conn.createStatement()) { + // Drop old index if exists + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_HISTORY", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("HISTORY_QUERY_INDEX".equalsIgnoreCase(indexName)) { + stmt.execute("DROP INDEX HISTORY_QUERY_INDEX"); + break; + } + } + } catch (Exception e) { + // Index may not exist, continue + } + + // Create new indexes if not exist + boolean instanceIndexExists = false; + boolean appIndexExists = false; + boolean metricsIndexExists = false; + boolean metricIndexExists = false; + + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_HISTORY", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("IDX_HZB_HISTORY_INSTANCE".equalsIgnoreCase(indexName)) { + instanceIndexExists = true; + } + if ("IDX_HZB_HISTORY_APP".equalsIgnoreCase(indexName)) { + appIndexExists = true; + } + if ("IDX_HZB_HISTORY_METRICS".equalsIgnoreCase(indexName)) { + metricsIndexExists = true; + } + if ("IDX_HZB_HISTORY_METRIC".equalsIgnoreCase(indexName)) { + metricIndexExists = true; + } + } + } + + if (!instanceIndexExists) { + stmt.execute("CREATE INDEX IDX_HZB_HISTORY_INSTANCE ON HZB_HISTORY(INSTANCE)"); + } + + if (!appIndexExists) { + stmt.execute("CREATE INDEX IDX_HZB_HISTORY_APP ON HZB_HISTORY(APP)"); + } + + if (!metricsIndexExists) { + stmt.execute("CREATE INDEX IDX_HZB_HISTORY_METRICS ON HZB_HISTORY(METRICS)"); + } + + if (!metricIndexExists) { + stmt.execute("CREATE INDEX IDX_HZB_HISTORY_METRIC ON HZB_HISTORY(METRIC)"); + } + } + } +} +$$; +CALL UPDATE_HISTORY_INDEXES(); +DROP ALIAS UPDATE_HISTORY_INDEXES; + +-- ======================================== +-- hzb_param table +-- ======================================== +CREATE ALIAS UPDATE_PARAM_TABLE_INDEXES AS $$ +void updateParamTableIndexes(java.sql.Connection conn) throws java.sql.SQLException { + boolean tableExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_PARAM", null)) { + if (rs.next()) tableExists = true; + } + + if (tableExists) { + try (java.sql.Statement stmt = conn.createStatement()) { + // Drop old index if exists + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PARAM", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("IDX_HZB_PARAM_MONITOR_ID".equalsIgnoreCase(indexName)) { + stmt.execute("DROP INDEX IDX_HZB_PARAM_MONITOR_ID"); + break; + } + } + } catch (Exception e) { + // Index may not exist, continue + } + + // Create new index if not exist + boolean indexExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PARAM", false, false)) { + while (rs.next()) { + if ("IDX_HZB_PARAM_MONITOR_ID".equalsIgnoreCase(rs.getString("INDEX_NAME"))) { + indexExists = true; + break; + } + } + } + if (!indexExists) { + stmt.execute("CREATE INDEX IDX_HZB_PARAM_MONITOR_ID ON HZB_PARAM(MONITOR_ID)"); + } + + // Drop old unique constraint if exists + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PARAM", true, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if (indexName != null && indexName.equalsIgnoreCase("UK_HZB_PARAM_MONITOR_FIELD")) { + stmt.execute("DROP INDEX UK_HZB_PARAM_MONITOR_FIELD"); + break; + } + } + } catch (Exception e) { + // Constraint may not exist, continue + } + + // Create new unique constraint if not exist + boolean constraintExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PARAM", true, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if (indexName != null && indexName.equalsIgnoreCase("UK_HZB_PARAM_MONITOR_FIELD")) { + constraintExists = true; + break; + } + } + } + if (!constraintExists) { + stmt.execute("CREATE UNIQUE INDEX UK_HZB_PARAM_MONITOR_FIELD ON HZB_PARAM(MONITOR_ID, FIELD)"); + } + } + } +} +$$; +CALL UPDATE_PARAM_TABLE_INDEXES(); +DROP ALIAS UPDATE_PARAM_TABLE_INDEXES; + +-- ======================================== +-- hzb_plugin_param table +-- ======================================== +CREATE ALIAS UPDATE_PLUGIN_PARAM_TABLE_INDEXES AS $$ +void updatePluginParamTableIndexes(java.sql.Connection conn) throws java.sql.SQLException { + boolean tableExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_PLUGIN_PARAM", null)) { + if (rs.next()) tableExists = true; + } + + if (tableExists) { + try (java.sql.Statement stmt = conn.createStatement()) { + // Drop old index if exists + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PLUGIN_PARAM", false, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if ("IDX_HZB_PLUGIN_PARAM_PLUGIN_METADATA_ID".equalsIgnoreCase(indexName)) { + stmt.execute("DROP INDEX IDX_HZB_PLUGIN_PARAM_PLUGIN_METADATA_ID"); + break; + } + } + } catch (Exception e) { + // Index may not exist, continue + } + + // Create new index if not exist + boolean indexExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PLUGIN_PARAM", false, false)) { + while (rs.next()) { + if ("IDX_HZB_PLUGIN_PARAM_PLUGIN_METADATA_ID".equalsIgnoreCase(rs.getString("INDEX_NAME"))) { + indexExists = true; + break; + } + } + } + if (!indexExists) { + stmt.execute("CREATE INDEX IDX_HZB_PLUGIN_PARAM_PLUGIN_METADATA_ID ON HZB_PLUGIN_PARAM(PLUGIN_METADATA_ID)"); + } + + // Drop old unique constraint if exists + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PLUGIN_PARAM", true, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if (indexName != null && indexName.equalsIgnoreCase("UK_HZB_PLUGIN_PARAM_METADATA_FIELD")) { + stmt.execute("DROP INDEX UK_HZB_PLUGIN_PARAM_METADATA_FIELD"); + break; + } + } + } catch (Exception e) { + // Constraint may not exist, continue + } + + // Create new unique constraint if not exist + boolean constraintExists = false; + try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PLUGIN_PARAM", true, false)) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + if (indexName != null && indexName.equalsIgnoreCase("UK_HZB_PLUGIN_PARAM_METADATA_FIELD")) { + constraintExists = true; + break; + } + } + } + if (!constraintExists) { + stmt.execute("CREATE UNIQUE INDEX UK_HZB_PLUGIN_PARAM_METADATA_FIELD ON HZB_PLUGIN_PARAM(PLUGIN_METADATA_ID, FIELD)"); + } + } + } +} +$$; +CALL UPDATE_PLUGIN_PARAM_TABLE_INDEXES(); +DROP ALIAS UPDATE_PLUGIN_PARAM_TABLE_INDEXES; diff --git a/hertzbeat-startup/src/main/resources/db/migration/h2/V181__update_indexes.sql b/hertzbeat-startup/src/main/resources/db/migration/h2/V181__update_indexes.sql deleted file mode 100644 index dcf84b27944..00000000000 --- a/hertzbeat-startup/src/main/resources/db/migration/h2/V181__update_indexes.sql +++ /dev/null @@ -1,534 +0,0 @@ --- Licensed to the Apache Software Foundation (ASF) under one --- or more contributor license agreements. See the NOTICE file --- distributed with this work for additional information --- regarding copyright ownership. The ASF licenses this file --- to you under the Apache License, Version 2.0 (the --- "License"); you may not use this file except in compliance --- with the License. You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, --- software distributed under the License is distributed on an --- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express --- or implied. See the License for the specific language --- governing permissions and limitations --- under the License. - --- Ensure every SQL can rerun without error --- This migration updates indexes to match the entity annotations - --- ======================================== --- hzb_alert_define_monitor_bind table --- ======================================== -CREATE ALIAS UPDATE_ALERT_DEFINE_MONITOR_BIND_INDEXES AS $$ -void updateAlertDefineMonitorBindIndexes(java.sql.Connection conn) throws java.sql.SQLException { - boolean tableExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_ALERT_DEFINE_MONITOR_BIND", null)) { - if (rs.next()) tableExists = true; - } - - if (tableExists) { - try (java.sql.Statement stmt = conn.createStatement()) { - // Drop old index if exists - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_ALERT_DEFINE_MONITOR_BIND", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("INDEX_ALERT_DEFINE_MONITOR".equalsIgnoreCase(indexName)) { - stmt.execute("DROP INDEX INDEX_ALERT_DEFINE_MONITOR"); - break; - } - } - } catch (Exception e) { - // Index may not exist, continue - } - - // Create new indexes if not exist - boolean alertDefineIdIndexExists = false; - boolean monitorIdIndexExists = false; - - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_ALERT_DEFINE_MONITOR_BIND", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("IDX_ALERT_DEFINE_ID".equalsIgnoreCase(indexName)) { - alertDefineIdIndexExists = true; - } - if ("IDX_MONITOR_ID".equalsIgnoreCase(indexName)) { - monitorIdIndexExists = true; - } - } - } - - if (!alertDefineIdIndexExists) { - stmt.execute("CREATE INDEX IDX_ALERT_DEFINE_ID ON HZB_ALERT_DEFINE_MONITOR_BIND(ALERT_DEFINE_ID)"); - } - - if (!monitorIdIndexExists) { - stmt.execute("CREATE INDEX IDX_MONITOR_ID ON HZB_ALERT_DEFINE_MONITOR_BIND(MONITOR_ID)"); - } - } - } -} -$$; -CALL UPDATE_ALERT_DEFINE_MONITOR_BIND_INDEXES(); -DROP ALIAS UPDATE_ALERT_DEFINE_MONITOR_BIND_INDEXES; - --- ======================================== --- hzb_collector_monitor_bind table --- ======================================== -CREATE ALIAS UPDATE_COLLECTOR_MONITOR_BIND_INDEXES AS $$ -void updateCollectorMonitorBindIndexes(java.sql.Connection conn) throws java.sql.SQLException { - boolean tableExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_COLLECTOR_MONITOR_BIND", null)) { - if (rs.next()) tableExists = true; - } - - if (tableExists) { - try (java.sql.Statement stmt = conn.createStatement()) { - // Drop old index if exists - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_COLLECTOR_MONITOR_BIND", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("INDEX_COLLECTOR_MONITOR".equalsIgnoreCase(indexName)) { - stmt.execute("DROP INDEX INDEX_COLLECTOR_MONITOR"); - break; - } - } - } catch (Exception e) { - // Index may not exist, continue - } - - // Create new indexes if not exist - boolean collectorIndexExists = false; - boolean monitorIdIndexExists = false; - - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_COLLECTOR_MONITOR_BIND", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("IDX_COLLECTOR_MONITOR_COLLECTOR".equalsIgnoreCase(indexName)) { - collectorIndexExists = true; - } - if ("IDX_COLLECTOR_MONITOR_MONITOR_ID".equalsIgnoreCase(indexName)) { - monitorIdIndexExists = true; - } - } - } - - if (!collectorIndexExists) { - stmt.execute("CREATE INDEX IDX_COLLECTOR_MONITOR_COLLECTOR ON HZB_COLLECTOR_MONITOR_BIND(COLLECTOR)"); - } - - if (!monitorIdIndexExists) { - stmt.execute("CREATE INDEX IDX_COLLECTOR_MONITOR_MONITOR_ID ON HZB_COLLECTOR_MONITOR_BIND(MONITOR_ID)"); - } - } - } -} -$$; -CALL UPDATE_COLLECTOR_MONITOR_BIND_INDEXES(); -DROP ALIAS UPDATE_COLLECTOR_MONITOR_BIND_INDEXES; - --- ======================================== --- hzb_monitor table --- ======================================== -CREATE ALIAS UPDATE_MONITOR_INDEXES AS $$ -void updateMonitorIndexes(java.sql.Connection conn) throws java.sql.SQLException { - boolean tableExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_MONITOR", null)) { - if (rs.next()) tableExists = true; - } - - if (tableExists) { - try (java.sql.Statement stmt = conn.createStatement()) { - // Drop old index if exists - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_MONITOR", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("MONITOR_QUERY_INDEX".equalsIgnoreCase(indexName)) { - stmt.execute("DROP INDEX MONITOR_QUERY_INDEX"); - break; - } - } - } catch (Exception e) { - // Index may not exist, continue - } - - // Create new indexes if not exist - boolean appIndexExists = false; - boolean instanceIndexExists = false; - boolean nameIndexExists = false; - - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_MONITOR", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("IDX_HZB_MONITOR_APP".equalsIgnoreCase(indexName)) { - appIndexExists = true; - } - if ("IDX_HZB_MONITOR_INSTANCE".equalsIgnoreCase(indexName)) { - instanceIndexExists = true; - } - if ("IDX_HZB_MONITOR_NAME".equalsIgnoreCase(indexName)) { - nameIndexExists = true; - } - } - } - - if (!appIndexExists) { - stmt.execute("CREATE INDEX IDX_HZB_MONITOR_APP ON HZB_MONITOR(APP)"); - } - - if (!instanceIndexExists) { - stmt.execute("CREATE INDEX IDX_HZB_MONITOR_INSTANCE ON HZB_MONITOR(INSTANCE)"); - } - - if (!nameIndexExists) { - stmt.execute("CREATE INDEX IDX_HZB_MONITOR_NAME ON HZB_MONITOR(NAME)"); - } - } - } -} -$$; -CALL UPDATE_MONITOR_INDEXES(); -DROP ALIAS UPDATE_MONITOR_INDEXES; - --- ======================================== --- hzb_monitor_bind table --- ======================================== -CREATE ALIAS UPDATE_MONITOR_BIND_INDEXES AS $$ -void updateMonitorBindIndexes(java.sql.Connection conn) throws java.sql.SQLException { - boolean tableExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_MONITOR_BIND", null)) { - if (rs.next()) tableExists = true; - } - - if (tableExists) { - try (java.sql.Statement stmt = conn.createStatement()) { - // Create new index if not exist - boolean bindIndexExists = false; - - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_MONITOR_BIND", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("INDEX_MONITOR_BIND".equalsIgnoreCase(indexName)) { - bindIndexExists = true; - } - } - } - - if (!bindIndexExists) { - stmt.execute("CREATE INDEX INDEX_MONITOR_BIND ON HZB_MONITOR_BIND(BIZ_ID)"); - } - } - } -} -$$; -CALL UPDATE_MONITOR_BIND_INDEXES(); -DROP ALIAS UPDATE_MONITOR_BIND_INDEXES; - --- ======================================== --- hzb_status_page_incident_component_bind table --- Special handling: component_id might have auto-created index from FK --- ======================================== -CREATE ALIAS UPDATE_STATUS_PAGE_INCIDENT_COMPONENT_BIND_INDEXES AS $$ -void updateStatusPageIncidentComponentBindIndexes(java.sql.Connection conn) throws java.sql.SQLException { - boolean tableExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_STATUS_PAGE_INCIDENT_COMPONENT_BIND", null)) { - if (rs.next()) tableExists = true; - } - - if (tableExists) { - try (java.sql.Statement stmt = conn.createStatement()) { - // Check if component_id column already has any index - boolean hasComponentIdIndex = false; - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_STATUS_PAGE_INCIDENT_COMPONENT_BIND", false, false)) { - while (rs.next()) { - String columnName = rs.getString("COLUMN_NAME"); - if (columnName != null && "COMPONENT_ID".equalsIgnoreCase(columnName)) { - hasComponentIdIndex = true; - break; - } - } - } - - // Create index on component_id only if no index exists on this column - if (!hasComponentIdIndex) { - stmt.execute("CREATE INDEX IDX_INCIDENT_COMPONENT_COMPONENT_ID ON HZB_STATUS_PAGE_INCIDENT_COMPONENT_BIND(COMPONENT_ID)"); - } - } - } -} -$$; -CALL UPDATE_STATUS_PAGE_INCIDENT_COMPONENT_BIND_INDEXES(); -DROP ALIAS UPDATE_STATUS_PAGE_INCIDENT_COMPONENT_BIND_INDEXES; - --- ======================================== --- hzb_push_metrics table --- ======================================== -CREATE ALIAS UPDATE_PUSH_METRICS_INDEXES AS $$ -void updatePushMetricsIndexes(java.sql.Connection conn) throws java.sql.SQLException { - boolean tableExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_PUSH_METRICS", null)) { - if (rs.next()) tableExists = true; - } - - if (tableExists) { - try (java.sql.Statement stmt = conn.createStatement()) { - // Drop old index if exists - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PUSH_METRICS", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("PUSH_QUERY_INDEX".equalsIgnoreCase(indexName)) { - stmt.execute("DROP INDEX PUSH_QUERY_INDEX"); - break; - } - } - } catch (Exception e) { - // Index may not exist, continue - } - - // Create new indexes if not exist - boolean monitorIdIndexExists = false; - boolean timeIndexExists = false; - - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PUSH_METRICS", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("IDX_PUSH_METRICS_MONITOR_ID".equalsIgnoreCase(indexName)) { - monitorIdIndexExists = true; - } - if ("IDX_PUSH_METRICS_TIME".equalsIgnoreCase(indexName)) { - timeIndexExists = true; - } - } - } - - if (!monitorIdIndexExists) { - stmt.execute("CREATE INDEX IDX_PUSH_METRICS_MONITOR_ID ON HZB_PUSH_METRICS(MONITOR_ID)"); - } - - if (!timeIndexExists) { - stmt.execute("CREATE INDEX IDX_PUSH_METRICS_TIME ON HZB_PUSH_METRICS(TIME)"); - } - } - } -} -$$; -CALL UPDATE_PUSH_METRICS_INDEXES(); -DROP ALIAS UPDATE_PUSH_METRICS_INDEXES; - --- ======================================== --- hzb_history table --- ======================================== -CREATE ALIAS UPDATE_HISTORY_INDEXES AS $$ -void updateHistoryIndexes(java.sql.Connection conn) throws java.sql.SQLException { - boolean tableExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_HISTORY", null)) { - if (rs.next()) tableExists = true; - } - - if (tableExists) { - try (java.sql.Statement stmt = conn.createStatement()) { - // Drop old index if exists - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_HISTORY", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("HISTORY_QUERY_INDEX".equalsIgnoreCase(indexName)) { - stmt.execute("DROP INDEX HISTORY_QUERY_INDEX"); - break; - } - } - } catch (Exception e) { - // Index may not exist, continue - } - - // Create new indexes if not exist - boolean instanceIndexExists = false; - boolean appIndexExists = false; - boolean metricsIndexExists = false; - boolean metricIndexExists = false; - - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_HISTORY", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("IDX_HZB_HISTORY_INSTANCE".equalsIgnoreCase(indexName)) { - instanceIndexExists = true; - } - if ("IDX_HZB_HISTORY_APP".equalsIgnoreCase(indexName)) { - appIndexExists = true; - } - if ("IDX_HZB_HISTORY_METRICS".equalsIgnoreCase(indexName)) { - metricsIndexExists = true; - } - if ("IDX_HZB_HISTORY_METRIC".equalsIgnoreCase(indexName)) { - metricIndexExists = true; - } - } - } - - if (!instanceIndexExists) { - stmt.execute("CREATE INDEX IDX_HZB_HISTORY_INSTANCE ON HZB_HISTORY(INSTANCE)"); - } - - if (!appIndexExists) { - stmt.execute("CREATE INDEX IDX_HZB_HISTORY_APP ON HZB_HISTORY(APP)"); - } - - if (!metricsIndexExists) { - stmt.execute("CREATE INDEX IDX_HZB_HISTORY_METRICS ON HZB_HISTORY(METRICS)"); - } - - if (!metricIndexExists) { - stmt.execute("CREATE INDEX IDX_HZB_HISTORY_METRIC ON HZB_HISTORY(METRIC)"); - } - } - } -} -$$; -CALL UPDATE_HISTORY_INDEXES(); -DROP ALIAS UPDATE_HISTORY_INDEXES; - --- ======================================== --- hzb_param table --- ======================================== -CREATE ALIAS UPDATE_PARAM_TABLE_INDEXES AS $$ -void updateParamTableIndexes(java.sql.Connection conn) throws java.sql.SQLException { - boolean tableExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_PARAM", null)) { - if (rs.next()) tableExists = true; - } - - if (tableExists) { - try (java.sql.Statement stmt = conn.createStatement()) { - // Drop old index if exists - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PARAM", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("IDX_HZB_PARAM_MONITOR_ID".equalsIgnoreCase(indexName)) { - stmt.execute("DROP INDEX IDX_HZB_PARAM_MONITOR_ID"); - break; - } - } - } catch (Exception e) { - // Index may not exist, continue - } - - // Create new index if not exist - boolean indexExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PARAM", false, false)) { - while (rs.next()) { - if ("IDX_HZB_PARAM_MONITOR_ID".equalsIgnoreCase(rs.getString("INDEX_NAME"))) { - indexExists = true; - break; - } - } - } - if (!indexExists) { - stmt.execute("CREATE INDEX IDX_HZB_PARAM_MONITOR_ID ON HZB_PARAM(MONITOR_ID)"); - } - - // Drop old unique constraint if exists - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PARAM", true, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if (indexName != null && indexName.equalsIgnoreCase("UK_HZB_PARAM_MONITOR_FIELD")) { - stmt.execute("DROP INDEX UK_HZB_PARAM_MONITOR_FIELD"); - break; - } - } - } catch (Exception e) { - // Constraint may not exist, continue - } - - // Create new unique constraint if not exist - boolean constraintExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PARAM", true, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if (indexName != null && indexName.equalsIgnoreCase("UK_HZB_PARAM_MONITOR_FIELD")) { - constraintExists = true; - break; - } - } - } - if (!constraintExists) { - stmt.execute("CREATE UNIQUE INDEX UK_HZB_PARAM_MONITOR_FIELD ON HZB_PARAM(MONITOR_ID, FIELD)"); - } - } - } -} -$$; -CALL UPDATE_PARAM_TABLE_INDEXES(); -DROP ALIAS UPDATE_PARAM_TABLE_INDEXES; - --- ======================================== --- hzb_plugin_param table --- ======================================== -CREATE ALIAS UPDATE_PLUGIN_PARAM_TABLE_INDEXES AS $$ -void updatePluginParamTableIndexes(java.sql.Connection conn) throws java.sql.SQLException { - boolean tableExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getTables(null, null, "HZB_PLUGIN_PARAM", null)) { - if (rs.next()) tableExists = true; - } - - if (tableExists) { - try (java.sql.Statement stmt = conn.createStatement()) { - // Drop old index if exists - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PLUGIN_PARAM", false, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if ("IDX_HZB_PLUGIN_PARAM_PLUGIN_METADATA_ID".equalsIgnoreCase(indexName)) { - stmt.execute("DROP INDEX IDX_HZB_PLUGIN_PARAM_PLUGIN_METADATA_ID"); - break; - } - } - } catch (Exception e) { - // Index may not exist, continue - } - - // Create new index if not exist - boolean indexExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PLUGIN_PARAM", false, false)) { - while (rs.next()) { - if ("IDX_HZB_PLUGIN_PARAM_PLUGIN_METADATA_ID".equalsIgnoreCase(rs.getString("INDEX_NAME"))) { - indexExists = true; - break; - } - } - } - if (!indexExists) { - stmt.execute("CREATE INDEX IDX_HZB_PLUGIN_PARAM_PLUGIN_METADATA_ID ON HZB_PLUGIN_PARAM(PLUGIN_METADATA_ID)"); - } - - // Drop old unique constraint if exists - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PLUGIN_PARAM", true, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if (indexName != null && indexName.equalsIgnoreCase("UK_HZB_PLUGIN_PARAM_METADATA_FIELD")) { - stmt.execute("DROP INDEX UK_HZB_PLUGIN_PARAM_METADATA_FIELD"); - break; - } - } - } catch (Exception e) { - // Constraint may not exist, continue - } - - // Create new unique constraint if not exist - boolean constraintExists = false; - try (java.sql.ResultSet rs = conn.getMetaData().getIndexInfo(null, null, "HZB_PLUGIN_PARAM", true, false)) { - while (rs.next()) { - String indexName = rs.getString("INDEX_NAME"); - if (indexName != null && indexName.equalsIgnoreCase("UK_HZB_PLUGIN_PARAM_METADATA_FIELD")) { - constraintExists = true; - break; - } - } - } - if (!constraintExists) { - stmt.execute("CREATE UNIQUE INDEX UK_HZB_PLUGIN_PARAM_METADATA_FIELD ON HZB_PLUGIN_PARAM(PLUGIN_METADATA_ID, FIELD)"); - } - } - } -} -$$; -CALL UPDATE_PLUGIN_PARAM_TABLE_INDEXES(); -DROP ALIAS UPDATE_PLUGIN_PARAM_TABLE_INDEXES; diff --git a/hertzbeat-startup/src/main/resources/db/migration/mysql/V180__update_column.sql b/hertzbeat-startup/src/main/resources/db/migration/mysql/V180__update_column.sql index 2f7798360f3..e542af106b2 100644 --- a/hertzbeat-startup/src/main/resources/db/migration/mysql/V180__update_column.sql +++ b/hertzbeat-startup/src/main/resources/db/migration/mysql/V180__update_column.sql @@ -91,7 +91,7 @@ BEGIN SELECT COUNT(*) INTO monitor_id_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_history' AND COLUMN_NAME = 'monitor_id'; SELECT COUNT(*) INTO metric_labels_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_history' AND COLUMN_NAME = 'metric_labels'; - + IF monitor_id_exists > 0 THEN IF metric_labels_exists = 0 THEN SET @sql_rename = 'ALTER TABLE hzb_history CHANGE instance metric_labels VARCHAR(5000)'; @@ -111,9 +111,9 @@ BEGIN EXECUTE stmt_resize; DEALLOCATE PREPARE stmt_resize; END IF; - + UPDATE hzb_history h JOIN hzb_monitor m ON h.monitor_id = m.id SET h.instance = m.instance; - + SET @sql_drop = 'ALTER TABLE hzb_history DROP COLUMN monitor_id'; PREPARE stmt_drop FROM @sql_drop; EXECUTE stmt_drop; @@ -124,4 +124,433 @@ DELIMITER ; CALL MigrateHistoryTable(); DROP PROCEDURE IF EXISTS MigrateHistoryTable; +-- ======================================== +-- hzb_alert_define_monitor_bind table +-- ======================================== +DELIMITER // +CREATE PROCEDURE UpdateAlertDefineMonitorBindIndexes() +BEGIN + DECLARE table_exists INT; + + SELECT COUNT(*) INTO table_exists + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_alert_define_monitor_bind'; + + IF table_exists = 1 THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_alert_define_monitor_bind' + AND INDEX_NAME = 'index_alert_define_monitor') THEN + SET @drop_sql = 'DROP INDEX index_alert_define_monitor ON hzb_alert_define_monitor_bind'; + PREPARE stmt FROM @drop_sql; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_alert_define_monitor_bind' + AND INDEX_NAME = 'idx_alert_define_id') THEN + CREATE INDEX idx_alert_define_id ON hzb_alert_define_monitor_bind(alert_define_id); + END IF; + + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_alert_define_monitor_bind' + AND INDEX_NAME = 'idx_monitor_id') THEN + CREATE INDEX idx_monitor_id ON hzb_alert_define_monitor_bind(monitor_id); + END IF; + END IF; +END // +DELIMITER ; + +CALL UpdateAlertDefineMonitorBindIndexes(); +DROP PROCEDURE IF EXISTS UpdateAlertDefineMonitorBindIndexes; + +-- ======================================== +-- hzb_collector_monitor_bind table +-- ======================================== +DELIMITER // +CREATE PROCEDURE UpdateCollectorMonitorBindIndexes() +BEGIN + DECLARE table_exists INT; + + SELECT COUNT(*) INTO table_exists + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_collector_monitor_bind'; + + IF table_exists = 1 THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_collector_monitor_bind' + AND INDEX_NAME = 'index_collector_monitor') THEN + SET @drop_sql = 'DROP INDEX index_collector_monitor ON hzb_collector_monitor_bind'; + PREPARE stmt FROM @drop_sql; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_collector_monitor_bind' + AND INDEX_NAME = 'idx_collector_monitor_collector') THEN + CREATE INDEX idx_collector_monitor_collector ON hzb_collector_monitor_bind(collector); + END IF; + + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_collector_monitor_bind' + AND INDEX_NAME = 'idx_collector_monitor_monitor_id') THEN + CREATE INDEX idx_collector_monitor_monitor_id ON hzb_collector_monitor_bind(monitor_id); + END IF; + END IF; +END // +DELIMITER ; + +CALL UpdateCollectorMonitorBindIndexes(); +DROP PROCEDURE IF EXISTS UpdateCollectorMonitorBindIndexes; + +-- ======================================== +-- hzb_monitor table +-- ======================================== +DELIMITER // +CREATE PROCEDURE UpdateMonitorIndexes() +BEGIN + DECLARE table_exists INT; + + SELECT COUNT(*) INTO table_exists + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_monitor'; + + IF table_exists = 1 THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_monitor' + AND INDEX_NAME = 'monitor_query_index') THEN + SET @drop_sql = 'DROP INDEX monitor_query_index ON hzb_monitor'; + PREPARE stmt FROM @drop_sql; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_monitor' + AND INDEX_NAME = 'idx_hzb_monitor_app') THEN + CREATE INDEX idx_hzb_monitor_app ON hzb_monitor(app); + END IF; + + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_monitor' + AND INDEX_NAME = 'idx_hzb_monitor_instance') THEN + CREATE INDEX idx_hzb_monitor_instance ON hzb_monitor(instance); + END IF; + + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_monitor' + AND INDEX_NAME = 'idx_hzb_monitor_name') THEN + CREATE INDEX idx_hzb_monitor_name ON hzb_monitor(name); + END IF; + END IF; +END // +DELIMITER ; + +CALL UpdateMonitorIndexes(); +DROP PROCEDURE IF EXISTS UpdateMonitorIndexes; + +-- ======================================== +-- hzb_monitor_bind table +-- ======================================== +DELIMITER // +CREATE PROCEDURE UpdateMonitorBindIndexes() +BEGIN + DECLARE table_exists INT; + + SELECT COUNT(*) INTO table_exists + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_monitor_bind'; + + IF table_exists = 1 THEN + -- Create new index if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_monitor_bind' + AND INDEX_NAME = 'index_monitor_bind') THEN + CREATE INDEX index_monitor_bind ON hzb_monitor_bind(biz_id); + END IF; + END IF; +END // +DELIMITER ; + +CALL UpdateMonitorBindIndexes(); +DROP PROCEDURE IF EXISTS UpdateMonitorBindIndexes; + +-- ======================================== +-- hzb_status_page_incident_component_bind table +-- Special handling: component_id might have auto-created index from FK +-- ======================================== +DELIMITER // +CREATE PROCEDURE UpdateStatusPageIncidentComponentBindIndexes() +BEGIN + DECLARE table_exists INT; + DECLARE component_id_has_index INT; + + SELECT COUNT(*) INTO table_exists + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_status_page_incident_component_bind'; + + IF table_exists = 1 THEN + -- Check if component_id column already has any index (including auto-created by FK) + SELECT COUNT(*) INTO component_id_has_index + FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_status_page_incident_component_bind' + AND COLUMN_NAME = 'component_id' + AND INDEX_NAME != 'PRIMARY'; + + -- Create index on component_id only if no index exists on this column + IF component_id_has_index = 0 THEN + CREATE INDEX idx_incident_component_component_id ON hzb_status_page_incident_component_bind(component_id); + END IF; + END IF; +END // +DELIMITER ; + +CALL UpdateStatusPageIncidentComponentBindIndexes(); +DROP PROCEDURE IF EXISTS UpdateStatusPageIncidentComponentBindIndexes; + +-- ======================================== +-- hzb_push_metrics table +-- ======================================== +DELIMITER // +CREATE PROCEDURE UpdatePushMetricsIndexes() +BEGIN + DECLARE table_exists INT; + + SELECT COUNT(*) INTO table_exists + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_push_metrics'; + + IF table_exists = 1 THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_push_metrics' + AND INDEX_NAME = 'push_query_index') THEN + SET @drop_sql = 'DROP INDEX push_query_index ON hzb_push_metrics'; + PREPARE stmt FROM @drop_sql; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_push_metrics' + AND INDEX_NAME = 'idx_push_metrics_monitor_id') THEN + CREATE INDEX idx_push_metrics_monitor_id ON hzb_push_metrics(monitor_id); + END IF; + + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_push_metrics' + AND INDEX_NAME = 'idx_push_metrics_time') THEN + CREATE INDEX idx_push_metrics_time ON hzb_push_metrics(time); + END IF; + END IF; +END // +DELIMITER ; + +CALL UpdatePushMetricsIndexes(); +DROP PROCEDURE IF EXISTS UpdatePushMetricsIndexes; + +-- ======================================== +-- hzb_history table +-- ======================================== +DELIMITER // +CREATE PROCEDURE UpdateHistoryIndexes() +BEGIN + DECLARE table_exists INT; + + SELECT COUNT(*) INTO table_exists + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_history'; + + IF table_exists = 1 THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_history' + AND INDEX_NAME = 'history_query_index') THEN + SET @drop_sql = 'DROP INDEX history_query_index ON hzb_history'; + PREPARE stmt FROM @drop_sql; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_history' + AND INDEX_NAME = 'idx_hzb_history_instance') THEN + CREATE INDEX idx_hzb_history_instance ON hzb_history(instance); + END IF; + + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_history' + AND INDEX_NAME = 'idx_hzb_history_app') THEN + CREATE INDEX idx_hzb_history_app ON hzb_history(app); + END IF; + + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_history' + AND INDEX_NAME = 'idx_hzb_history_metrics') THEN + CREATE INDEX idx_hzb_history_metrics ON hzb_history(metrics); + END IF; + + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_history' + AND INDEX_NAME = 'idx_hzb_history_metric') THEN + CREATE INDEX idx_hzb_history_metric ON hzb_history(metric); + END IF; + END IF; +END // +DELIMITER ; + +CALL UpdateHistoryIndexes(); +DROP PROCEDURE IF EXISTS UpdateHistoryIndexes; + +-- ======================================== +-- hzb_param table +-- ======================================== +DELIMITER // +CREATE PROCEDURE UpdateParamTableIndexes() +BEGIN + DECLARE table_exists INT; + + SELECT COUNT(*) INTO table_exists + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_param'; + + IF table_exists = 1 THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_param' + AND INDEX_NAME = 'idx_hzb_param_monitor_id') THEN + SET @drop_sql = 'DROP INDEX idx_hzb_param_monitor_id ON hzb_param'; + PREPARE stmt FROM @drop_sql; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + END IF; + + -- Create new index if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_param' + AND INDEX_NAME = 'idx_hzb_param_monitor_id') THEN + CREATE INDEX idx_hzb_param_monitor_id ON hzb_param(monitor_id); + END IF; + + -- Drop old unique constraint if exists + IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_param' + AND CONSTRAINT_TYPE = 'UNIQUE' + AND CONSTRAINT_NAME = 'uk_hzb_param_monitor_field') THEN + SET @drop_sql = 'ALTER TABLE hzb_param DROP INDEX uk_hzb_param_monitor_field'; + PREPARE stmt FROM @drop_sql; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + END IF; + + -- Create new unique constraint if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_param' + AND CONSTRAINT_TYPE = 'UNIQUE' + AND CONSTRAINT_NAME = 'uk_hzb_param_monitor_field') THEN + ALTER TABLE hzb_param + ADD CONSTRAINT uk_hzb_param_monitor_field + UNIQUE (monitor_id, field); + END IF; + END IF; +END // +DELIMITER ; + +CALL UpdateParamTableIndexes(); +DROP PROCEDURE IF EXISTS UpdateParamTableIndexes; + +-- ======================================== +-- hzb_plugin_param table +-- ======================================== +DELIMITER // +CREATE PROCEDURE UpdatePluginParamTableIndexes() +BEGIN + DECLARE table_exists INT; + + SELECT COUNT(*) INTO table_exists + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_plugin_param'; + + IF table_exists = 1 THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_plugin_param' + AND INDEX_NAME = 'idx_hzb_plugin_param_plugin_metadata_id') THEN + SET @drop_sql = 'DROP INDEX idx_hzb_plugin_param_plugin_metadata_id ON hzb_plugin_param'; + PREPARE stmt FROM @drop_sql; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + END IF; + + -- Create new index if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_plugin_param' + AND INDEX_NAME = 'idx_hzb_plugin_param_plugin_metadata_id') THEN + CREATE INDEX idx_hzb_plugin_param_plugin_metadata_id ON hzb_plugin_param(plugin_metadata_id); + END IF; + + -- Drop old unique constraint if exists + IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_plugin_param' + AND CONSTRAINT_TYPE = 'UNIQUE' + AND CONSTRAINT_NAME = 'uk_hzb_plugin_param_metadata_field') THEN + SET @drop_sql = 'ALTER TABLE hzb_plugin_param DROP INDEX uk_hzb_plugin_param_metadata_field'; + PREPARE stmt FROM @drop_sql; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + END IF; + + -- Create new unique constraint if not exist + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'hzb_plugin_param' + AND CONSTRAINT_TYPE = 'UNIQUE' + AND CONSTRAINT_NAME = 'uk_hzb_plugin_param_metadata_field') THEN + ALTER TABLE hzb_plugin_param + ADD CONSTRAINT uk_hzb_plugin_param_metadata_field + UNIQUE (plugin_metadata_id, field); + END IF; + END IF; +END // +DELIMITER ; + +CALL UpdatePluginParamTableIndexes(); +DROP PROCEDURE IF EXISTS UpdatePluginParamTableIndexes; + COMMIT; diff --git a/hertzbeat-startup/src/main/resources/db/migration/mysql/V181__update_indexes.sql b/hertzbeat-startup/src/main/resources/db/migration/mysql/V181__update_indexes.sql deleted file mode 100644 index 88442f98c6b..00000000000 --- a/hertzbeat-startup/src/main/resources/db/migration/mysql/V181__update_indexes.sql +++ /dev/null @@ -1,450 +0,0 @@ --- Licensed to the Apache Software Foundation (ASF) under one --- or more contributor license agreements. See the NOTICE file --- distributed with this work for additional information --- regarding copyright ownership. The ASF licenses this file --- to you under the Apache License, Version 2.0 (the --- "License"); you may not use this file except in compliance --- with the License. You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, --- software distributed under the License is distributed on an --- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express --- or implied. See the License for the specific language --- governing permissions and limitations --- under the License. - --- Ensure every SQL can rerun without error --- This migration updates indexes to match the entity annotations - --- ======================================== --- hzb_alert_define_monitor_bind table --- ======================================== -DELIMITER // -CREATE PROCEDURE UpdateAlertDefineMonitorBindIndexes() -BEGIN - DECLARE table_exists INT; - - SELECT COUNT(*) INTO table_exists - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_alert_define_monitor_bind'; - - IF table_exists = 1 THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_alert_define_monitor_bind' - AND INDEX_NAME = 'index_alert_define_monitor') THEN - SET @drop_sql = 'DROP INDEX index_alert_define_monitor ON hzb_alert_define_monitor_bind'; - PREPARE stmt FROM @drop_sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_alert_define_monitor_bind' - AND INDEX_NAME = 'idx_alert_define_id') THEN - CREATE INDEX idx_alert_define_id ON hzb_alert_define_monitor_bind(alert_define_id); - END IF; - - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_alert_define_monitor_bind' - AND INDEX_NAME = 'idx_monitor_id') THEN - CREATE INDEX idx_monitor_id ON hzb_alert_define_monitor_bind(monitor_id); - END IF; - END IF; -END // -DELIMITER ; - -CALL UpdateAlertDefineMonitorBindIndexes(); -DROP PROCEDURE IF EXISTS UpdateAlertDefineMonitorBindIndexes; - --- ======================================== --- hzb_collector_monitor_bind table --- ======================================== -DELIMITER // -CREATE PROCEDURE UpdateCollectorMonitorBindIndexes() -BEGIN - DECLARE table_exists INT; - - SELECT COUNT(*) INTO table_exists - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_collector_monitor_bind'; - - IF table_exists = 1 THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_collector_monitor_bind' - AND INDEX_NAME = 'index_collector_monitor') THEN - SET @drop_sql = 'DROP INDEX index_collector_monitor ON hzb_collector_monitor_bind'; - PREPARE stmt FROM @drop_sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_collector_monitor_bind' - AND INDEX_NAME = 'idx_collector_monitor_collector') THEN - CREATE INDEX idx_collector_monitor_collector ON hzb_collector_monitor_bind(collector); - END IF; - - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_collector_monitor_bind' - AND INDEX_NAME = 'idx_collector_monitor_monitor_id') THEN - CREATE INDEX idx_collector_monitor_monitor_id ON hzb_collector_monitor_bind(monitor_id); - END IF; - END IF; -END // -DELIMITER ; - -CALL UpdateCollectorMonitorBindIndexes(); -DROP PROCEDURE IF EXISTS UpdateCollectorMonitorBindIndexes; - --- ======================================== --- hzb_monitor table --- ======================================== -DELIMITER // -CREATE PROCEDURE UpdateMonitorIndexes() -BEGIN - DECLARE table_exists INT; - - SELECT COUNT(*) INTO table_exists - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_monitor'; - - IF table_exists = 1 THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_monitor' - AND INDEX_NAME = 'monitor_query_index') THEN - SET @drop_sql = 'DROP INDEX monitor_query_index ON hzb_monitor'; - PREPARE stmt FROM @drop_sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_monitor' - AND INDEX_NAME = 'idx_hzb_monitor_app') THEN - CREATE INDEX idx_hzb_monitor_app ON hzb_monitor(app); - END IF; - - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_monitor' - AND INDEX_NAME = 'idx_hzb_monitor_instance') THEN - CREATE INDEX idx_hzb_monitor_instance ON hzb_monitor(instance); - END IF; - - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_monitor' - AND INDEX_NAME = 'idx_hzb_monitor_name') THEN - CREATE INDEX idx_hzb_monitor_name ON hzb_monitor(name); - END IF; - END IF; -END // -DELIMITER ; - -CALL UpdateMonitorIndexes(); -DROP PROCEDURE IF EXISTS UpdateMonitorIndexes; - --- ======================================== --- hzb_monitor_bind table --- ======================================== -DELIMITER // -CREATE PROCEDURE UpdateMonitorBindIndexes() -BEGIN - DECLARE table_exists INT; - - SELECT COUNT(*) INTO table_exists - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_monitor_bind'; - - IF table_exists = 1 THEN - -- Create new index if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_monitor_bind' - AND INDEX_NAME = 'index_monitor_bind') THEN - CREATE INDEX index_monitor_bind ON hzb_monitor_bind(biz_id); - END IF; - END IF; -END // -DELIMITER ; - -CALL UpdateMonitorBindIndexes(); -DROP PROCEDURE IF EXISTS UpdateMonitorBindIndexes; - --- ======================================== --- hzb_status_page_incident_component_bind table --- Special handling: component_id might have auto-created index from FK --- ======================================== -DELIMITER // -CREATE PROCEDURE UpdateStatusPageIncidentComponentBindIndexes() -BEGIN - DECLARE table_exists INT; - DECLARE component_id_has_index INT; - - SELECT COUNT(*) INTO table_exists - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_status_page_incident_component_bind'; - - IF table_exists = 1 THEN - -- Check if component_id column already has any index (including auto-created by FK) - SELECT COUNT(*) INTO component_id_has_index - FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_status_page_incident_component_bind' - AND COLUMN_NAME = 'component_id' - AND INDEX_NAME != 'PRIMARY'; - - -- Create index on component_id only if no index exists on this column - IF component_id_has_index = 0 THEN - CREATE INDEX idx_incident_component_component_id ON hzb_status_page_incident_component_bind(component_id); - END IF; - END IF; -END // -DELIMITER ; - -CALL UpdateStatusPageIncidentComponentBindIndexes(); -DROP PROCEDURE IF EXISTS UpdateStatusPageIncidentComponentBindIndexes; - --- ======================================== --- hzb_push_metrics table --- ======================================== -DELIMITER // -CREATE PROCEDURE UpdatePushMetricsIndexes() -BEGIN - DECLARE table_exists INT; - - SELECT COUNT(*) INTO table_exists - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_push_metrics'; - - IF table_exists = 1 THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_push_metrics' - AND INDEX_NAME = 'push_query_index') THEN - SET @drop_sql = 'DROP INDEX push_query_index ON hzb_push_metrics'; - PREPARE stmt FROM @drop_sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_push_metrics' - AND INDEX_NAME = 'idx_push_metrics_monitor_id') THEN - CREATE INDEX idx_push_metrics_monitor_id ON hzb_push_metrics(monitor_id); - END IF; - - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_push_metrics' - AND INDEX_NAME = 'idx_push_metrics_time') THEN - CREATE INDEX idx_push_metrics_time ON hzb_push_metrics(time); - END IF; - END IF; -END // -DELIMITER ; - -CALL UpdatePushMetricsIndexes(); -DROP PROCEDURE IF EXISTS UpdatePushMetricsIndexes; - --- ======================================== --- hzb_history table --- ======================================== -DELIMITER // -CREATE PROCEDURE UpdateHistoryIndexes() -BEGIN - DECLARE table_exists INT; - - SELECT COUNT(*) INTO table_exists - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_history'; - - IF table_exists = 1 THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_history' - AND INDEX_NAME = 'history_query_index') THEN - SET @drop_sql = 'DROP INDEX history_query_index ON hzb_history'; - PREPARE stmt FROM @drop_sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_history' - AND INDEX_NAME = 'idx_hzb_history_instance') THEN - CREATE INDEX idx_hzb_history_instance ON hzb_history(instance); - END IF; - - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_history' - AND INDEX_NAME = 'idx_hzb_history_app') THEN - CREATE INDEX idx_hzb_history_app ON hzb_history(app); - END IF; - - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_history' - AND INDEX_NAME = 'idx_hzb_history_metrics') THEN - CREATE INDEX idx_hzb_history_metrics ON hzb_history(metrics); - END IF; - - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_history' - AND INDEX_NAME = 'idx_hzb_history_metric') THEN - CREATE INDEX idx_hzb_history_metric ON hzb_history(metric); - END IF; - END IF; -END // -DELIMITER ; - -CALL UpdateHistoryIndexes(); -DROP PROCEDURE IF EXISTS UpdateHistoryIndexes; - --- ======================================== --- hzb_param table --- ======================================== -DELIMITER // -CREATE PROCEDURE UpdateParamTableIndexes() -BEGIN - DECLARE table_exists INT; - - SELECT COUNT(*) INTO table_exists - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_param'; - - IF table_exists = 1 THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_param' - AND INDEX_NAME = 'idx_hzb_param_monitor_id') THEN - SET @drop_sql = 'DROP INDEX idx_hzb_param_monitor_id ON hzb_param'; - PREPARE stmt FROM @drop_sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - END IF; - - -- Create new index if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_param' - AND INDEX_NAME = 'idx_hzb_param_monitor_id') THEN - CREATE INDEX idx_hzb_param_monitor_id ON hzb_param(monitor_id); - END IF; - - -- Drop old unique constraint if exists - IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_param' - AND CONSTRAINT_TYPE = 'UNIQUE' - AND CONSTRAINT_NAME = 'uk_hzb_param_monitor_field') THEN - SET @drop_sql = 'ALTER TABLE hzb_param DROP INDEX uk_hzb_param_monitor_field'; - PREPARE stmt FROM @drop_sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - END IF; - - -- Create new unique constraint if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_param' - AND CONSTRAINT_TYPE = 'UNIQUE' - AND CONSTRAINT_NAME = 'uk_hzb_param_monitor_field') THEN - ALTER TABLE hzb_param - ADD CONSTRAINT uk_hzb_param_monitor_field - UNIQUE (monitor_id, field); - END IF; - END IF; -END // -DELIMITER ; - -CALL UpdateParamTableIndexes(); -DROP PROCEDURE IF EXISTS UpdateParamTableIndexes; - --- ======================================== --- hzb_plugin_param table --- ======================================== -DELIMITER // -CREATE PROCEDURE UpdatePluginParamTableIndexes() -BEGIN - DECLARE table_exists INT; - - SELECT COUNT(*) INTO table_exists - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hzb_plugin_param'; - - IF table_exists = 1 THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_plugin_param' - AND INDEX_NAME = 'idx_hzb_plugin_param_plugin_metadata_id') THEN - SET @drop_sql = 'DROP INDEX idx_hzb_plugin_param_plugin_metadata_id ON hzb_plugin_param'; - PREPARE stmt FROM @drop_sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - END IF; - - -- Create new index if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_plugin_param' - AND INDEX_NAME = 'idx_hzb_plugin_param_plugin_metadata_id') THEN - CREATE INDEX idx_hzb_plugin_param_plugin_metadata_id ON hzb_plugin_param(plugin_metadata_id); - END IF; - - -- Drop old unique constraint if exists - IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_plugin_param' - AND CONSTRAINT_TYPE = 'UNIQUE' - AND CONSTRAINT_NAME = 'uk_hzb_plugin_param_metadata_field') THEN - SET @drop_sql = 'ALTER TABLE hzb_plugin_param DROP INDEX uk_hzb_plugin_param_metadata_field'; - PREPARE stmt FROM @drop_sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - END IF; - - -- Create new unique constraint if not exist - IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'hzb_plugin_param' - AND CONSTRAINT_TYPE = 'UNIQUE' - AND CONSTRAINT_NAME = 'uk_hzb_plugin_param_metadata_field') THEN - ALTER TABLE hzb_plugin_param - ADD CONSTRAINT uk_hzb_plugin_param_metadata_field - UNIQUE (plugin_metadata_id, field); - END IF; - END IF; -END // -DELIMITER ; - -CALL UpdatePluginParamTableIndexes(); -DROP PROCEDURE IF EXISTS UpdatePluginParamTableIndexes; - -COMMIT; diff --git a/hertzbeat-startup/src/main/resources/db/migration/postgresql/V180__update_column.sql b/hertzbeat-startup/src/main/resources/db/migration/postgresql/V180__update_column.sql index 09cecdb64c1..99d1bde4480 100644 --- a/hertzbeat-startup/src/main/resources/db/migration/postgresql/V180__update_column.sql +++ b/hertzbeat-startup/src/main/resources/db/migration/postgresql/V180__update_column.sql @@ -62,14 +62,240 @@ BEGIN UPDATE hzb_history SET instance = NULL; ALTER TABLE hzb_history ALTER COLUMN instance TYPE VARCHAR(255); END IF; - + UPDATE hzb_history h SET instance = m.instance FROM hzb_monitor m WHERE h.monitor_id = m.id; - + ALTER TABLE hzb_history DROP COLUMN monitor_id; END IF; END $$; -commit; +-- ======================================== +-- hzb_alert_define_monitor_bind table +-- ======================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_alert_define_monitor_bind') THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_alert_define_monitor_bind' AND indexname = 'index_alert_define_monitor') THEN + DROP INDEX IF EXISTS index_alert_define_monitor; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_alert_define_monitor_bind' AND indexname = 'idx_alert_define_id') THEN + CREATE INDEX idx_alert_define_id ON hzb_alert_define_monitor_bind(alert_define_id); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_alert_define_monitor_bind' AND indexname = 'idx_monitor_id') THEN + CREATE INDEX idx_monitor_id ON hzb_alert_define_monitor_bind(monitor_id); + END IF; + END IF; +END $$; + +-- ======================================== +-- hzb_collector_monitor_bind table +-- ======================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_collector_monitor_bind') THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_collector_monitor_bind' AND indexname = 'index_collector_monitor') THEN + DROP INDEX IF EXISTS index_collector_monitor; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_collector_monitor_bind' AND indexname = 'idx_collector_monitor_collector') THEN + CREATE INDEX idx_collector_monitor_collector ON hzb_collector_monitor_bind(collector); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_collector_monitor_bind' AND indexname = 'idx_collector_monitor_monitor_id') THEN + CREATE INDEX idx_collector_monitor_monitor_id ON hzb_collector_monitor_bind(monitor_id); + END IF; + END IF; +END $$; + +-- ======================================== +-- hzb_monitor table +-- ======================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_monitor') THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor' AND indexname = 'monitor_query_index') THEN + DROP INDEX IF EXISTS monitor_query_index; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor' AND indexname = 'idx_hzb_monitor_app') THEN + CREATE INDEX idx_hzb_monitor_app ON hzb_monitor(app); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor' AND indexname = 'idx_hzb_monitor_instance') THEN + CREATE INDEX idx_hzb_monitor_instance ON hzb_monitor(instance); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor' AND indexname = 'idx_hzb_monitor_name') THEN + CREATE INDEX idx_hzb_monitor_name ON hzb_monitor(name); + END IF; + END IF; +END $$; + +-- ======================================== +-- hzb_monitor_bind table +-- ======================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_monitor_bind') THEN + -- Create new index if not exist + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor_bind' AND indexname = 'index_monitor_bind') THEN + CREATE INDEX index_monitor_bind ON hzb_monitor_bind(biz_id); + END IF; + END IF; +END $$; + +-- ======================================== +-- hzb_status_page_incident_component_bind table +-- Special handling: component_id might have auto-created index from FK +-- ======================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_status_page_incident_component_bind') THEN + -- Check if component_id column already has any index, create if not + IF NOT EXISTS ( + SELECT 1 FROM pg_indexes + WHERE tablename = 'hzb_status_page_incident_component_bind' + AND indexdef LIKE '%component_id%' + AND indexname NOT LIKE '%_pkey' + ) THEN + CREATE INDEX idx_incident_component_component_id ON hzb_status_page_incident_component_bind(component_id); + END IF; + END IF; +END $$; + +-- ======================================== +-- hzb_push_metrics table +-- ======================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_push_metrics') THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_push_metrics' AND indexname = 'push_query_index') THEN + DROP INDEX IF EXISTS push_query_index; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_push_metrics' AND indexname = 'idx_push_metrics_monitor_id') THEN + CREATE INDEX idx_push_metrics_monitor_id ON hzb_push_metrics(monitor_id); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_push_metrics' AND indexname = 'idx_push_metrics_time') THEN + CREATE INDEX idx_push_metrics_time ON hzb_push_metrics(time); + END IF; + END IF; +END $$; + +-- ======================================== +-- hzb_history table +-- ======================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_history') THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'history_query_index') THEN + DROP INDEX IF EXISTS history_query_index; + END IF; + + -- Create new indexes if not exist + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'idx_hzb_history_instance') THEN + CREATE INDEX idx_hzb_history_instance ON hzb_history(instance); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'idx_hzb_history_app') THEN + CREATE INDEX idx_hzb_history_app ON hzb_history(app); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'idx_hzb_history_metrics') THEN + CREATE INDEX idx_hzb_history_metrics ON hzb_history(metrics); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'idx_hzb_history_metric') THEN + CREATE INDEX idx_hzb_history_metric ON hzb_history(metric); + END IF; + END IF; +END $$; + +-- ======================================== +-- hzb_param table +-- ======================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_param') THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_param' AND indexname = 'idx_hzb_param_monitor_id') THEN + DROP INDEX IF EXISTS idx_hzb_param_monitor_id; + END IF; + + -- Create new index if not exist + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_param' AND indexname = 'idx_hzb_param_monitor_id') THEN + CREATE INDEX idx_hzb_param_monitor_id ON hzb_param(monitor_id); + END IF; + + -- Drop old unique constraint if exists + IF EXISTS (SELECT 1 FROM information_schema.table_constraints + WHERE table_name = 'hzb_param' + AND constraint_type = 'UNIQUE' + AND constraint_name = 'uk_hzb_param_monitor_field') THEN + ALTER TABLE hzb_param DROP CONSTRAINT IF EXISTS uk_hzb_param_monitor_field; + END IF; + + -- Create new unique constraint if not exist + IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints + WHERE table_name = 'hzb_param' + AND constraint_type = 'UNIQUE' + AND constraint_name = 'uk_hzb_param_monitor_field') THEN + ALTER TABLE hzb_param + ADD CONSTRAINT uk_hzb_param_monitor_field + UNIQUE (monitor_id, field); + END IF; + END IF; +END $$; + +-- ======================================== +-- hzb_plugin_param table +-- ======================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_plugin_param') THEN + -- Drop old index if exists + IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_plugin_param' AND indexname = 'idx_hzb_plugin_param_plugin_metadata_id') THEN + DROP INDEX IF EXISTS idx_hzb_plugin_param_plugin_metadata_id; + END IF; + + -- Create new index if not exist + IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_plugin_param' AND indexname = 'idx_hzb_plugin_param_plugin_metadata_id') THEN + CREATE INDEX idx_hzb_plugin_param_plugin_metadata_id ON hzb_plugin_param(plugin_metadata_id); + END IF; + + -- Drop old unique constraint if exists + IF EXISTS (SELECT 1 FROM information_schema.table_constraints + WHERE table_name = 'hzb_plugin_param' + AND constraint_type = 'UNIQUE' + AND constraint_name = 'uk_hzb_plugin_param_metadata_field') THEN + ALTER TABLE hzb_plugin_param DROP CONSTRAINT IF EXISTS uk_hzb_plugin_param_metadata_field; + END IF; + + -- Create new unique constraint if not exist + IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints + WHERE table_name = 'hzb_plugin_param' + AND constraint_type = 'UNIQUE' + AND constraint_name = 'uk_hzb_plugin_param_metadata_field') THEN + ALTER TABLE hzb_plugin_param + ADD CONSTRAINT uk_hzb_plugin_param_metadata_field + UNIQUE (plugin_metadata_id, field); + END IF; + END IF; +END $$; + +COMMIT; diff --git a/hertzbeat-startup/src/main/resources/db/migration/postgresql/V181__update_indexes.sql b/hertzbeat-startup/src/main/resources/db/migration/postgresql/V181__update_indexes.sql deleted file mode 100644 index da88582de3a..00000000000 --- a/hertzbeat-startup/src/main/resources/db/migration/postgresql/V181__update_indexes.sql +++ /dev/null @@ -1,247 +0,0 @@ --- Licensed to the Apache Software Foundation (ASF) under one --- or more contributor license agreements. See the NOTICE file --- distributed with this work for additional information --- regarding copyright ownership. The ASF licenses this file --- to you under the Apache License, Version 2.0 (the --- "License"); you may not use this file except in compliance --- with the License. You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, --- software distributed under the License is distributed on an --- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express --- or implied. See the License for the specific language --- governing permissions and limitations --- under the License. - --- Ensure every SQL can rerun without error --- This migration updates indexes to match the entity annotations - --- ======================================== --- hzb_alert_define_monitor_bind table --- ======================================== -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_alert_define_monitor_bind') THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_alert_define_monitor_bind' AND indexname = 'index_alert_define_monitor') THEN - DROP INDEX IF EXISTS index_alert_define_monitor; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_alert_define_monitor_bind' AND indexname = 'idx_alert_define_id') THEN - CREATE INDEX idx_alert_define_id ON hzb_alert_define_monitor_bind(alert_define_id); - END IF; - - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_alert_define_monitor_bind' AND indexname = 'idx_monitor_id') THEN - CREATE INDEX idx_monitor_id ON hzb_alert_define_monitor_bind(monitor_id); - END IF; - END IF; -END $$; - --- ======================================== --- hzb_collector_monitor_bind table --- ======================================== -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_collector_monitor_bind') THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_collector_monitor_bind' AND indexname = 'index_collector_monitor') THEN - DROP INDEX IF EXISTS index_collector_monitor; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_collector_monitor_bind' AND indexname = 'idx_collector_monitor_collector') THEN - CREATE INDEX idx_collector_monitor_collector ON hzb_collector_monitor_bind(collector); - END IF; - - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_collector_monitor_bind' AND indexname = 'idx_collector_monitor_monitor_id') THEN - CREATE INDEX idx_collector_monitor_monitor_id ON hzb_collector_monitor_bind(monitor_id); - END IF; - END IF; -END $$; - --- ======================================== --- hzb_monitor table --- ======================================== -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_monitor') THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor' AND indexname = 'monitor_query_index') THEN - DROP INDEX IF EXISTS monitor_query_index; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor' AND indexname = 'idx_hzb_monitor_app') THEN - CREATE INDEX idx_hzb_monitor_app ON hzb_monitor(app); - END IF; - - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor' AND indexname = 'idx_hzb_monitor_instance') THEN - CREATE INDEX idx_hzb_monitor_instance ON hzb_monitor(instance); - END IF; - - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor' AND indexname = 'idx_hzb_monitor_name') THEN - CREATE INDEX idx_hzb_monitor_name ON hzb_monitor(name); - END IF; - END IF; -END $$; - --- ======================================== --- hzb_monitor_bind table --- ======================================== -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_monitor_bind') THEN - -- Create new index if not exist - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_monitor_bind' AND indexname = 'index_monitor_bind') THEN - CREATE INDEX index_monitor_bind ON hzb_monitor_bind(biz_id); - END IF; - END IF; -END $$; - --- ======================================== --- hzb_status_page_incident_component_bind table --- Special handling: component_id might have auto-created index from FK --- ======================================== -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_status_page_incident_component_bind') THEN - -- Check if component_id column already has any index, create if not - IF NOT EXISTS ( - SELECT 1 FROM pg_indexes - WHERE tablename = 'hzb_status_page_incident_component_bind' - AND indexdef LIKE '%component_id%' - AND indexname NOT LIKE '%_pkey' - ) THEN - CREATE INDEX idx_incident_component_component_id ON hzb_status_page_incident_component_bind(component_id); - END IF; - END IF; -END $$; - --- ======================================== --- hzb_push_metrics table --- ======================================== -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_push_metrics') THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_push_metrics' AND indexname = 'push_query_index') THEN - DROP INDEX IF EXISTS push_query_index; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_push_metrics' AND indexname = 'idx_push_metrics_monitor_id') THEN - CREATE INDEX idx_push_metrics_monitor_id ON hzb_push_metrics(monitor_id); - END IF; - - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_push_metrics' AND indexname = 'idx_push_metrics_time') THEN - CREATE INDEX idx_push_metrics_time ON hzb_push_metrics(time); - END IF; - END IF; -END $$; - --- ======================================== --- hzb_history table --- ======================================== -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_history') THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'history_query_index') THEN - DROP INDEX IF EXISTS history_query_index; - END IF; - - -- Create new indexes if not exist - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'idx_hzb_history_instance') THEN - CREATE INDEX idx_hzb_history_instance ON hzb_history(instance); - END IF; - - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'idx_hzb_history_app') THEN - CREATE INDEX idx_hzb_history_app ON hzb_history(app); - END IF; - - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'idx_hzb_history_metrics') THEN - CREATE INDEX idx_hzb_history_metrics ON hzb_history(metrics); - END IF; - - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_history' AND indexname = 'idx_hzb_history_metric') THEN - CREATE INDEX idx_hzb_history_metric ON hzb_history(metric); - END IF; - END IF; -END $$; - --- ======================================== --- hzb_param table --- ======================================== -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_param') THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_param' AND indexname = 'idx_hzb_param_monitor_id') THEN - DROP INDEX IF EXISTS idx_hzb_param_monitor_id; - END IF; - - -- Create new index if not exist - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_param' AND indexname = 'idx_hzb_param_monitor_id') THEN - CREATE INDEX idx_hzb_param_monitor_id ON hzb_param(monitor_id); - END IF; - - -- Drop old unique constraint if exists - IF EXISTS (SELECT 1 FROM information_schema.table_constraints - WHERE table_name = 'hzb_param' - AND constraint_type = 'UNIQUE' - AND constraint_name = 'uk_hzb_param_monitor_field') THEN - ALTER TABLE hzb_param DROP CONSTRAINT IF EXISTS uk_hzb_param_monitor_field; - END IF; - - -- Create new unique constraint if not exist - IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints - WHERE table_name = 'hzb_param' - AND constraint_type = 'UNIQUE' - AND constraint_name = 'uk_hzb_param_monitor_field') THEN - ALTER TABLE hzb_param - ADD CONSTRAINT uk_hzb_param_monitor_field - UNIQUE (monitor_id, field); - END IF; - END IF; -END $$; - --- ======================================== --- hzb_plugin_param table --- ======================================== -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'hzb_plugin_param') THEN - -- Drop old index if exists - IF EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_plugin_param' AND indexname = 'idx_hzb_plugin_param_plugin_metadata_id') THEN - DROP INDEX IF EXISTS idx_hzb_plugin_param_plugin_metadata_id; - END IF; - - -- Create new index if not exist - IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'hzb_plugin_param' AND indexname = 'idx_hzb_plugin_param_plugin_metadata_id') THEN - CREATE INDEX idx_hzb_plugin_param_plugin_metadata_id ON hzb_plugin_param(plugin_metadata_id); - END IF; - - -- Drop old unique constraint if exists - IF EXISTS (SELECT 1 FROM information_schema.table_constraints - WHERE table_name = 'hzb_plugin_param' - AND constraint_type = 'UNIQUE' - AND constraint_name = 'uk_hzb_plugin_param_metadata_field') THEN - ALTER TABLE hzb_plugin_param DROP CONSTRAINT IF EXISTS uk_hzb_plugin_param_metadata_field; - END IF; - - -- Create new unique constraint if not exist - IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints - WHERE table_name = 'hzb_plugin_param' - AND constraint_type = 'UNIQUE' - AND constraint_name = 'uk_hzb_plugin_param_metadata_field') THEN - ALTER TABLE hzb_plugin_param - ADD CONSTRAINT uk_hzb_plugin_param_metadata_field - UNIQUE (plugin_metadata_id, field); - END IF; - END IF; -END $$; - -COMMIT;