System.Data.SQLite

Login
This project makes use of Eagle, provided by Mistachkin Systems.
Eagle: Secure Software Automation
Ticket Hash: 768ee11d7dcdc95025fb106972410b7acd14101e
Title: Execution of CREATE INDEX generates System.OutOfMemoryException
Status: Closed Type: Incident
Severity: Important Priority: Medium
Subsystem: Integration_Via_PInvoke Resolution: Not_A_Bug
Last Modified: 2011-12-12 11:04:04
Version Found In: 1.0.77.0
Description:
When executing the CREATE INDEX NonQuery in a table with almost 60 million records, system increases the memory and after some seconds the next error issues:

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was
 thrown.

   at System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo method, O
bject[] args, SignatureStruct& signature, RuntimeType declaringType)

   at System.RuntimeMethodHandle.InvokeConstructor(IRuntimeMethodInfo method, Ob
ject[] args, SignatureStruct signature, RuntimeType declaringType)

   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, B
inder binder, Object[] parameters, CultureInfo culture)

   at System.SecurityUtils.ConstructorInfoInvoke(ConstructorInfo ctor, Object[]
args)

   at System.Diagnostics.TraceUtils.GetRuntimeObject(String className, Type base
Type, String initializeData)

   at System.Diagnostics.TypedElement.BaseGetRuntimeObject()
   at System.Diagnostics.ListenerElement.GetRuntimeObject()
   at System.Diagnostics.ListenerElementsCollection.GetRuntimeObject()
   at System.Diagnostics.TraceInternal.get_Listeners()
   at System.Diagnostics.TraceInternal.WriteLine(String message)
   at System.Data.SQLite.SQLiteLog.LogEventHandler(Object sender, LogEventArgs e
)
   at System.Data.SQLite.SQLiteLog.LogCallback(IntPtr pUserData, Int32 errorCode
, IntPtr pMessage)
   at System.Data.SQLite.UnsafeNativeMethods.sqlite3_step(IntPtr stmt)
   at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
   at System.Data.SQLite.SQLiteDataReader.NextResult()
   at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavi
or behave)
   at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
   at Facilities.DB.LibSQLite.ExecNonQuery(String qry, Object[] args)
   at ttbsap.CmpExistenc.SetIndexesTTB()





The code is:

using (LibSQLite db = new LibSQLite(@"Data Source=inv.db3;"))

{

   using (SQLiteTransaction transac = db.BeginTransaction())

   {

      try

      {

         res = db.ExecNonQuery("CREATE INDEX ttb_1 on ttb(sts);");

         db.Commit();

      }

      catch (Exception ex)

      {

         System.Console.WriteLine("error");

      }

      finally

      {

         db.Dispose();

      }

   }

}

<hr /><i>mistachkin added on 2011-12-12 03:01:01 UTC:</i><br />
Is this issue new to version 1.0.77 or can it be reproduced with earlier versions?  Is the process actually running out of memory (or address space if it is a 32-bit process) at the point where the exception is thrown?


<hr /><i>anonymous added on 2011-12-12 06:25:47 UTC:</i><br />
Mistachkin, I am not sure if the problem is new in previous versions. However, I believe I found a possible cause, but I do not know why. Before reporting the problem, I uncompressed the file sqlite-netFx40-binary-Win32-2010-1.0.77.0.zip in a windows 7-64 bit and I explicitly compiled with processor "X86". The execution generated the error that I reported. The reason I generated in X86 is that I perceived it is a bit faster than X64 when loading data into the Sqlite database.

Some minutes ago, I replaced it by sqlite-netFx40-binary-X64-2010-1.0.77.0 and I compiled with processor "Any CPU". I executed the program and this time, no error was issued.

DO you have any explanation about this, before considering the ticked as fixed?
My best regards.

Vizcayno.


<hr /><i>mistachkin added on 2011-12-12 07:52:05 UTC:</i><br />
It's possible that the SQLite query you are attempting to execute is trying to allocate more than 2GB of memory.  This would exceed the amount of address space for a user-mode 32-bit process on Windows, causing an "out of memory" exception even when there is plenty of physical RAM available.


<hr /><i>anonymous added on 2011-12-12 11:04:04 UTC:</i><br />
Many, many thanks for your attention and help.