Oracle Pro*C Bulk Merge of records in C using host arrays degrading performance with increased volume

≡放荡痞女 提交于 2019-12-12 06:31:54

问题


Using Oracle 11g Pro*C in C, I am using host arrays for managing bulk merge into DB table as per following example:

merge into TBL_NM A 
using (select 1 from dual) B 
on (col1 = to_date(:v,'YYMMDD') and col2 = :v and col3 = :v and col4 = :v) 
when matched then 
update set col5 = :v, col2 = col2+ :v, col3 = col3 + :v 
when not matched then  
insert (col1, col2, col3, col4, col5, col6, col7, col8) 
values (to_date(:v,'YYMMDD'),:v,:v,:v,:v,:v,:v,:v)

My first Question is: whether this way of bulk merge better than running query first to get the rowid and then if not found, insert and update otherwise. I found discussions here: Oracle Merge vs Select then Insert or Update and got the idea that merge is better than query then insert or update.

My second question is that I am observing degrading performance when volume increases. It takes more time to merge with higher volumes compared to DB having lower volume of data. Can this be fine tuned to make better performance and not to degrade performance with increased volume?

What are the possibilities of improvement within Pro*C boundary?

From http://www.dba-oracle.com/t_append_upsert_merge_sql.htm, it seems using the APPEND hint with the MERGE (upsert) SQL would be better? Please share your views.

来源:https://stackoverflow.com/questions/42167241/oracle-proc-bulk-merge-of-records-in-c-using-host-arrays-degrading-performance

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!