[MySQL 友情协助] ERROR 3 (HY000): Error writing file '/dev/shm/MYHTwgxT' (Errcode: 28)

面对线上DB执行SQL时报错的情况,通过分析错误信息、检查磁盘使用情况,并优化SQL查询来解决问题。建议增加/dev/shm大小,简化SQL查询以避免过长的子查询,从而提高执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

朋友线上DB执行SQL报错:ERROR 3 (HY000): Error writing file '/dev/shm/MYHTwgxT' (Errcode: 28)

让朋友取得dev组run 过的sql,执行explain,如下:

mysql> explainselect count(*) from ( select STG_ITEM.ITEM_ID from (selectitem_label.item_id,item_label.revision from catalog.item_label item_label innerjoin (select max(item_label.effective_date) aseffective_date,item_label.item_id from catalog.item_label inner joincatalog.item item on item.item_id=item_label.item_id anditem.revision=item_label.revision whereitem_label.EFFECTIVE_DATE>='2013-01-01 00:00:00' ANDitem_label.EFFECTIVE_DATE < '2014-01-14 00:00:00' and label='PROD' groupby 2) stg on item_label.effective_date=stg.effective_date anditem_label.item_id=stg.item_id and item_label.LABEL='PROD' ) STG_ITEM innerjoin catalog.attribute_set attr_set onattr_set.ATTRIBUTABLE_ENTITY_ID=STG_ITEM.ITEM_ID andattr_set.ATTRIBUTABLE_ENTITY_REVISION=STG_ITEM.REVISION left outer joincatalog.public_attribute attr onattr.ATTRIBUTE_SET_ID=attr_set.ATTRIBUTE_SET_ID whereattr_set.ATTRIBUTABLE_ENTITY_TYPE='ITEM' and attr_set.ATTRIBUTE_SET_TYPE in('LOCALE','ACTION','COUNTRY','BASE','CUSTOM','EVENT','FULFILLMENT','PUBLISHING','RESTRICTION')group by STG_ITEM.ITEM_ID, STG_ITEM.REVISION, attr_set.ATTRIBUTE_SET_ID,attr_set.ATTRIBUTABLE_ENTITY_ID, attr_set.ATTRIBUTABLE_ENTITY_TYPE,attr_set.ATTRIBUTABLE_ENTITY_REVISION, attr_set.ATTRIBUTE_SET_TYPE, attr_set.ATTRIBUTE_SET_KEY,attr.ATTRIBUTE_NAME, attr.ATTRIBUTE_VALUE ) cnt;

ERROR 3 (HY000): Error writing file '/dev/shm/MYHTwgxT' (Errcode: 28)


让朋友马上去检查tmp目录,发现磁盘tmp磁盘目录满了:

[xx@xx01]$ df -h

FilesystemSize Used Avail Use% Mounted on

/dev/mapper/Sys-root1008M 235M 723M 25% /

tmpfs16G 16G 139M 100%/dev/shm

/dev/vda1194M 32M 153M 18% /boot

/dev/mapper/Sys-home4.0G 145M 3.6G 4% /home



看到此情况,我给了2个建议:

1, increase the size of/dev/shm, maybe 200G is enough.

2, this sql istoo complex to run, ptimize the sql, and run the more concise sql in theint map database, for example:

When I change the where clause “item_label.EFFECTIVE_DATE>='2013-01-01 00:00:00' ” to “item_label.EFFECTIVE_DATE>='2013-03-01 00:00:00' ”, this sql scriptcan run and get a result, as follows:

mysql> select count(*) from ( selectSTG_ITEM.ITEM_ID from (select item_label.item_id,item_label.revision fromcatalog.item_label item_label inner join (select max(item_label.effective_date)as effective_date,item_label.item_id from catalog.item_label inner joincatalog.item item on item.item_id=item_label.item_id anditem.revision=item_label.revision where item_label.EFFECTIVE_DATE>='2013-03-01 00:00:00'AND item_label.EFFECTIVE_DATE < '2014-01-14 00:00:00' andlabel='PROD' group by 2) stg on item_label.effective_date=stg.effective_dateand item_label.item_id=stg.item_id and item_label.LABEL='PROD' ) STG_ITEM innerjoin catalog.attribute_set attr_set onattr_set.ATTRIBUTABLE_ENTITY_ID=STG_ITEM.ITEM_ID andattr_set.ATTRIBUTABLE_ENTITY_REVISION=STG_ITEM.REVISION left outer joincatalog.public_attribute attr on attr.ATTRIBUTE_SET_ID=attr_set.ATTRIBUTE_SET_IDwhere attr_set.ATTRIBUTABLE_ENTITY_TYPE='ITEM' and attr_set.ATTRIBUTE_SET_TYPEin('LOCALE','ACTION','COUNTRY','BASE','CUSTOM','EVENT','FULFILLMENT','PUBLISHING','RESTRICTION')group by STG_ITEM.ITEM_ID, STG_ITEM.REVISION, attr_set.ATTRIBUTE_SET_ID,attr_set.ATTRIBUTABLE_ENTITY_ID, attr_set.ATTRIBUTABLE_ENTITY_TYPE,attr_set.ATTRIBUTABLE_ENTITY_REVISION, attr_set.ATTRIBUTE_SET_TYPE,attr_set.ATTRIBUTE_SET_KEY, attr.ATTRIBUTE_NAME, attr.ATTRIBUTE_VALUE ) cnt;

+----------+

| count(*) |

+----------+

| 58739 |

+----------+

1 row in set (7.45 sec)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值