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
相关产品推荐
相关产品推荐

