执行SELECT查询致MySQL服务器崩溃问题排查求助
问题背景
在.NET MVC Web应用中,执行以下SELECT查询时,偶尔会导致MySQL服务器直接宕机:
SELECT ID, Headline, Intro_Plaintext, CategoryList, PublishedDate, MATCH( Headline, Standfirst_Plaintext, Intro_Plaintext, Storytext_PlainText, CategoryList) AGAINST('kyeword 2022' IN NATURAL LANGUAGE MODE) Score, Brand_ID, Type_Name FROM index_articles WHERE MATCH(Headline, Standfirst_Plaintext, Intro_Plaintext, Storytext_PlainText, CategoryList) AGAINST('kyeword 2022' IN NATURAL LANGUAGE MODE) AND NOT ISNULL(Brand_ID)
涉及的index_articles表约有100万条记录且持续增长,建表语句如下:
CREATE TABLE `index_articles` ( `index_articles_id` int NOT NULL AUTO_INCREMENT, `Brand_ID` int DEFAULT '0', `ID` int DEFAULT '0', `Headline` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `Standfirst_Plaintext` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `Intro_Plaintext` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `Storytext_PlainText` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `CategoryList` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `Type_Name` varchar(250) NOT NULL DEFAULT '', `PublishedDate` datetime NOT NULL, `UNIXPubDate` int NOT NULL DEFAULT '0', PRIMARY KEY (`index_articles_id`) USING BTREE, UNIQUE KEY `UNIQUE` (`index_articles_id`) USING BTREE, UNIQUE KEY `DUPLICATE` (`Brand_ID`,`ID`) USING BTREE, KEY `PublishedDateDESC` (`UNIXPubDate` DESC) USING BTREE, FULLTEXT KEY `FullTextSearch` (`Headline`,`Standfirst_Plaintext`,`Intro_Plaintext`,`Storytext_PlainText`,`CategoryList`) ) ENGINE=InnoDB AUTO_INCREMENT=237353 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
MySQL服务器错误日志核心信息:
[InnoDB] Assertion failure: fts0que.cc:3270:ret == 0 thread 9740
InnoDB: We intentionally generate a memory trap.
...
Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.
...
Query (1c5a391f238): [上述SELECT语句]
问题疑问
该问题由何原因导致?是否为MySQL服务器配置问题?为何仅偶尔发生?
原因分析与结论
核心原因:InnoDB全文搜索模块Bug
错误日志明确指向InnoDB全文搜索(FTS)组件的fts0que.cc文件第3270行断言失败,这属于MySQL代码层面的内部错误,而非常规配置问题。这类偶发宕机往往是特定查询场景、数据特征或并发操作的组合触发了隐藏Bug。排除配置问题的依据
- 查询使用了正确的全文索引,表结构与索引定义无明显逻辑错误;
- 配置问题通常会导致持续性能异常或可复现的错误,而非偶发的服务器崩溃;
- 官方日志提示已明确此类断言失败大概率是Bug,而非配置问题。
偶发触发的可能诱因
- 特定关键词组合(比如包含数字、特殊格式的词汇);
- 表持续增长时,写入操作与全文搜索查询并发执行,触发了Bug;
- 数据中存在特殊格式的文本内容,导致全文搜索解析时出现异常。
解决方案建议
- 升级MySQL版本:这类InnoDB FTS的特定Bug通常会在后续版本中修复,建议升级到当前大版本的最新稳定版;
- 临时规避:暂时无法升级时,可调整查询逻辑,比如先用子查询获取全文搜索结果,再过滤
NOT ISNULL(Brand_ID),避免优化器生成触发Bug的执行计划; - 硬件排查:低概率情况下,服务器内存、磁盘硬件故障也可能引发此类异常,可排查内存错误、磁盘坏道等问题;
- 提交Bug报告:若升级后问题仍存在,可整理复现步骤、表结构、样本数据提交给官方,帮助定位修复。
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

