将文件上载到Oracle DB时的性能问题

时间:2012-08-17 16:24:29

标签: oracle iis asp-classic vb6 oracle11g

请帮我解决这个问题:

它是一个文件上传系统(Classic ASP + VB6 Com +):用户将txt文件上传到Oracle DB。现在问题是系统在将数据上传到包含一些记录的表中时会挂起(大约500,000行,大小约40MB,不是很大)。如果我截断表格,则上传将成功完成。

上传逻辑:它读取文件,一次发送1000条记录到服务器,VB使用UPDATEBATCH通过ODBC提交插入。问题是它只提交前1000条记录。如果IIS中的ASP超时设置是默认的90秒,则会出现ASP超时消息错误。我将设置增加到更大的数字(9000),然后在插入前1000条记录后挂起。但是,这只发生在PROD上。我将表结构和数据从PROD复制到DEV,然后上传了相同的文件,它在DEV上工作正常。

这是表创建脚本:

CREATE TABLE TableA
(
  ID           NUMBER(12)               NOT NULL,
  ColA         NUMBER(12)               NOT NULL,
  ColB         NUMBER(5)                NOT NULL, 
  ColC         CHAR(2 BYTE), 
  ColD         VARCHAR2(2000 BYTE)
  ....
)
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   25
STORAGE    (
            INITIAL          24K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
            FLASH_CACHE      DEFAULT
            CELL_FLASH_CACHE DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;

非常感谢任何建议/帮助

1 个答案:

答案 0 :(得分:0)

跟踪在服务器上执行更新的会话并查看相应的等待事件。

可以通过设置10046事件来跟踪会话,同时连接到此会话并在开始加载过程之前。

alter session set events '10046 trace name context forever, level 12"

这将在服务器上创建可以分析的跟踪文件。这些文件存储在服务器上,因此您的DBA需要允许您访问这些文件。还存在其他选项,例如使用ASH,但无论如何,您的DBA应该知道此选项。