首页 > 解决方案 > 由于小的 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_size128M256M它解决了这个问题。

我可以理解,我的查询太消耗内存,无法使用较小的内存限制来完成。但是,MySQL 怎么可能默默地返回错误结果而没有任何警告/错误?我检查了错误log_error文件,没有发现任何关于错误执行查询的警告/错误。

编辑:如何重现

测试:Ubuntu 18.04 64bit & 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. 查看 count 等于 1 的一些行。在我的情况下,这些行不是从开头开始,而是从第 23 行开始。

标签: mysqldatabase-performancequery-performance

解决方案


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

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


推荐阅读