由于innodb_buffer_pool_size小,MySQL返回错误结果而没有任何警告

问题描述

我的桌子是这样的:

CREATE TABLE `offers`
(
    `id`          int(10) unsigned NOT NULL AUTO_INCREMENT,`description` text,PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4

并运行如下查询

SELECT count(*) AS count,description
FROM offers
GROUP BY description
HAVING count >= 2
ORDER BY count ASC;

返回结果,其中某些行的计数等于1。

我发现,当我将innodb_buffer_pool_size128M增加256M时,就可以解决此问题。

我可以理解我的查询占用的内存太多,无法用较小的内存限制来完成。 但是,MysqL如何静静地返回错误结果而没有任何警告/错误? 我检查了错误log_error文件,但未发现有关查询执行错误的任何警告/错误

编辑:如何复制

经过以下测试:Ubuntu 18.04 64位和MysqL 5.7.31

  1. 创建数据库
CREATE DATABASE bug CHaraCTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  1. 下载数据库转储:https://f001.backblazeb2.com/b2api/v1/b2_download_file_by_id?fileId=4_z3eec3c1800331e85734f0b1b_f100d6e61629f98fe_d20200822_m211237_c001_v0001144_t0019

  2. 解压缩并将转储导入创建的数据库

  3. 运行查询

SELECT count(*) AS count
FROM test
GROUP BY description
HAVING count >= 2
ORDER BY count ASC;
  1. 查看一些计数等于1的行。在我来说,这些行不是从开头开始,而是从第23行开始。

解决方法

MySQL团队已确认这是一个错误,需要修复。

更多信息:https://bugs.mysql.com/bug.php?id=100610