14
回答
10个sql,dbcp连接池,分给10个线程去执行,为什么效率没有提高呢?
【腾讯云】学生服务器套餐10元/月 >>>   
要查10个SQL语句,每句执行的时候都略长,于是决定开多线程来执行。 在navicat premiumyahu999中10个语句开两个查询窗口执行,每个执行5个,时间明显缩短, 为什么在程序中,开多线程执行,时间没有节省呢? 10个线程中,检查过connection的hashCode是不同的, 难道这10个connection在排队呢? 求指点
举报
烛✟孩
发帖于3周前 14回/1K+阅
共有14个答案 最后回答: 5天前
10条sql是互不干扰的吗? 存不存在锁表等待的可能性?
--- 共有 1 条评论 ---
烛✟孩锁表等待,不清楚呢,有没有想法在哪里测试这个问题呢? 所有的sql都是查询,会不会有锁表问题? 3周前 回复
在创建连接池的时候,设置初始连接数,按照你说的,你检查了10个连接的hashcode都不相同,那么初始化连接应该没有问题,假如你一条sql需要5秒,你开始的时候直接查询10个sql,是串行的,所以需要50秒的时间这个没有问题,按照理论那么10个线程每个执行一条sql并发执行,不说5秒之内执行完毕,最起码应该低于50秒,但是由于你的sql性能过低,并发请求导致数据库压力变大或者操作同样的数据导致行锁,甚至可能会出现死锁。
10 个 connection,需要开启10个TCP连接,还需要经过登陆验证授权。 2 个 connection,批量执行5-5,又是因为是批量,所以更快。
--- 共有 1 条评论 ---
烛✟孩因为此次用户请求的效率瓶颈在这些sql查询的时间上, 我的想法是,多开几个线程去执行, 因为看yahu999里,开两个查询窗口,时间就缩短了一半, 按您的意思来说,我这种让10个 connection 去同时执行,不能解决当前的问题的是吧? 那您那边,有没有什么好的建议呢? 3周前 回复

引用来自“蓝水晶飞机”的评论

10 个 connection,需要开启10个TCP连接,还需要经过登陆验证授权。 2 个 connection,批量执行5-5,又是因为是批量,所以更快。
因为此次用户请求的效率瓶颈在这些sql查询的时间上,
我的想法是,多开几个线程去执行,
因为看yahu999里,开两个查询窗口,时间就缩短了一半,
按您的意思来说,我这种让10个 connection 去同时执行,不能解决当前的问题的是吧?
那您那边,有没有什么好的建议呢?
--- 共有 2 条评论 ---
烛✟孩 回复 @蓝水晶飞机 : 确实用的链接池,dbcp, 也正在用jdbc测试, 初步看,jdbc好像没有变快, 一会儿再换大数据量试试,感谢 : ) 3周前 回复
蓝水晶飞机不了解你的具体场景,单单是说开多少个connection去执行并不能说明性能,万一你用连接池的呢!适当的并发可以提高效率,过大的并发反而造成堵塞。 3周前 回复
恐怕你是不了解多线程吧,10个线程 你真的以为是并发么?你用多线程来解决SQL的问题 让我感觉有点搞笑..你应该从你的sql入手,JDBC 也有批量处理sql的API
--- 共有 2 条评论 ---
首席执行官机器人 回复 @烛✟孩 : 让汇总到一起这种动作也用sql让数据库去做,不要自己拿出数据用代码做 2周前 回复
烛✟孩唉,被鄙视了~ 10个都是查询语句,要获取每个语句的结果,然后汇总到一起,处理一下返回给前台。 我去试试怎么用jdbc多线程处理, 但还是没懂,为什么我的思维错了呢, 本来想的挺好的,为什么不会并发执行呢?求解~~ 3周前 回复
如果说10个全都是全表,那么除了数据库倒霉消耗增加10倍,没有一毛钱节约。分批返回,还要加上额外的通讯握手交互成本。 先尝试优化SQL吧,搞清楚执行时间长的具体原因再说。特别是如果大量全表,怎么也降不下来的。
--- 共有 1 条评论 ---
烛✟孩那求教一下,比如10条语句,在navicat,一个查询窗口,会花10秒,如果两个窗口,每个执行5个语句,每个窗口都花5秒,而两个窗口同时执行,所以就节省了时间。 那在我们开发环境中,如何实现类似的效果呢? 求教~ 3周前 回复
这个和连接池没有关系了,相当于你之前是数据库 1个sql并发,现在是10个并发,按你的描述,这些sql耗时较长,那占用资源也很可能较大,你超10个线程,相当于 10个 占用较大资源 的sql并发,数据库压力这时会增大,原来1个sql执行要5s,那么在10个并发的请求,这个sql可能执行要 50s。相对于开线程前后,数据库的资源一定,并发情况下,起到负优化也是正常的。
--- 共有 1 条评论 ---
烛✟孩谢谢你哈,但用navicatyahu999开多窗口执行的时候,确实快了,所以我才想办法多线程尝试,感觉navicat快,是不是多开了线程呢? 3周前 回复
我想知道如何@所有人呢,更正一下
开多线程之后,确实速度有提升,
只是,一个是7秒到4秒,一个是3秒到1秒,这种级别,
--- 共有 1 条评论 ---
首席执行官机器人你应该用sql直接把数据处理好,分页查询后反给前台。 2周前 回复
顶部