Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC executeBatch()在PostgreSQL中挂起,没有错误_Java_Postgresql_Jdbc_Postgresql 9.1_Postgresql 9.2 - Fatal编程技术网

Java JDBC executeBatch()在PostgreSQL中挂起,没有错误

Java JDBC executeBatch()在PostgreSQL中挂起,没有错误,java,postgresql,jdbc,postgresql-9.1,postgresql-9.2,Java,Postgresql,Jdbc,Postgresql 9.1,Postgresql 9.2,我尝试在表中加载50000行和200列。我每1000行执行一次executeBatch()。我得到了这张桌子的锁。同样的代码适用于MS SQL和Oracle,但对于postgresql我发现了这个问题。当我将executeBatch的编号从1000减少到75时,所有操作都正常 配置文件中是否有响应批处理缓冲区大小的参数 同样的问题通常,您需要查找以下内容 你真的能把桌子锁上吗 您是否有其他正在等待的java代码锁 通常,首先要检查的是pg_stat_activity system视图,该视图将显

我尝试在表中加载50000行和200列。我每1000行执行一次executeBatch()。我得到了这张桌子的锁。同样的代码适用于MS SQL和Oracle,但对于
postgresql
我发现了这个问题。当我将executeBatch的编号从1000减少到75时,所有操作都正常

配置文件中是否有响应批处理缓冲区大小的参数


同样的问题

通常,您需要查找以下内容

  • 你真的能把桌子锁上吗
  • 您是否有其他正在等待的java代码锁
  • 通常,首先要检查的是
    pg_stat_activity system
    视图,该视图将显示正在执行的查询以及查询是否处于活动、空闲、等待等状态。然后,如果查询正在等待(即
    waiting
    t
    ),然后,您将需要检查
    pg_locks
    视图,并查看在关系中还有哪些内容可能被锁定

    如果等待不是真的,那么最好检查java代码是否有客户端锁,但由于这对MySQL和Oracle有效,我认为这不是什么问题


    还有一件事需要注意。我不确定这里的MySQL和Oracle,但PostgreSQL将每个连接一次只能查询一个查询。您可能在那里有一些锁定?

    当我批量为具有大量列的表执行insert语句时,当call语句.executeBatch()挂起时。 它特定于postgresql jdbc驱动程序。 为了避免这个问题,我们应该增加套接字的缓冲区大小参数(SO_SNDBUF,SO_RCVBUF)

    对于Windows,我们必须在注册表中创建这样的参数:

    [HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Afd \Parameters]
    
    DefaultReceiveWindow(类型=DWORD)=1640960(十进制) DefaultSendWindow(类型=DWORD)=1640960(十进制)

    这个号码(1640960)是我从网上得到的一般推荐!
    这对我很有用

    您是否检查了应用程序的内存使用情况?驱动程序可能会消耗更多内存,因此经常查找GC。也许仅仅增加堆的大小就足够了,我可以单独运行这个应用程序。只需从数据库中的文件加载数据。如果是这样,请删除标记java,然后删除用java实现的JDBC…如果您知道它与java无关,请不要污染标记,只需删除它即可。否则,它将为您可以添加的任何内容打开大门,例如NetBeans、Windows、Intel等等。。。这是无止境的。我希望你们现在能更好地理解我的观点,我的insert query state=active waiting=f在pg_stat_活动中也遇到了同样的问题。没有连接池的锁我肯定怀疑池逻辑中存在Java对象锁。但是,如果插入查询状态为活动状态,则PostgreSQL正在运行查询。这并不意味着在这一点上存在客户端问题。相反,我们可能会查看插入本身的性能。