10个sql,dbcp连接池,分给10个线程去执行,为什么效率没有提高呢?

发布于 2021-12-08 14:03:22 字数 215 浏览 798 评论 21

要查10个SQL语句,每句执行的时候都略长,于是决定开多线程来执行。

在navicat premium软件中10个语句开两个查询窗口执行,每个执行5个,时间明显缩短,

为什么在程序中,开多线程执行,时间没有节省呢?

10个线程中,检查过connection的hashCode是不同的,

难道这10个connection在排队呢?

求指点

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(21

归属感 2021-12-08 20:03:24

谢谢你哈,但用navicat软件开多窗口执行的时候,确实快了,所以我才想办法多线程尝试,感觉navicat快,是不是多开了线程呢?

蓝颜夕 2021-12-08 20:03:24

我想知道如何@所有人呢,更正一下
开多线程之后,确实速度有提升,
只是,一个是7秒到4秒,一个是3秒到1秒,这种级别,

彼岸花ソ最美的依靠 2021-12-08 20:03:24

你应该用sql直接把数据处理好,分页查询后反给前台。

疑心病 2021-12-08 20:03:21

换连接池试试?我记得dbcp是单线程

葬花如无物 2021-12-08 20:03:21

这个和连接池没有关系了,相当于你之前是数据库 1个sql并发,现在是10个并发,按你的描述,这些sql耗时较长,那占用资源也很可能较大,你超10个线程,相当于 10个 占用较大资源 的sql并发,数据库压力这时会增大,原来1个sql执行要5s,那么在10个并发的请求,这个sql可能执行要 50s。相对于开线程前后,数据库的资源一定,并发情况下,起到负优化也是正常的。

把昨日还给我 2021-12-08 20:03:19

如果说10个全都是全表,那么除了数据库倒霉消耗增加10倍,没有一毛钱节约。分批返回,还要加上额外的通讯握手交互成本。

先尝试优化SQL吧,搞清楚执行时间长的具体原因再说。特别是如果大量全表,怎么也降不下来的。

情痴 2021-12-08 20:03:19

那求教一下,比如10条语句,在navicat,一个查询窗口,会花10秒,如果两个窗口,每个执行5个语句,每个窗口都花5秒,而两个窗口同时执行,所以就节省了时间。 那在我们开发环境中,如何实现类似的效果呢? 求教~

琴流音 2021-12-08 20:03:16

唉,被鄙视了~ 10个都是查询语句,要获取每个语句的结果,然后汇总到一起,处理一下返回给前台。 我去试试怎么用jdbc多线程处理, 但还是没懂,为什么我的思维错了呢, 本来想的挺好的,为什么不会并发执行呢?求解~~

你曾走过我的故事 2021-12-08 20:03:15

恐怕你是不了解多线程吧,10个线程 你真的以为是并发么?你用多线程来解决SQL的问题 让我感觉有点搞笑..你应该从你的sql入手,JDBC 也有批量处理sql的API

泛泛之交 2021-12-08 20:03:15

回复
让汇总到一起这种动作也用sql让数据库去做,不要自己拿出数据用代码做

反目相谮 2021-12-08 20:03:14

回复
@蓝水晶飞机 : 确实用的链接池,dbcp, 也正在用jdbc测试, 初步看,jdbc好像没有变快, 一会儿再换大数据量试试,感谢 : )

断爱 2021-12-08 20:03:14

不了解你的具体场景,单单是说开多少个connection去执行并不能说明性能,万一你用连接池的呢!适当的并发可以提高效率,过大的并发反而造成堵塞。

墨洒年华 2021-12-08 20:03:13

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

10 个 connection,需要开启10个TCP连接,还需要经过登陆验证授权。

2 个 connection,批量执行5-5,又是因为是批量,所以更快。

灵芸 2021-12-08 20:03:07

111

剑心龙吟 2021-12-08 20:02:35

心欲静而疯不止 2021-12-08 20:01:57

因为此次用户请求的效率瓶颈在这些sql查询的时间上, 我的想法是,多开几个线程去执行, 因为看软件里,开两个查询窗口,时间就缩短了一半, 按您的意思来说,我这种让10个 connection 去同时执行,不能解决当前的问题的是吧? 那您那边,有没有什么好的建议呢?

柳絮泡泡 2021-12-08 20:00:34

10 个 connection,需要开启10个TCP连接,还需要经过登陆验证授权。

2 个 connection,批量执行5-5,又是因为是批量,所以更快。

居里长安 2021-12-08 19:40:04

在创建连接池的时候,设置初始连接数,按照你说的,你检查了10个连接的hashcode都不相同,那么初始化连接应该没有问题,假如你一条sql需要5秒,你开始的时候直接查询10个sql,是串行的,所以需要50秒的时间这个没有问题,按照理论那么10个线程每个执行一条sql并发执行,不说5秒之内执行完毕,最起码应该低于50秒,但是由于你的sql性能过低,并发请求导致数据库压力变大或者操作同样的数据导致行锁,甚至可能会出现死锁。

北笙凉宸 2021-12-08 19:13:12

锁表等待,不清楚呢,有没有想法在哪里测试这个问题呢? 所有的sql都是查询,会不会有锁表问题?

英雄似剑 2021-12-08 19:12:33

10条sql是互不干扰的吗? 存不存在锁表等待的可能性?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文