1.在测试机上做测试, MySQL中进行少量数据的delete操作,但连接卡住无反应,查看MySQL processlist, 部分connecion处于init, 直接切断的连接状态断end.
从上图的query 17765可见, delete from t; 一直处于init状态
2. 觉得数据目录的磁盘空间满了,df -h查看, /work目录100%。
[root@mongohost3 mongodb]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
14G 5.8G 7.2G 45% /
/dev/sda1 99M 21M 74M 22% /boot
tmpfs 3.0G 0 3.0G 0% /dev/shm
/dev/sdb1 250G 250G 20K 100% /work
3. 查看MySQL error log, 发现日志中提示,磁盘空间已满,不能写入bin log了。
从上图可见Server Errorcod:28, 再用perror查看具体信息:
[root@mongohost3 mongodb]# perror 28
OS error code 28: No space left on device
4. 查看/work目录下mongo有一个很大的日志文件, 直接rm -rf后,但磁盘空间仍然未释放,查看mongo进程的打开文件,只是把日志文件标识为了"deleted"状态。
还有/work为xfs文件类型,230G的数据,直接删除,没有感觉占用时间。
/dev/sdb1 xfs 250G 17G 234G 7% /work
这种情形很像,MySQL的长连接, 在/tmp目录创建大临时文件,用完只是标识为deleted, 直到这个MySQL连接断开,空间才会真正释放。
当重新启动mongo进程后,空间被释放, 刚才卡住的MySQL操作也执行完成: 表tt只有1 行数据,删除了17分钟。
mysql> delete from tt;
Query OK, 1 row affected (17 min 28.93 sec)