线程中的MySQL断言失败

MySQL Assertion Failure in thread

此查询为什么失败?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT
    SUB_COMMODITY,
    `VOL` AS Sales,
    `VOL_CHANGE` AS Dollar_change,
    `VOL_SHARE` AS Dollar_share,
    `VOL_SHARE_CHANGE` AS Dollar_share_change,
    `U_VOL` AS Unit_sales,
    `UVOL_CHANGE` AS Unit_change,
    `UVOL_SHARE` AS Unit_share,
    `UVOL_SHARE_CHANGE` AS Unit_share_change,
    `VOL_MKT_SHARE` AS Market_share,
    `PERIOD`
FROM `calculatedsummary`
WHERE WEEK = 52
AND PERIOD BETWEEN '2012-03-01' AND '2012-03-31'
AND MKT = '000 Total Market'
AND COMMODITY = 'CONDIMENTS SAUCES'
AND SUB_COMMODITY = 'BBQ SAUCE'
AND BRAND_FAMILY_DESC = 'Total'
AND session_id = 'ADBCDEFGHIJQLMNOPQRSTUVWXYZ'

MySQL服务器日志:

  • InnoDB:文件row0sel.c第2441行中的线程2292断言失败
  • InnoDB:失败断言:buf data_len <= original_buf buf_len
  • InnoDB:我们有意生成一个内存陷阱。
  • InnoDB:将详细的错误报告提交到http://bugs.mysql.com。
  • InnoDB:如果您反复断言失败或崩溃,甚至
  • InnoDB:mysqld启动后,可能立即
  • InnoDB:腐败
  • InnoDB表空间。请参阅
  • InnoDB:http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
  • InnoDB:关于强制恢复。
  • InnoDB:线程1544在文件os0sync.c第474行中停止
  • InnoDB:线程2028在文件os0sync.c行781中停止

并且还会收到#2013错误-查询期间失去与MySQL服务器的连接

但是如果我改变

session_id = 'ADBCDEFGHIJQLMNOPQRSTUVWXYZ'

TO

session_id LIKE '%ADBCDEFGHIJQLMNOPQRSTUVWXYZ%'


我解决了问题,

显然,我正在使用的表将50多个字段设置为VARCHAR 255,并且太大了,因此通过将字段大小减小为准确的大小即可解决问题。