【问题标题】:Postgres concurrent transactions per connection每个连接的 Postgres 并发事务
【发布时间】:2016-08-22 19:30:59
【问题描述】:

我正在阅读number of concurrent transaction per connection

我遇到了jdbc.postgresql.org/documentation/91/thread。 它说

如果一个线程尝试使用该连接,而另一个线程正在使用它,它将一直等待,直到另一个线程完成其当前操作。

如果我有 1 个连接的连接池(使用 cp03),那么基于上述 在一个线程中我这样做:

start transaction
Read query
sleep for 2 min
commit transaction

那么在第一个线程完成事务之前,其他线程应该无法运行任何查询...对吗?

但在我的观察中,当第一个线程处于休眠状态时,我能够让其他线程完成事务

这是为什么呢?我错过了什么?

编辑: CP03 配置:

        <property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />                                               
        <property name="hibernate.generate_statistics" value="false" />
        <property name="hibernate.c3p0.max_size" value="1" />
        <property name="hibernate.c3p0.min_size" value="0" />
        <property name="hibernate.c3p0.acquire_increment" value="1" />
        <property name="hibernate.c3p0.idle_test_period" value="300" />
        <property name="hibernate.c3p0.max_statements" value="0" />
        <property name="hibernate.c3p0.timeout" value="100" />

【问题讨论】:

  • 想发布你的 cp03 配置
  • @ScaryWombat 添加了配置

标签: java multithreading hibernate postgresql jdbc


【解决方案1】:

这里的关键字是wait。当有锁,wait 并且持有锁的线程转到sleepyields 时会发生什么?现在其他线程可以使用该连接了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 2015-06-04
    • 2014-11-18
    • 2021-07-26
    • 2021-12-01
    • 2013-10-15
    • 2017-09-10
    • 2014-03-29
    相关资源
    最近更新 更多