用c++ occi连接oracle数据库。做压力测试,要插入2万条数据,做过如下测试:
1. 直接insert, 用时3秒。
2. 每次insert后commit,用时3分钟。
3. 调用存储过程(存储过程中加commit和不加commit)用时3分钟。
4. 循环调用2万次空的存储过程 用时2秒钟。
5. 直接运行存储过程循环2万次insert,用时10秒。现在的目的是能让底层语言尽快的insert数据。请遇到此问题高手们告之。出现问题的原理及解决方法。目前怀疑是否oracle有保护机制,对外来流数据有加锁功能导致超时。

解决方案 »

  1.   

    建议用循环,每插入100条就commit
      

  2.   

    因为要用到实时数据。每一条就需要commit一次。
    程序可以保证没问题。没有过多的冗余。
      

  3.   

    1 程序中要用绑定变量
    2 每insert一次commit一次肯定是不合适的,效率很低
      

  4.   

    insert 语句绑定变量,每500条或是1000条提交一次。绑定变量。就是SQL语句可以写成变理绑定的方式传弟参数。减少oracle 对SQL的解析。insert into table values(:1,:2,:3)
      

  5.   

    C++的话入库用sqloader 更好。更直接。生成好sqloader文件,直接调一下就完事了。2W数据。只是小数据.
      

  6.   

    绑定变量会比较省资源。减少数据库的解析次数。我给他个建议。如果是C++来处理2W多数据的入库操作。如果您的程序要一直都做一样的指量操作。Sqloader 很适合您。我们的很多C++平台都用的Sqloader入库的。
      

  7.   

    /*+append*/ 是个方法,速度能有所提高。
    如果是插入一行,就commit的话,效率肯定低下,事务的处理是十分耗资源的。