Subject Mysterious timeout of exactly 60 seconds
Author Daniel Albuschat
Hello there,

I'm doing some massive data restructuring on a table. The operation is
pretty simple, and the amount of datasets is about 800.000.
Imagine a table like this:

create table test
(
id integer not null,
id_maingroup integer,
id_subgroup integer,
title varchar(1024),
constraint primary key(id)
);

I do the following on this table:
There's one read-only transaction that selects all datasets from the table.
There's a second writeable transaction that updates some of the
selected records after they've been fetched and processed.

It's like this, in pseudo-code:

for select id, id_maingroup, id_subgroup, title from test do
begin
if (needsUpdate(dataset))
begin
statement.execute(update test set id_maingroup=x, id_subgroup=y,
title=z where id=?);
if thousand datasets have been processed
begin
transaction.commit;
transaction.start;
statement.prepare
end;
end;
end;

Every now and then, but in what seems a specific interval, the
execution of the update-statement takes exactly 60 seconds.
I suggest there's some timeout occuring here, but the application has
exclusive access to the database, so there are no concurrent
transactions besides the two this application creates.

Do you have any idea what is happening here?

Originally I used the Qt (Trolltech) database-classes for access, but
after being suspicious of incorrect transaction settings switched to
IBPP (www.ibpp.org), with nearly the same results. There's nothing to
be found in the firebird.log.

I'm really out of ideas and would appreciate some thoughts on this matter.

Kind regards,

Daniel Albuschat

--
eat(this); // delicious suicide