Hi,
We have a WCF web service which uses Entity Framework as the ORM for data access.
The oracle database we are using is Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production.
The entity framework uses Oracle.DataAccess.dll to connect to the database. The Oracle.DataAccess version used is 2.112.3.0.
We are getting Memory leaks when making calls to Oracle database.
On investigation,
The hang dumps show that 4.35% to 8.33% of threads were blocked on OraOCIEI11!slgtd() calls.
2.20% of threads are blocked due to a leaked critical section (the thread owning the critical section is the one processing the OraOps11w!ssmem_free() call). The calls that are waiting are:
Oracle.DataAccess.Client.OpsDac.Dispose()
- Oracle.DataAccess.Client.OpsDac.Read()
We would like to know if calls waiting on OraOCIEI11 functions are expected?
Also we have another critical section in locked state with the owning thread processing the oracle call OraOCIEI11!slgtd().
We saw that the Oracle.DataAccess.Client.OracleDataReader.Read() method is taking time while retrieving Clob data from the database.
Also,
- Oracle.DataAccess.Client.OracleDataReader.Dispose calls OraOps11w!ssmem_free() that hasn’t returned. This method is being called internally by the Entity Framework after making use of the CompiledQuery Feature of EF.
Is this issue related to the dll version we are using?
Are there any methods we can try to avoid the leaked critical section and the memory leaks?
Any suggestions would be appreciated.
Regards,
Manish