首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 8.0.23 tmp表不断填充

MySQL 8.0.23 tmp表不断填充
EN

Stack Overflow用户
提问于 2021-02-14 00:46:04
回答 1查看 1.2K关注 0票数 4

我在MySQL的旧版本中没有遇到这个问题,其中包括我在AWS中运行的最多8.0.21版本。我有一个每年只运行一次的查询。以下是相关代码:

代码语言:javascript
复制
create table medicare_fee_history (
        year int unsigned,
        mac int unsigned,
        locality int unsigned,
        hcpcs varchar(10),
        modifier varchar(10),
        index (mac, locality, hcpcs, modifier),
        non_facility decimal(17, 4),
        facility decimal(17, 4)
) engine = myisam;

load data local infile 'PFALL.csv'
into table medicare_fee_history
fields terminated by ',' enclosed by '"'
(year, mac, locality, hcpcs, modifier, non_facility, facility);

create table medicare_fee_first (
        year int unsigned,
        hcpcs varchar(10),
        modifier varchar(10),
        index (hcpcs, modifier),
        facility decimal(17, 4),
        non_facility decimal(17, 4)
) engine = myisam;

insert into medicare_fee_first (year, hcpcs, modifier, facility, non_facility)
(
        select min(year), hcpcs, modifier, avg(facility), avg(non_facility)
        from medicare_fee_history group by hcpcs, modifier
);

在插入选择期间,我得到以下错误:

错误1114 (HY000):表‘/tmp/# The 4984_9_3’已满

表medicare_fee_history有16042724行。若要复制此数据集,可在https://drive.google.com/file/d/1p7Yf7wsCnBXl7UaxeFC1AP0youl-KCdZ/view?usp=sharing中找到

查询通常返回10823行。如果您消除avg(设施)和avg(non_facility),它似乎是有效的。/tmp有很大的空间。100 G中92%是免费的。我把tmp_table_size设为最大。以下是当前的服务器设置:

代码语言:javascript
复制
mysql> show variables like '%tmp%';
+---------------------------------+----------------------+
| Variable_name                   | Value                |
+---------------------------------+----------------------+
| default_tmp_storage_engine      | InnoDB               |
| innodb_tmpdir                   |                      |
| internal_tmp_mem_storage_engine | TempTable            |
| slave_load_tmpdir               | /tmp                 |
| tmp_table_size                  | 18446744073709551615 |
| tmpdir                          | /tmp                 |
+---------------------------------+----------------------+
6 rows in set (0.00 sec)

mysql> show variables like '%temp%';
+-----------------------------+-----------------------+
| Variable_name               | Value                 |
+-----------------------------+-----------------------+
| avoid_temporal_upgrade      | OFF                   |
| innodb_temp_data_file_path  | ibtmp1:12M:autoextend |
| innodb_temp_tablespaces_dir | ./#innodb_temp/       |
| show_old_temporals          | OFF                   |
| temptable_max_mmap          | 1073741824            |
| temptable_max_ram           | 1073741824            |
| temptable_use_mmap          | ON                    |
+-----------------------------+-----------------------+
7 rows in set (0.00 sec)

对如何解决这个问题有什么想法吗?

EN

Stack Overflow用户

发布于 2022-11-22 07:56:28

我认为您需要调整的相关设置是temptable_max_mmap

请参阅:https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/ams3-temptable-behavior.html

示例1

您知道,临时表的累积大小为20 GiB。您希望将内存中的临时表设置为2 GiB,并在磁盘上增长到最多20 GiB。

将temptable_max_ram设为2,147,483,648,temptable_max_mmap为21,474,836,480。这些值以字节为单位。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66191416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档