问题描述
我最近才从 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 (将#修改为@)