Tidb数据库导入数据出现oom问题

今天使用insert操作向tidb中插入数据,发现正在导入的过程中出现如下错误:

mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

也就是说客户端不能连接mysql服务器端。有的人会想到可能是mysql客户端连接至服务器端超时导致的:

mysql> show variables like '%connect%';
+-----------------------------------------------+-----------------+
| Variable_name                                 | Value           |
+-----------------------------------------------+-----------------+
| connect_timeout                               | 10              |

一般情况下我的错误也有可能由connect_timeout时间太短这种情况导致的。比如查询数据集比较大的数据的时候。

不过针对这个错误tidb官方也有另外的解释,看看是不是oom问题,因此我就排查了一下:

[root@:vg_adn_tidbCkhsTest /data/splits]#dmesg -T | grep -i oom
[Thu Nov 29 11:16:42 2018] mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
[Thu Nov 29 11:16:42 2018]  [<ffffffff8bd97c44>] oom_kill_process+0x254/0x3d0
[Thu Nov 29 11:16:42 2018] [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
[Thu Nov 29 12:05:50 2018] mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
[Thu Nov 29 12:05:50 2018]  [<ffffffff8bd97c44>] oom_kill_process+0x254/0x3d0
[Thu Nov 29 12:05:51 2018] [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name

果然是内存溢出问题,我仔细看了一下,发现mysql程序是比较消耗内存的,因此被内核给干掉了。

但是数据还必须继续导入才行,那我们只好停止一些暂时不用的程序,接着导入数据

然后导入数据就成功了。

下面是官方给出的问题解决方法:

因此我们下次要注意二点:

1、在导入数据的时候,比较消耗内存,因此我们先给程序释放空间运行

2、开启swap功能

原文地址:https://www.cnblogs.com/FengGeBlog/p/10186373.html