微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL 8 order by created_at out of sort memory error 1038

如何解决MySQL 8 order by created_at out of sort memory error 1038

我最近才从 MysqL 5.7 升级MysqL 8.0.3。更新过程似乎进展顺利。 MysqLd.log 中没有发现重大问题。我能够很好地连接到我的数据库

但是当我尝试执行这样的简单查询时:

SELECT * FROM mytable ORDER BY `created_at` DESC LIMIT 1000;

我收到以下错误

sql Error (1038): Out of sort memory,consider increasing server sort buffer size

我已签入 my.ini 并且我有 sort_buffer_size=1M,与我在 MysqL 5.7 中的情况相同。

created_at 列是一个可以为空的 timestamp,没有索引。表很小,

可能有什么问题?

查询EXPLAIN

id 选择类型 分区 类型 possible_keys key_len 参考 过滤 额外
1 简单 我的表 \N 全部 \N \N \N \N 31 100.00 使用文件排序

我注意到行数远低于表中的实际行数。我尝试了 OPTIMIZE TABLE,现在 EXPLAIN 显示了 43 行,仍然是实际数字的一半左右。

我在升级 MysqL 之前对数据库进行了转储,因此我尝试从转储中删除和恢复该表,以防它以某种方式损坏。没有变化。

在这种情况下我还应该做什么?

这是我的CREATE TABLE

CREATE TABLE `mytable` (
    `id` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_ci',`relation_id` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',`request_data` JSON NOT NULL,`response_data` JSON NULL DEFAULT NULL,`filename` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',`remote_key` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',`created_at` TIMESTAMP NULL DEFAULT NULL,`updated_at` TIMESTAMP NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `relation_id` (`relation_id`) USING BTREE
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
;

正如我在评论中提到的,我不认为这是向 created_at 添加索引的问题,因为我有包含数十万行的表,如果没有该索引就可以很好地排序。

这可能与 2 个 JSON 列有关吗?我保存的一些回复包含大量数据。

更多信息:

最大的 JSON 字段大小为 430 kb。

SHOW TABLE STATUS LIKE 'mytable'

姓名 引擎 版本 行格式 Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment 创建时间 更新时间 Check_time 整理 校验和 创建选项 评论
我的表 InnoDB 10 动态 44 131444 5783552 0 0 4194304 \N 2021-04-24 15:21:00 2021-04-24 14:33:36 \N utf8mb4_unicode_ci \N

EXPLAIN FORMAT=JSON SELECT * FROM mytable ORDER BY created_at DESC LIMIT 1000;

{
  "query_block": {
    "select_id": 1,"cost_info": {
      "query_cost": "360.21"
    },"ordering_operation": {
      "using_filesort": true,"cost_info": {
        "sort_cost": "43.00"
      },"table": {
        "table_name": "mytable","access_type": "ALL","rows_examined_per_scan": 43,"rows_produced_per_join": 43,"filtered": "100.00","cost_info": {
          "read_cost": "312.91","eval_cost": "4.30","prefix_cost": "317.21","data_read_per_join": "173K"
        },"used_columns": [
          "id","relation_id","request_data","response_data","filename","remote_key","created_at","updated_at"
        ]
      }
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。