mysql - 由于小的 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_size
时128M
,256M
它解决了这个问题。
我可以理解,我的查询太消耗内存,无法使用较小的内存限制来完成。但是,MySQL 怎么可能默默地返回错误结果而没有任何警告/错误?我检查了错误log_error
文件,没有发现任何关于错误执行查询的警告/错误。
编辑:如何重现
测试:Ubuntu 18.04 64bit & MySQL 5.7.31
- 创建数据库
CREATE DATABASE bug CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
解压缩并将转储导入创建的数据库。
运行查询
SELECT count(*) AS count
FROM test
GROUP BY description
HAVING count >= 2
ORDER BY count ASC;
- 查看 count 等于 1 的一些行。在我的情况下,这些行不是从开头开始,而是从第 23 行开始。
解决方案
MySQL 团队已确认这是一个需要修复的错误。
推荐阅读
- c# - 如何在 NativeScript 应用程序上使用授权码设置 Identity Server 4?
- python-3.x - 根本无法从 Idle - Pycharm 或跨平台导入程序?我怎样才能解决这个问题?
- c# - 如何通过 Injection 或 UnitofWork 将同一个 dbcontext 实例与多个服务一起使用?
- google-maps - 更新自定义标记的位置
- python - 如何使用 requests.get 设置网页的日期范围
- node.js - AWS ElasticBeanstalk 节点部署无法运行 npm 安装。快照日志以获取更多详细信息
- javascript - IE11 中的 JQuery Iframe 权限被拒绝
- angular - 我可以在 Angular 6 中使用组件的属性作为方法的参数吗?
- machine-learning - 使用 NEAT 算法,两个基因组的孩子是否总是与最合适的父母具有相同的结构?
- python - 如何修复“RuntimeError:迭代期间字典更改大小”,同时编辑一些图形数据