MariaDB 10.1,选择查询使表tmp表已满(ERROR 1114)

时间:2017-06-22 22:50:44

标签: mysql centos mariadb centos7

我最近移动了一个脚本,开始从不同服务器/数据库上的相同数据运行查询。两台服务器都加载了相同的数据,但其中一台正在退出当天数据的实时加载。以前的服务器运行的是mysql 5.1.73,这个新服务器正在运行MariaDB 10.1。该脚本试图运行以下查询,只更改日期(我已经混淆了一些列和数据过滤器,但在查询中保持col_X一致)。

SELECT 
count(*) as num,
sec_to_time(floor(timestamp/1000000)) as true_time,
col_A,col_B,col_C,col_D,col_E,col_F,col_G,id,
sum(if(col_H = 3, 1, 0)) as num_A,
sum(if(col_H = 4,1,0)) as num_B 
FROM 
`some_table`  WHERE 
`some_table`.`date` = 20170622 AND 
(col_I not in ('VAL_A','VAL_B','VAL_C')) 
GROUP BY col_A, col_D, coL_E, col_F, col_B, col_C,
sec_to_time(floor(timestamp/1000000)) 
HAVING count(*) >= if(col_G='A',50,if(col_G='B',50,150)) 
ORDER BY sec_to_time(floor(timestamp/1000000));

在新服务器上,查询运行一段时间后我收到此消息: ERROR 1114(HY000):表'/ home / mysql / tmp / #sql_61c5_0'已满

在查询运行时,在该目录中,我看到2个文件在发生此消息之前大小增加到大约1.2GB。我经历了很多变数,发现从旧服务器到新服务器没有任何不同。第一个似乎提到的是tmp_table_size和max_heap_table_size,它们在旧服务器和新服务器上都默认为16MB,但我还是尝试过。

磁盘未满,但它们是较小的分区:

Filesystem      Size  Used Avail Use% Mounted on
/dev/md125      400G  247G  154G  62% /home
/dev/nvme0n1p1  373G  214G  160G  58% /mnt/nvme

(注意/ home / mysql是/ mnt / nvme / mysql的符号链接,其中包含mysql表和& tmp目录)。

这些是/etc/my.cnf中设置的唯一mysql变量:

[mysqld]
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size          = 32M
innodb_buffer_pool_size         = 25G
innodb_log_file_size            = 768M
max_allowed_packet              = 104857600
innodb_file_per_table           = 1
max_heap_table_size = 134217728
tmp_table_size = 134217728

对于记录,新服务器正在运行CentOS 7,但我找不到任何可能导致此问题的操作系统限制。任何关于为什么会发生这种情况的提示都将不胜感激。

0 个答案:

没有答案