在做一个历史数据系统,每秒采样一次,将数据记录进oracle数据库。机器环境为solaris10,数据库环境为10g,编程语言为c使用OCI连接数据库。由于数据量比较大,每秒约插入2000条记录,所以用绑定变量组织sql语句。
问题是,发现程序每运行大约20s,就会在某次OCIStmtExecute时等上约3s的时间。小弟接触OCI时间不长,实在找不到问题所在,各位大虾帮帮忙啦,指点下,感谢啊
问题是,发现程序每运行大约20s,就会在某次OCIStmtExecute时等上约3s的时间。小弟接触OCI时间不长,实在找不到问题所在,各位大虾帮帮忙啦,指点下,感谢啊
解决方案 »
- 急!!!!!!!!imp
- -- 同志们:尽量让你的查询走索引吧! --
- 线程挂死,查看堆栈莫名看到oracle的一堆skgesig_sigactionHandler () 信息,不知谁有经验?
- ora-12154:tns:无法处理服务名错误
- 求vb6 sql 语句--oracle xml问题
- 关于oracle数据库中视图的问题,能否对建立的视图(虚表)中某条记录进行删除和修改操作吗?各位大侠指点一下啊,不能的话有没有什么解决
- ORA-01033:ORACLE initialization or shutdown in progress
- 高分请教,请帮忙写一个存储过程
- 关于ORA连接的问题。请教高手!
- 怎样将excel和text文本中的数据分别导入oracel数据库中的表?
- MSSQL如何转为ORACLE
- 请教一个sql怎么去写Oracle
你可以在程序中做下批量提交,比如每1000条~10000条用程序显式commit一下。java的preparedstatement有executeBatch的提交,不知道oci是否也支持这样的?
下面是我的OCI相关代码连接数据库语句:
OCIServerAttach(pOraEnv->srvhp, pOraEnv->errhp,(text *)pDbCon->dbname, strlen(pDbCon->dbname),OCI_DEFAULT)
OCILogon(pOraEnv->envhp,pOraEnv->errhp,&pOraEnv->svchp,(text *)pDbCon->username,strlen(pDbCon->username),(text *)pDbCon->passwd,strlen(pDbCon->passwd),(text *)pDbCon->dbname,strlen(pDbCon->dbname)); 执行sql用的语句:
OCIStmtExecute(pOraEnv->svchp, pOraEnv->stmthp, pOraEnv->errhp, 1, 0, NULL, NULL, OCI_DEFAULT|OCI_COMMIT_ON_SUCCESS); 也试过用下面的语句去修改非阻塞模式,好像也没什么用。
OCIAttrSet(pOraEnv->srvhp, OCI_HTYPE_SERVER,0, (ub4)0, OCI_ATTR_NONBLOCKING_MODE, pOraEnv->errhp) 因为我在OCIStmtExecute的时候带上了OCI_COMMIT_ON_SUCCESS,按理说,应该是已经commit过了。
insert into xxx values(:1, :2 , :3, :4, :5, :6 , :7, :8, :9, :10); 手动检查程序出现等待时候的cpu率,基本上idle都是90以上,oracle的cpu占用率保持在1.5以下。不像是有资源争用
http://club.cyworld.com.cn/board/view.php?clubid=202000036487&postid=158679
查看了v$session_wait视图才发现问题。
最后resize数据库log文件解决。
详见http://blog.chinaunix.net/u2/87101/showart.php?id=2180022