写了个脚本, 用来拉取远程服务器上的数据,然后存入本地,
然后我 执行 python get1.py
拉取了才5w多
脚本就卡了 不动
要好几分钟才动一下
我以为是远程数据库挂了,于是新开一个窗口执行 python get1.py 速度飞快
那就正面 不是远程 和本地数据库的问题
是终端窗口 内存用光了吗
可是我的脚本 就是要让他长期运行呀,这才拉了几万个记录,就卡成这样了
那我有好几十万的数据量 怎么办呀
大家有解决办法吗
1
qq2549112 OP 经过简单排查, 发现是 查询语句 获取结果 速度很慢
查询 到了5w多, 继续查询的话,获取数据的时间会很长, 应该不可能是网络问题 因为我新开终端 再次运行这个脚本,他跑的很快 我猜测,是不是远程数据库 因为 这个连接查询的数据量太多了,所以 需要休息 太累了 |
2
20015jjw 2015-07-05 03:11:18 +08:00 via Android 1
试试查询的时候给一个timeout呢
|
3
Gandum 2015-07-05 06:45:32 +08:00 via iPad 1
上代码
|
4
kenken 2015-07-05 07:37:06 +08:00 1
talk is cheap, show me the code
|
5
qq2549112 OP @Gandum
@kenken 谢谢 我的代码是这个 http://paste.ubuntu.com/11824534/ 从代码上来看 应该是没有问题 ,后来我加了个判断, 就是offset 可以整除10000的时候 就休息10秒 [也就是每次同步1w个数据,就休息10秒] , 但还是不行,还是会在5w左右的数据量 出现卡住的情况 而且每次都在 5w左右 卡住 所以我现在怀疑是远程数据库 做了什么限制 但是我不知道怎么办了 |
6
benjiam 2015-07-05 12:59:16 +08:00 via Android
为什么不在5万以后断开继续
|
8
imn1 2015-07-05 13:17:07 +08:00 1
如果总是在固定数量出现问题,多数是
1.远端某个环节有数量限制 2.内存 3.到特定某条数据有问题 如果是数据库的问题,只能自己解决 在代码的不同运行阶段,适当加一些delete语句,把不再使用的大数据变量扔给GC自动回收 远程要用 IP 那个for可以改成表达式 最好拖数据和数据处理分开,拖到本地再处理,不要处理完再拖 多进程拖 |
9
qq2549112 OP |
12
lucky2touch 2015-07-05 15:35:10 +08:00 1
你这需求是做增量备份?不知道原表是如何设计的,排序的消耗是很大的,除了索引之外,类似的处理方法从设计上来说还有表分区啥的。
|
13
Gandum 2015-07-05 15:59:35 +08:00 via iPhone 1
这个代码应该没啥问题,不如每5W的时候就close,然后再重建连接试试?
|
14
Gandum 2015-07-05 16:04:13 +08:00 via iPhone 1
反正肯定不是内存问题,python在你不引用的时候会自动进行垃圾收集
|
15
qq2549112 OP @lucky2touch 谢谢,需求是 实时的增量备份到另外一个数据库 [mysql to postgresql]
我重新发了个帖子, http://www.v2ex.com/t/203463 感谢前辈 |
16
wy315700 2015-07-05 16:08:32 +08:00 1
你给时间戳加一个索引看看
|
17
qq2549112 OP @Gandum 谢谢 现在我找到问题所在了,是数据库的问题 我重新发了个帖子, http://www.v2ex.com/t/203463
|