Poor Update Performance using OracleDataAdapter
Posted: Fri 18 Oct 2013 15:52
Hi there,
I'm finding that I get extremely low update performance from dotConnect for oracle when performing a large number of updates (about 5500 rows of about 15-20 columns). The update takes around 100 seconds to complete whereas performing exactly the same process using ODP.net takes around 10!
After doing some digging I have determined that both ODP and dotConnect are issuing nearly identical DML statements so it doesn't appear to be Database or Oracle Client-related.
There does appear to be something odd in that when I call the OracleDataAdapter.Update(DataTable) method to apply my changes there occur many "handled" ArgumentExceptions originating in DevArt & Framework code for every row of data. This doesn't happen for ODP and I assume is where there is a large performance penalty.
This does seem to have been raised before and I've encountered it in both 7.8 and 8.0 of dotConnect for Oracle.
Any Ideas?
-Antony
Here are a couple of examples:
I'm finding that I get extremely low update performance from dotConnect for oracle when performing a large number of updates (about 5500 rows of about 15-20 columns). The update takes around 100 seconds to complete whereas performing exactly the same process using ODP.net takes around 10!
After doing some digging I have determined that both ODP and dotConnect are issuing nearly identical DML statements so it doesn't appear to be Database or Oracle Client-related.
There does appear to be something odd in that when I call the OracleDataAdapter.Update(DataTable) method to apply my changes there occur many "handled" ArgumentExceptions originating in DevArt & Framework code for every row of data. This doesn't happen for ODP and I assume is where there is a large performance penalty.
This does seem to have been raised before and I've encountered it in both 7.8 and 8.0 of dotConnect for Oracle.
Any Ideas?
-Antony
Here are a couple of examples:
Code: Select all
Message: "Input String was not in correct format"
Stak:
mscorlib.dll!System.Number.StringToNumber
mscorlib.dll!System.Number.ParseInt32
mscorlib.dll!string.System.IConvertible.ToInt32
mscorlib.dll!System.Convert.ChangeType
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleUtils.a
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleParameter.OracleDbType.set
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleParameter.DbType.set
System.Data.dll!System.Data.Common.DbCommandBuilder.CreateParameterForNullTest
System.Data.dll!System.Data.Common.DbCommandBuilder.BuildWhereClause
System.Data.dll!System.Data.Common.DbCommandBuilder.BuildUpdateCommand
System.Data.dll!System.Data.Common.DbCommandBuilder.RowUpdatingHandlerBuilder
System.Data.dll!System.Data.Common.DbCommandBuilder.RowUpdatingHandler
Devart.Data.dll!Devart.Common.DbCommandBuilder.RowUpdatingHandler
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleCommandBuilder.a
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleDataAdapter.OnRowUpdating
System.Data.dll!System.Data.Common.DbDataAdapter.Update
System.Data.dll!System.Data.Common.DbDataAdapter.UpdateFromDataTable
System.Data.dll!System.Data.Common.DbDataAdapter.Update
Message: Invalid cast from 'DateTime' to 'Int32'
Stack:
mscorlib.dll!System.DateTime.System.IConvertible.ToInt32
mscorlib.dll!System.Convert.ChangeType
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleUtils.a
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleParameter.OracleDbType.set
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleParameter.DbType.set
System.Data.dll!System.Data.Common.DbCommandBuilder.CreateParameterForNullTest
System.Data.dll!System.Data.Common.DbCommandBuilder.BuildWhereClause
System.Data.dll!System.Data.Common.DbCommandBuilder.BuildUpdateCommand
System.Data.dll!System.Data.Common.DbCommandBuilder.RowUpdatingHandlerBuilder
System.Data.dll!System.Data.Common.DbCommandBuilder.RowUpdatingHandler
Devart.Data.dll!Devart.Common.DbCommandBuilder.RowUpdatingHandler
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleCommandBuilder.a
Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleDataAdapter.OnRowUpdating
System.Data.dll!System.Data.Common.DbDataAdapter.Update
System.Data.dll!System.Data.Common.DbDataAdapter.UpdateFromDataTable
System.Data.dll!System.Data.Common.DbDataAdapter.Update