On 10/4/07, Howard Chu <[EMAIL PROTECTED]> wrote:
>
> Pierangelo Masarati wrote:
> > Suhel Momin wrote:
> >> I have made changes to keep log in memory using DB_LOG_INMEMORY flag.
> >> The log size is kept 10MB.
> >> Now when I try to add 64K entries,  65526 entries get added but 65527th
>
> >> entry always fails.
> >> The error I get is "Index Generation Failed".
> >> I tried to debug the issue and found that the  cursor->c_del function
> in
> >> bdb_idl_insert_key  fails returning an error code as
> DB_LOG_BUFFER_FULL.
> >>
> >> Am I missing something or is this a known problem?
> >> Do I need to do anything more while keeping logs in memory?
> >
> > Have you read Berkeley documentation about DB_LOG_INMEMORY?  This is the
>
> > expected result of creating an in-memory buffer smaller than the size of
> > the largest transaction you want to create.  Either use a larger buffer,
> > or write smaller chunks.  And read the docs
> > <
> http://www.oracle.com/technology/documentation/berkeley-db/db/articles/inmemory/C/index.html
> >.
>
> In this case they cannot write smaller chunks, it's purely a function of
> how
> we generate indexes. When an index slot gets to about 65536 elements we
> delete
> that list and replace it with a 3-element range. This delete operation
> consumes a great deal of log space.
>
> The solution of course is to use a larger buffer.
>

I tried to make the value of BDB_IDL_LOGN to be 20 instead of 16. This
changes the value of
BDB_IDL_DB_MAX.  It looks like this change has solved my problem of "index
generation failed" while keeping logs in memory.

Is this the right way to go about or should I still go with increasing the
buffer size for logs??

Regards,
Suhel

Reply via email to