上一篇
凌晨2点15分,你的手机突然响起刺耳的警报声 😱,半梦半醒间抓过手机一看——生产数据库报错了!日志里赫然写着:
MY-011124 ER_MECAB_OOM_WHILE_PARSING_TEXT (SQLSTATE HY000):
Out of memory while parsing text with MeCab parser
作为团队里最懂MySQL的"消防员",这个不寻常的报错让你瞬间清醒,别慌!跟着这篇指南,我们一起解决这个"内存吞噬者"问题 💪。
首先得搞清楚这个"MeCab"是何方神圣。
-- 立即终止占用MeCab的会话 SELECT id, user, host, db, command, time, state, info FROM information_schema.processlist WHERE info LIKE '%MATCH%AGAINST%' OR state LIKE '%MeCab%'; -- 确认后逐个KILL(替换为实际ID) KILL 42;
SHOW VARIABLES LIKE 'innodb_ft%mecab%'; -- 重点关注: -- innodb_ft_server_stopword_table -- innodb_ft_user_stopword_table
# 如果服务器还有余粮(SSH执行) mysql -e "SET GLOBAL innodb_buffer_pool_size=XXGB;" # 建议不超过物理内存的70%
-- 对于特别长的文本列,考虑拆分或缩短索引长度 ALTER TABLE articles MODIFY COLUMN content TEXT(5000), ADD FULLTEXT INDEX ft_idx (content) WITH PARSER mecab; -- 或者改用普通索引 DROP INDEX ft_idx ON articles; CREATE INDEX regular_idx ON articles(content(255));
在my.cnf中添加:
[mysqld] # 限制单个MeCab解析任务的内存使用(单位KB) innodb_ft_mecab_token_size=2048 # 减少并发解析线程数 innodb_ft_mecab_max_threads=2
Threads_running
和内存使用MATCH...AGAINST
的高风险SQLOPTIMIZE TABLE
重构全文索引这次事故教会我们三个道理:
下次再遇到MY-011124,你就能优雅地喝着咖啡☕解决了!好的DBA不是从不犯错,而是永远有Plan B~
本文由 俟宛亦 于2025-07-31发表在【云服务器提供商】,文中图片由(俟宛亦)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/490872.html
发表评论