请教,往数据库中插入记录某张表速度很慢,而且越来越慢是何原因?代码我检查过,很简单,应该不会出现什么内存泄露什么的问题。

解决方案 »

  1.   

    最后一句话什么意思可否说的具体点。数据量也就10W条左右吧。要插入的这个表有一个主键还有一个unique。另外,我是从一个数据库导入到另一个数据库的,在代码中是先将记录取出放到记录集中的。我想是不是如果按分页的方法,一部分一部分的分批次取到记录集中,分批地导入到目的表中,这样会改善点。但是我感觉这个数据量也不大啊。代码部分看起也不大有问题的感觉
      

  2.   

    另外,我用360的流量监控软件打开发现一个现象
    程序名称   上传速度   下载速度
    TNSLSNR    23K/S      8.4M/S
    我的程序   8.4M/S     23k/S这个流量速度正常不正常
      

  3.   

    你通过这个SQL监控下该session占用的内存是不是超过了200MB
    select * FROM v$sesstat a,v$statname b WHERE a.statistic#=b.statistic# AND NAME LIKE '%mem%' and sid=<sid>然后检查v$sort_usage表看该session是不是使用到了临时段来存储中间数据。如果都查出结果的话,表明那条SQL已经占用太多内存,所以改用磁盘空间来读写,速度将会变慢,这时可以考虑调整_pga_max_size参数或优化sql
      

  4.   

    能否具体些楼上的,ORACLE不是太熟。另外,SID如何获取
      

  5.   

    sid的定位不太容易讲清楚,你可以试着在那条SQL运行的时候执行下面语句,在得出的结果集里找一下:
    select a.sid,a.sql_id,b.sql_text FROM v$session a,v$sqlarea b WHERE a.sql_id=b.sql_id
    当然,更粗暴的办法是啥都不管,直接执行 alter system set "_pga_max_size"=400M,然后再运行SQL看速度有没有提高
      

  6.   

    把你的代码扔了,改用db_link导入数据或者直接用impdp/expdp
      

  7.   

    我在PLSQL中的SESSION中看到了这个SESSION,ID好像是138,用你第一个SQL执行看了下,结果如下
    1 138 20 301852 20 session uga memory 1 1856888586
    2 138 21 301852 21 session uga memory max 1 3840343119
    3 138 25 640728 25 session pga memory 1 4148600571
    4 138 26 5359320 26 session pga memory max 1 507777907
    5 138 164 0 164 redo k-bytes read (memory) 2 399143205
    6 138 166 0 166 redo k-bytes read (memory) by LNS 2 3857180019
    7 138 439 0 439 workarea memory allocated 64 2433935387
    8 138 462 10 462 sorts (memory) 64 2091983730
      

  8.   

    alter system set "_pga_max_size"=1024M我刚才执行了这个语句,貌似效果不大。我现在在改用分页的方法来试验下。
      

  9.   

    从oracle到oracle导入,还是数据泵吧。