This discussion is archived
7 Replies Latest reply: Sep 25, 2012 3:32 AM by 963503 RSS

Memory leak in 11g ODP.NET (2.112.1.0)

897308 Newbie
Currently Being Moderated
I have code that works fine in ODP.NET (10.2.0.100) and Oracle 10g server. There is no memory leak. Because I tried to dispose everything every time when I done. The memory stays at 1.2G level while I read/write milliions records.

But the same code gave me momery leak when running in ODP.NET 2.112.1.0. I run my code in Windows 7 (32bit). Based on my watch from task manager, when the machine RAM reaches 2G, I don't see memory increasing any more. But after running for some time with that memory level (2G), it eventually throws out of memory exception.

Any one has any idea?
  • 1. Re: Memory leak in 11g ODP.NET (2.112.1.0)
    896131 Newbie
    Currently Being Moderated
    In the company I work the same problem happened. And since we checked, even in newer versions of ODP.NET the problem continues. To our knowledge this connected to the connection pool.

    As a solution had to disable the connection pool. Just insert the connection string token:; Pooling = false;. But is not the ideal solution because the system becomes slower to open connections. If you loop that are opening and closing connections the system will become much slower.

    Details on some systems written in C # our error does not occur with the same implementation.

    Check also that all objects that are used in the database are being released:

    OracleConnection = Dispose
    OracleCommand = Dispose
    OracleReader = Close and Dispose

    Edited by: 893128 on Nov 3, 2011 12:30 PM

    Edited by: 893128 on Nov 3, 2011 12:30 PM
  • 2. Re: Memory leak in 11g ODP.NET (2.112.1.0)
    897308 Newbie
    Currently Being Moderated
    I tried "pooling=false", but it doesn't seem to work for me. During the test, I still see memory usage keep increasing. I have one connection and keep reading/writing data using the same connection.
  • 3. Re: Memory leak in 11g ODP.NET (2.112.1.0)
    fuerstd Newbie
    Currently Being Moderated
    same problem here .. the memory usage on Win2008R2 with ODP.net (2.112.3.0) is about twice as high as with odp.net 10gR2 (2.102.2.20).
  • 4. Re: Memory leak in 11g ODP.NET (2.112.1.0)
    Alex_Keh - Oracle_Product_Manager Expert
    Currently Being Moderated
    If someone can give me a reproducible test case, I can file a bug for you. If the test case is difficult to reproduce, then I recommend opening up a support ticket to diagnose and fix the problem or provide you a fix if one is available.
  • 5. Re: Memory leak in 11g ODP.NET (2.112.1.0)
    955204 Newbie
    Currently Being Moderated
    I experienced the memory leak in 11g ODP.NET 2.112.3.0.

    The testbed for testing the memory leak consists of 75 threads and querying 500 rows in each thread.
    There were 6 columns of type CLOB in each row of the table.I created a simple console application with the above testbed.
    The memory leak were found in the following scenarios mentioned below.

    Type ODP.NET Version Oracle Server Finding
    DataReader 2.112.3.0 Oracle11g No Error
    DataReader 2.112.3.0 Oracle 10g OracleException:Memory could not be allocated
    DataSet 2.112.3.0 Oracle 11g System.OutOfMemoryException
    DataSet 2.112.3.0 Oracle 10g System.OutOfMemoryException



    The stack Trace of SystemOutOfMemoryException is as follows and points to OracleDataReader.


    System.String.CtorCharCount(Char c, Int32 count)\r\n at Oracle.DataAccess.Client.OracleDataReader.GetString(Int32 i)\r\n at Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i)\r\n at Oracle.DataAccess.Client.OracleDataReader.GetValues(Object[] values)\r\n at System.Data.ProviderBase.DataReaderContainer.CommonLanguageSubsetDataReader.GetValues(Object[] values)\r\n at System.Data.ProviderBase.SchemaMapping.LoadDataRow()\r\n at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)\r\n at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)\r\n at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)\r\n at Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)\r\n at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)\r\n at Oracle11gMemLeakAnalysis.DataAdaptor.GetDataTable(String query, OracleConnection DatabaseConnection) in D:\\Oracle11gMemLeakAnalysis\\Oracle11gMemLeakAnalysis\\DataAdaptor.cs:line 40\r\n at Oracle11gMemLeakAnalysis.DataAdaptor.RetriveDataTable(String query, OracleConnection DatabaseConnection) in D:\\Oracle11gMemLeakAnalysis\\Oracle11gMemLeakAnalysis\\DataAdaptor.cs:line 23\r\n at Oracle11gMemLeakAnalysis.Program.GetAllData() in D:\\Oracle11gMemLeakAnalysis\\Oracle11gMemLeakAnalysis\\Program.cs:line 71\r\n at Oracle11gMemLeakAnalysis.Program.LongRunningProcess(Object input) in D:\\Oracle11gMemLeakAnalysis\\Oracle11gMemLeakAnalysis\\Program.cs:line 46"



    Can someone help me how to solve this memory leack issue with ODP.NET 2.112.3.0
  • 6. Re: Memory leak in 11g ODP.NET (2.112.1.0)
    Alex_Keh - Oracle_Product_Manager Expert
    Currently Being Moderated
    I didn't find any open bugs specifically involving DataReader or LOBs that were still open for ODP.NET 11.2 in Oracle's Bug DB. That's not to say the bug you have is necessarily new and not fixed yet. The bug may exist and/or be fixed already, but may not be filed under ODP.NET. If a dependent component is causing the problem, such as OCI, then the bug would be filed under those components.

    First thing I would recommend is downloading the latest ODP.NET patch for 11.2.0.3 from My Oracle Support and see if the problem reproduces. If so, then open a service request with Oracle Support to have them diagnose, then provide a fix. It's virtually impossible to diagnose the root cause of a memory leak under high load via discussion forum.
  • 7. Re: Memory leak in 11g ODP.NET (2.112.1.0)
    963503 Newbie
    Currently Being Moderated
    Hi Alex,
    This is a folllow-up of the previous mail from 952201
    I have carried out the below steps to resolve the ODP.NET 11.2.0.3 MemLeak issue by installing Patach 14543813 on my my Windows 7 32-Bit PC:

    1.     Uninstalled earlier versions of ODP.NET.
    2.     Installed ODP.NET 11.2.0.3.
    3.     Ran my MemLeak Check app. From VS2010. This resulted in MemLeak & the System.OutOfMemoryException(). This was captured in a log file.
    4.     Installed 14543813 Patch.
    5.     After installation it was observed that there was a connection issue which was not there before.
    6.     On Comparing the directories of the earlier dir vs Patch dir, using WinDiff, these were the files that were added extra in the Patch version:
    i product\11.2.0\client_1\bin\oramts.dll
    ii.product\11.2.0\client_1\bin\oramts11.dll
    iii.product\11.2.0\client_1\bin\oraoledb11.dll
    iv.product\11.2.0\client_1\bin\oraoledb11us.dll
    v.product\11.2.0\client_1\bin\oraoledbgmr11.dll
    vi.product\11.2.0\client_1\bin\oraoledbpus11.dll
    vii.product\11.2.0\client_1\bin\oraoledbrfc11.dll
    viii. product\11.2.0\client_1\bin\oraoledbrmc11.dll
    ix.product\11.2.0\client_1\bin\oraoledbrst11.dll
    x.product\11.2.0\client_1\bin\oraoledbutl11.dll
    xi.product\11.2.0\client_1\bin\oraops11w.dll
    7.     Strangely the Oracle.DataAccess.dll remains the same before & after the Patch install.

    The Patch 14543813 was supposed to have fixed the Bug 10084752 (MEMORY LEAK USING ORACLEBULKCOPY). But to check the same the Oracle connection does not seem to work. I have followed all the installation steps correctly. Kindly point me in the right direction to resolve the connection issue.

    Thanks,
    Venkat

    Edited by: 960500 on Sep 25, 2012 3:27 AM

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points