【问题标题】:Oracle PL/SQL - a procedure called by some other team to insert data. Procedure is being called from JavaOracle PL/SQL - 由其他团队调用的用于插入数据的过程。正在从 Java 调用过程
【发布时间】:2015-07-30 04:33:03
【问题描述】:

过程的内容 - 只有两个通过 IN 参数插入的直接插入语句。 当必须插入一行时,该过程将每秒执行一次。这是一种充电。如果您充值,详细信息将由其他团队通过 java (callable statement) 发送给我们。通常当 CPU 较低时,我们可以看到该过程的 10-15 个会话(在 v$session 中)并且数据将被完美插入。当 CPU 有点高时,我们可以一次看到 80-90 个会话,每个会话在 2.3 秒后失效。在其他系统的java中插入需要时间并最终超时。

我希望我已经说明了这一点。 有没有其他方法可以纠正这个问题。除了通过程序。我尝试在 pl/sql 中使用 RECORD 概念,但实际上什么也没发生。

我的程序看起来像这样。

create procedure procedure_name (co1 IN varchar , col2 IN vvarchar.... col15 IN varchar)
x varchar2,
y varchar2,
z varchar2,
.
.
.
begin
x:=col1;
y:=col2;
.
.
.
insert into table1 (column1, column2 ,...) values (x,y,z..); commit;

if (x=15) then

insert into table2(column1,column2,..) values (x,y,z); commit;
exception
when others
..
end;

【问题讨论】:

  • 我认为这更像是数据库配置问题而不是代码问题。
  • 为什么在插入之前将 col1 分配给不同的变量名?当然你可以写insert into table1 values (col1, col2, col3...);

标签: java plsql plsqldeveloper database-tuning


【解决方案1】:

java 连接应该被池化以避免这样的不便。可能您的数据库一次无法容纳这么多的连接,因为她可以访问的内存是有限的。

根据您的 Java 架构,您应该了解如何将连接池化以避免每个用户拥有一个连接。或许你可以从这里开始:http://docs.oracle.com/cd/B10500_01/java.920/a96654/connpoca.htm

否则,您的问题似乎是针对 DBA 的。你试过在https://dba.stackexchange.com/上问吗?

祝你好运 - 现在我认为无论如何你都能找到改善用户体验的方法。

【讨论】:

    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多