美文网首页
MYSQL大表联查缓冲区溢出问题思路

MYSQL大表联查缓冲区溢出问题思路

作者: Xooper | 来源:发表于2021-04-20 10:37 被阅读0次

MYSQL大数据表联查(20W*20W)时报错, 小表查询正常,检查MYSQL服务器error.log:

210420 10:24:12 [ERROR] /usr/sbin/mysqld: Sort aborted: Error writing file '/tmp/MYxJWWvV' (Errcode: 28)

#查看详细MYSQL错误日志:
vi /var/log/mysql/error.log

210420 10:22:20 [ERROR] /usr/sbin/mysqld: Sort aborted: Error writing file '/tmp/MY0buVRE' (Errcode: 28)
210420 10:22:22 [ERROR] /usr/sbin/mysqld: Incorrect key file for table '/tmp/#sql_1ecb_0.MYI'; try to repair it
210420 10:22:22 [ERROR] Got an error from unknown thread, /build/mysql-5.5-xFqLis/mysql-5.5-5.5.60/storage/myisam/mi_write.c:226
210420 10:22:23 [ERROR] /usr/sbin/mysqld: Sort aborted: Error writing file '/tmp/MY21PWvi' (Errcode: 28)
210420 10:24:12 [ERROR] /usr/sbin/mysqld: Sort aborted: Error writing file '/tmp/MYxJWWvV' (Errcode: 28)

查询MYSQL-ERRCODE:28 可知磁盘空间不足,检查服务器可知磁盘正常:
@see perror命令

#检查ERROR:28错误原因:(No space left on device 磁盘空间不足)
root@DemoA:~# perror 28
OS error code  28:  No space left on device
root@DemoA:~# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/DemoA--vg-root   15G   13G  839M  94% /
none                        4.0K     0  4.0K   0% /sys/fs/cgroup
udev                        3.9G  4.0K  3.9G   1% /dev
tmpfs                       799M  532K  798M   1% /run
none                        5.0M     0  5.0M   0% /run/lock
none                        3.9G     0  3.9G   0% /run/shm
none                        100M     0  100M   0% /run/user
/dev/sda1                   236M  220M  4.0M  99% /boot
overflow                    1.0M  4.0K 1020K   1% /tmp
/dev/sdc                    9.8G   48M  9.2G   1% /mnt

经查BAIDU+BING+GOOGLE,发现可能为缓存目录不够导致TMPDIR="/tmp",只有1M,大表查询可能会出现磁盘不足错误,深入检查并实验后解决此问题:

# 增加磁盘挂载+100M到TMPDIR: 因为业务特殊原因不能修改/tmp目录位置
mount -o remount,size=100M tmpfs /tmp

# 检查挂载是否成功:/tmp -> 100M  [OK]
root@DemoA:~# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/DemoA--vg-root   15G   13G  839M  94% /
none                        4.0K     0  4.0K   0% /sys/fs/cgroup
udev                        3.9G  4.0K  3.9G   1% /dev
tmpfs                       799M  532K  798M   1% /run
none                        5.0M     0  5.0M   0% /run/lock
none                        3.9G     0  3.9G   0% /run/shm
none                        100M     0  100M   0% /run/user
/dev/sda1                   236M  220M  4.0M  99% /boot
overflow                    100M  4.0K  100M   1% /tmp
/dev/sdc                    9.8G   48M  9.2G   1% /mnt

重启MYSQL服务器进行验证

service mysql restart

查询成功!问题解决!

参考文档:
https://stackoverflow.com/questions/2090073/mysql-incorrect-key-file-for-tmp-table-when-making-multiple-joins/3716778#3716778

相关文章

  • MYSQL大表联查缓冲区溢出问题思路

    MYSQL大数据表联查(20W*20W)时报错, 小表查询正常,检查MYSQL服务器error.log: 2104...

  • SQL执行与优化

    SQL优化 执行计划,表关联查询顺序,优化策略与思路 MYSQL执行过程 一、MySQL架构总览: 二、查询执行流...

  • MySQL 优化

    MySQL 优化 表关联查询时务必遵循小表驱动大表原则; 使用查询语句where条件时,不允许出现函数,否则索引会...

  • MySQL 优化点

    MySQL 优化 表关联查询时务必遵循小表驱动大表原则; 使用查询语句where条件时,不允许出现函数,否则索引会...

  • 安全

    代码混淆 缓冲区溢出 缓冲区溢出是现在安全中存在最多的问题,最危险的是堆栈溢出。原理:简单说程序通常会设计固定大小...

  • Mysql 三表联查

    select * from (BO_EU_QA_ACTION t1 left join BO_EU_ACCESS...

  • mysql三表联查

    A表 客户资料表 用到的值id,custid,nameB表 客户设备表 custid,deviceid...

  • 2021-08-29

    数据模型: 插入数据: 查询数据: 两表,连查询研究: 单表查询研究: 结果; 三表联查 结果: 项目思路:"""...

  • 笔记 | 计算机系统基础:09-不得不防的缓冲区溢出攻击!

    零. 课程要点: 缓冲区溢出 缓冲区溢出攻击 缓冲区溢出防范 学完了数据的内存结构,以及函数调用的底层过程,我们就...

  • 软件安全-缓冲区溢出攻防

    Buffer Overflow Vulnerability Lab 实验目的:掌握缓冲区溢出漏洞原理。缓冲区溢出定...

网友评论

      本文标题:MYSQL大表联查缓冲区溢出问题思路

      本文链接:https://www.haomeiwen.com/subject/hzgglltx.html