You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot集成Liquibase创建视图索引时出现挂起问题

问题场景

在SQL Server中为视图创建索引时,SpringBoot集成Liquibase出现以下异常行为:

  • 开发环境中person表仅数千条记录,视图索引创建可正常完成;
  • 测试/集成环境中person表数据量达90万条时,创建索引耗时超20分钟,导致SpringBoot应用所在的OpenShift Pod被就绪探针终止。

直接在SQL Server Management Studio(SSMS)中执行相同的索引创建语句,仅需2-3分钟即可完成,且已确认不存在锁阻塞情况。

相关代码与配置

创建视图的SQL(0017-person-warn-view.sql)

-- "JSON_QUERY" to get relevant part of JSON
CREATE OR ALTER VIEW [dbo].[person_warnings] WITH SCHEMABINDING
AS
(
SELECT id,
       no,
       cast(JSON_QUERY([json], '$.person.warnings') AS VARCHAR(850)) AS warnings
    FROM [dbo].[person]
    WHERE JSON_QUERY([json], '$.person.warnings') IS NOT NULL
);

创建索引的SQL(0018-add-warn-indexes.sql)

-- Create the uniq clustered index
CREATE UNIQUE CLUSTERED INDEX IDX_ID ON [dbo].[person_warnings] (id);

Liquibase主配置文件(db.changelog-master.xml)

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">

    <include id="0017-person-warn-view.sql" file="classpath:/db/changelog/changes/0017-person-warn-view.sql" relativeToChangelogFile="false" author="xxx" created="19.05.2025"/>

    <include id="0018-add-warn-indexes.sql" file="classpath:/db/changelog/changes/0018-add-warn-indexes.sql" relativeToChangelogFile="false" author="xxx" created="19.05.2025"/>

</databaseChangeLog>

SpringBoot日志配置

已开启Liquibase DEBUG级别日志:

logging.level.liquibase: DEBUG

最后一条Liquibase日志

2025-05-27 15:31:46 [main] DEBUG liquibase.executor - CREATE UNIQUE CLUSTERED INDEX IDX_ID ON [dbo].[person_warnings] (id);

内容的提问来源于stack exchange,提问作者Dani Schweizer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:11:03