Subject RE: [firebird-support] Re: Internal gds software consistency check
Author Miel Hostens
Adam,

I know this is maybe indeed not the right support page but my case is indeed
not "common" to any forum

I think you are right as when it comes to the cache memory overload, I
already checked the process explorer, what happens is that I does not appear
to use much of the cpu (max 4 %) but it indeed reaches a platform of about
200 MB memory use ( I have 4 GB RAM) and then returns the error.

I am indeed checking out if I totally disconnect from the datasets to make
sure I free the cache memory again.

Do you think lowering the DefaultDbCachePages is an option as well?

Anyway, thanx for reviewing my problem

Miel



Van: firebird-support@yahoogroups.com
[mailto:firebird-support@yahoogroups.com] Namens Adam
Verzonden: woensdag 11 februari 2009 23:23
Aan: firebird-support@yahoogroups.com
Onderwerp: [firebird-support] Re: Internal gds software consistency check



--- In firebird-support@yahoogroups.com
<mailto:firebird-support%40yahoogroups.com> , "mielhostens"
<mielhostens@...> wrote:
>
> Hi there,
>
> I already posted this remark some days ago but response was not big
> so i'll try it again,
>
> Any idea how to solve the problem of getting the error "Internal gds
> software consistency check" when looping via an application through
> firebird datasets and performing only 1 query on each dataset. I
> happens at a random dataset (query works on the specific dataset when
> tried seperatly). Adam already did a suggestion about page buffering
> but how can i solve this?

Well understand first that this is not a normal situation. Most people
here don't have experience sequentially connecting to thousands of
databases using the .NET driver.

Given what you have told us, I still suspect you are running out of
addressable memory; that is 2GB in a single 32 bit process.

Each connected database maintains a page cache. See
DefaultDbCachePages in firebird.conf

This sets the number of "pages" that Firebird will cache for each
connected database (which I believe can also be overridden on a per
database level). The size of each "page" is defined when you create
the database, but usually it is between 4KB and 16KB. So, presuming a
4K page size, and 2048 pages in memory, multiply them together and you
get somewhere around 8MB per database. There are also a whole host of
other factors that increase the memory requirements that I neither
understand nor particularly want to, just pointing out you are
probably in for *at least* 8MB per database.

It doesn't take too much math to figure out that after about 250
simultaneously connected databases, you are going to run over 2GB. Now
you say that you disconnect each database, but in truth, you are doing
something in .NET, and you may need to check in that list (
http://www.firebirdsql.org/index.php?op=lists - Firebird .NET driver )
that what you are doing is *completely* disconnecting from the databases.

The easiest way to confirm on a Windows platform would be to use
Process Explorer (
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx ). Find
the fb_server.exe process and watch the handles while your program is
running. Once each database is finished, it should disappear and the
memory should drop back down. If it keeps on rising, that is no doubt
your problem, and you need to ask on the Firebird .NET list how to
completely disconnect.

Adam





[Non-text portions of this message have been removed]