多个线程同时使用同一个 JDBC 连接

2024-01-14

我试图更好地理解如果多个线程尝试使用相同的 JDBC 连接同时执行不同的 sql 查询会发生什么。

  • 结果在功能上是否正确?

  • 对性能有何影响?

  • 会穿线A必须等待线程B完全完成其查询?

  • 或者会穿线A能够在线程之后立即发送其查询B已发送查询,之后数据库将并行执行这两个查询?


我看到 Apache DBCP 使用同步协议来确保从池中获取的连接将从池中删除,并使其不可用,直到它们被关闭。这似乎比实际需要的更不方便。我正在考虑简单地通过创建打开连接的静态列表并以循环方式分发它们来构建我自己的“池”。

我不介意偶尔的性能下降,而且每次使用后不必关闭连接的便利性似乎非常吸引人。我这样做有什么坏处吗?


我使用 AWS RDS Postgres 数据库和 Java 11 运行了以下一组测试:

  1. 创建一个包含 11M 行的表,每行包含一个 TEXT 列,并填充随机的 100 个字符的字符串

  2. 随机选择一个 5 个字符的字符串,并在上表中搜索该字符串的部分匹配项

  3. 计算上述查询返回结果所需的时间。就我而言,大约需要 23 秒。由于返回的结果很少,我们可以得出结论,这 23 秒的大部分时间都花在等待数据库运行全表扫描,而不是发送请求/响应数据包

  4. 并行运行多个查询(使用不同的关键字),使用不同的连接。就我而言,我发现它们都在大约 23 秒内完成。即,查询正在高效并行化

  5. 使用以下命令在并行线程上运行多个查询相同的连接。我现在看到第一个结果在大约 23 秒内返回。第二个结果将在大约 46 秒内返回。第三次约 1 分钟。等等。所有结果在功能上都是正确的,因为它们与该线程查询的特定关键字匹配

作为 Joni 之前提到的补充,他的结论也与我在 Postgres 上看到的行为相符。看起来所有“正确性”都被保留,但所有并行性的好处都丢失了,如果同时在同一连接上发送多个查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个线程同时使用同一个 JDBC 连接 的相关文章

  • 将用户库添加到 Ant Builder 类路径

    我在为 Eclipse 项目设置 Ant Builder 时遇到问题 我确实在 Eclipse 中将几个第 3 方库配置为用户库 这些库已添加到我的项目的构建路径中 一切正常 我的问题是 如果我想从 Eclipse 使用 Ant Build
  • Maven 配置文件相当于 Gradle

    我试图在我的 spring boot 项目构建中实现一个简单的场景 包括 排除依赖项以及根据环境打包 war 或 jar 例如 对于环境dev包括开发工具和包 jar 用于prod包战等 我知道它不再是基于 XML 的配置 我基本上可以在
  • 将json URL导入到java并使用jackson库解析它

    我正在尝试读取 java 中的 json 链接并解析它 以便我可以将它用于其他事务 但问题是我收到错误 我真的不知道该如何处理它们 这是代码 package weather data import weather data import c
  • Spring Batch 多线程

    我正在编写一个 Spring Batch 并希望在需要时对其进行扩展 我的 ApplicationContext 看起来像这样 Configuration EnableBatchProcessing EnableTransactionMan
  • 通过 JDBC 调用 Sybase 存储过程时结果集为空

    我正在调用一个通过 JDBC 返回多个结果集的 Sybase 存储过程 我需要获取一个特定的结果集 其中有一列名为 结果 这是我的代码 CallableStatement cs conn prepareCall sqlCall cs reg
  • Spring 可以理解 @Inject 替换 Weld 作为 JSR-299 实现吗?

    我从几个网页中注意到 Spring 3 0 显然支持来自 JSR 330 的 Inject 由于我们确实希望在 Web 应用程序和独立应用程序的库中使用 JSR 299 语法进行依赖项注入 并且有 Weld 的替代方案 因此如果 Sprin
  • 使用java在mysql中插入带有\\的文件路径

    我正在使用java制作一个独立的应用程序 并且我需要插入用户从文件选择器中选择的图像的路径 我正在获取文件的路径 但是当我将其存储在数据库 mysql 中时 它不会存储 所以当我检索该路径时 该文件不会显示 如何存储文件的路径 这样就可以使
  • 在 Eclipse 中导航 Java 调用堆栈

    在调试器中像GDB http sources redhat com gdb 当您在断点处停止时 您可以轻松地向上移动调用堆栈并检查相关的源和堆栈帧数据 在 Eclipse 中如何做到这一点 In the 调试视角 http www ibm
  • Maven:缺少工件 org.springframework:spring:jar:4.2.6

    我在 SpringToolSuite 中有一个动态 Web 项目 它被转换为 Maven 项目 我遇到问题 缺少工件 org springframework spring jar 4 2 6 我已经尝试清理 重建和运行该项目 它给 读取文件
  • Maven:如何获取捆绑在包中的 .so 库

    我有一个带有 jar 和 so 文件的第三方库 我配置了 pom xml 如下
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow
  • 获取运行时生成的类的字节

    我正在使用一个 Java 框架 该框架使用自定义类加载器在运行时生成一些 代理 类 我想为任何这样的类获取自定义 ClassLoader 从 loadClass 返回的与该类对应的原始字节数组 这可能吗 我知道 如果一个类作为资源存在 那么
  • Java 通用问题

    下面的代码可以编译 但如果我取消注释行 它不会编译 我很困惑为什么 HashMap 确实扩展了 AbstractMap 并且声明映射的第一行可以正常编译 import java util AbstractMap import java ut
  • 我可以从同一个 jar 文件执行两个不同的类吗?

    我有一个项目 在一个包中我制作了服务器 在第二个包中我制作了客户端 它运行良好 我想创建一个 Jar 文件 是否可以使用同一个 jar 文件分别运行客户端和服务器 我使用了只有一个 main 的 jar 文件 当我运行 jar 文件时 它会
  • bean 中的 Spring JavaConfig 属性未设置?

    我正在考虑将 Spring JavaConfig 与一些属性文件一起使用 但 bean 中的属性未设置 bean 中的属性未设置 这是我的网络配置 Configuration EnableWebMvc PropertySource valu
  • LinkedBlockingQueue 抛出 InterruptedException

    我有这段代码 ALinkedBlockingQueue应该只抛出一个Exception如果在等待添加到队列时被中断 但这个队列是无限的 所以它应该尽快添加 为什么我的关闭方法会抛出一个InterruptedException private
  • Ant 类路径和 junit.jar

    我有一个 build xml 它允许我运行 junit 测试 这是相关部分
  • 如何更改MultipartFile的originalFilename

    我在服务器端有一个 MultipartFile 文件 我想更改该文件的原始文件名 但该类仅支持 getOriginalFilename 谁能帮我这个 PS 上传的是图片文件 多谢 您可以使用 MockMultipartFile 类更改名称
  • 如何使用 JRE 部署 JavaFX 11 桌面应用程序

    我有一个 JavaFX JDK 8 桌面业务应用程序 它使用 Java Web Start 进行部署 用户安装了 Java 8 只需访问 URL 我的 AWS Linux 服务器上的公共 URL 即可下载 启动应用程序 使用 Web Sta
  • 如何获取 EC2 实例的 CloudWatch 指标数据

    我想获取我的 EC2 实例的 Cloudmetrics 数据 以便我可以使用这些数据绘制图表并将其显示在我的 Android 设备上 我怎么做 有相同的示例程序或教程吗 提前致谢 这就是我正在做的 private static void f

随机推荐

  • 使用bundle运行gitlab服务器:命令未找到错误

    我不知道发生了什么 sudo 服务 gitlab 启动 Starting both the GitLab Unicorn and Sidekiqscript web line 21 bundle command not found 查看我的
  • 如何在 cygwin 上安装 cURL?

    我尝试在 cygwin 上启用curl 但它说bash curl command not found 如何在 cygwin 上安装curl 我刚刚遇到这个 1 从以下位置找到cygwin setup exe文件http cygwin com
  • 使文本高度为 div 的 100%?

    我正在尝试使文本的高度为 100 div但它不起作用 它只是变成了100 body font size 有什么办法让它跟随div高度吗 The div高度是整个页面的 4 当您调整大小 更改分辨率时 我不希望文本跟随它 为了获得我想要的结果
  • 是否可以在打字稿中创建动态 getter/setter?

    我是 TypeScript 新手 我正在尝试将我们的应用程序从 es2016 重写为 TypeScript 我的任务是拥有一个具有数据属性的类 并使数据对象中的每个元素可用作类属性 我被这段 JavaScript 代码困住了 for let
  • Django:关闭http响应消息的控制台输出

    所以我们用 django 制作了一个应用程序 每次收到请求时它都会在控制台上打印所有这些 http 响应消息 Date String GET urlpath blah blah 200 216 Date String DELETE anot
  • jQuery 数据表问题

    当使用jQuery 数据表插件 http datatables net 为什么我会收到此错误 k 未定义 style typeof e saved aaSorting 未定义 我发布这个答案是为了记录一些东西以供自己将来参考 我希望它能对其
  • EqualityComparer.Default 不够聪明

    我正在阅读源代码EqualityComparer
  • 带有圆角的 AppWidget 图像

    因此 我通过在应用程序的主布局中向用户显示的各种视图进行动画处理 在应用程序中动态创建图像 目前 我正在相对布局中生成场景 将布局图像作为位图 然后将位图保存到 SD 以便 appwidget 通过 uri 访问 这一切都工作得很好 但是
  • 如何在Linux内核中找到sk_buff的所有者套接字?

    我正在尝试找到一个的所有者插座sk buff举例来说 skb 我的最终目标是找到特定的 TCP 选项并以某种方式让用户空间应用程序知道 我打算在找到TCP选项时设置一个套接字选项并让用户空间应用程序调用getsockopt 因此我需要知道之
  • Python 字符串转 Int 或 None

    学习Python 有点卡壳 我正在尝试将变量设置为等于int stringToInt 或者如果字符串为空则设置为None 我尝试做variable int stringToInt or None但如果字符串为空 则会出错 而不仅仅是将其设置
  • Django模型列表顺序字段更新

    我有一张桌子 比方说Book 具有以下模型定义 class Book models Model name models CharField name of the book max length 10 sequence models Int
  • System.Threading.Tasks.Dataflow 和 Microsoft.Tpl.Dataflow 之间有什么区别

    有 2 个不同的官方 TPL Dataflow nuget 包 我很困惑选择应该使用哪一个 据我了解 System Threading Tasks Dataflow 版本比其他版本稍新 而且 System Threading Tasks D
  • 警告 - 初始化使指针来自整数而不进行强制转换

    我发现了类似的问题 但我认为它们不适用于我的具体问题 所以如果它们适用 我很抱歉 我作为一年级 CS 学生正在学习 C 并尝试用 C 进行测验 但我一无所获 因为每次我尝试编译以查看它是否正常工作时 我都会收到消息 警告 初始化使指针从未经
  • 新数据框列作为另一个数据框的函数(摘要)对我不起作用

    我想创建一个新的计算列 另一列文本的摘要 为了让您重现 我创建了一个 df 作为可重现的示例 df lt data frame name replicate 1000 paste sample LETTERS 20 replace TRUE
  • 如何添加case语句以在每条记录后添加break?

    每行之后应该有一个休息时间LIKE A 当找到下一条记录时LIKE B stmt con gt prepare SELECT FROM fistevent WHERE Event Id AND TicketType AND row name
  • 无需 jQuery 即可获得 innerWidth() 等效项

    我目前正在努力从我编写的一些代码中消除 jQuery 并且我有一部分代码 其中我正在计算某些代码的内部和外部宽度span元素 这好像是 getBoundingClientRect 对于获取元素的外部宽度效果很好 但我在获取内部宽度方面有点困
  • 如果参数有成员变量则特殊化函数

    我有一个模板化的错误报告函数 因为它可以报告许多不同消息类别的错误 template
  • 将希腊字符和星号 (*) 添加到轴标题

    我想在 R 中的直方图的 x 轴上添加一个希腊字符 我可以单独写希腊字符或与帽子一起写 但问题是我需要这个字符带有帽子和星号 一起 更具体地说 我想要像 hat phi 这是我所做的 x rnorm 1000 hist x nclass 1
  • sublime text-“列出包含“查找”字符串的行

    如何列出包含 find 命令中的匹配项的行 即 我想在单独的窗口中列出所有匹配的行 目前只能转到下一个 上一个 查找 Try Find in Files Cmd Shift F on a Mac presumably Ctrl Shift
  • 多个线程同时使用同一个 JDBC 连接

    我试图更好地理解如果多个线程尝试使用相同的 JDBC 连接同时执行不同的 sql 查询会发生什么 结果在功能上是否正确 对性能有何影响 会穿线A必须等待线程B完全完成其查询 或者会穿线A能够在线程之后立即发送其查询B已发送查询 之后数据库将