最近查询MySQL的一个报表程序,在执行大的查询分组操作的时候报错。
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1114, "The table '/data/mysql/5306/tmp/#sql70da_911_3' is full")
[SQL: select .. group by ..) a
;]
数据库版本:
dba_ch [(none)]> select version();
+-----------+
| version() |
+-----------+
| 8.0.25-15 |
+-----------+
1 row in set (0.00 sec)
解决方法:
- 调整 internal_tmp_mem_storage_engine
set global internal_tmp_mem_storage_engine = MEMORY;
链接:forums.percona.com/t/mysql-8-0…
- 并增大tmp_table_size、max_heap_table_size参数的值到640M。
root [(none)]> set global tmp_table_size=134217728*5;
Query OK, 0 rows affected (0.00 sec)
root [(none)]> set global max_heap_table_size=134217728*5;
Query OK, 0 rows affected (0.00 sec)
# 查询
SHOW VARIABLES LIKE 'tmp_table_size';
SHOW VARIABLES LIKE 'max_heap_table_size';