EsentTooManySortsException from GetColumnDictionary()

Apr 6 at 11:47 PM

I have an application using; the binary is unchanged and has been deployed many times (thousands of unique machines), yet on one customer's machine this error has started appearing:
Microsoft.Isam.Esent.Interop.EsentTooManySortsException: Too many sort processes
   at Microsoft.Isam.Esent.Interop.Api.Check(Int32 err)
   at Microsoft.Isam.Esent.Interop.Api.JetGetTableColumnInfo(JET_SESID sesid, JET_TABLEID tableid, String columnName, JET_COLUMNLIST& columnlist)
   at Microsoft.Isam.Esent.Interop.Api.GetColumnDictionary(JET_SESID sesid, JET_TABLEID tableid)
The perplexing thing is, since this started on one instance after running for several weeks. Now, even creating brand new, fresh instances on the same machine, we end up immediately receiving the same error.

I've searched online and can't find much background. The table schema is about as simple as you can imagine: just a key and a value column.

Any ideas? More info I can send? Thanks!

Apr 6 at 11:52 PM
Ah - the OS: Windows Server 2012 R2. Thanks!
Apr 7 at 3:10 AM
Too Many Sorts has to do with the number of temp tables currently open. The metadata enumeration uses temp tables to return the results. Is it possible that you have reduced the parameter of max temp tables?

Pardon the brevity-- I'm not at my computer at the moment. sounds old. Have you considered upgrading? :)

Apr 13 at 1:37 AM
Thank you for the reply, Martin. Sorry about the slow response here - for some reason I didn't get an email notification from the thread.

We'll definitely upgrade :-) I have sent a new build, against 1.9.4, to our customer, and will let you know the outcome. Thanks for the suggestion.

I don't think we've touched any parameters regarding temp tables. The schema in question only has two tables in it, one with two columns and one with three, so doesn't sound like a candidate, though I'll take a closer look at this.

Apr 18 at 5:49 PM
I didn't get a mail notification either! It's almost as if codeplex is shutting down... ;)

Temp Tables are used sometimes when you don't expect them:
  • Enumerating metadata (e.g. Api.GetTableIndexes
  • Creating indices on already-existing table