Cached data after Printing a report -speed issue.
Hi,
A few months ago I asked if you had any clue why the system was so slow in
opening a report in Design/Print after another report was run.
Since I've now managed to run RB with source in debug mode, I've figured out
why it sometimes took >60 seconds to clear up the "cache" after a previous
report.
It is because *All tables* available for the users are created as TdaTables.
These are not unloaded when a Print Preview is closed. For some reason it
seems they are not loaded in Design mode either (until you work in the
data-tab, trying to select a table).
The idea of a cache would be to speed things up, right?
It is not a cache system to speed things up, because the next time around
when you do a print preview (even if it's the same report), all these
objects are freed, and then re-loaded.
Is it necessesary, during a Print Preview to load all tables that the
Database user can get access to?
Couldn't only the ones that are used in the report get loaded?
Is there any other way to speed this up?
Our Database is *very* big. Probably something like 8000 tables. These are
separated on something like 70 schemas. When we try to use RB with a user
that is DBA, it get's very slow.
Another fun fact is that it takes <30seconds to load all the TdaTables, but
+ with the abour 8000 tables, our application grows with 30 Mb, wich is not
released until you exit the application or open a report in design-time.
Best Regards,
Paul Wiik,
Lynx Technologies
A few months ago I asked if you had any clue why the system was so slow in
opening a report in Design/Print after another report was run.
Since I've now managed to run RB with source in debug mode, I've figured out
why it sometimes took >60 seconds to clear up the "cache" after a previous
report.
It is because *All tables* available for the users are created as TdaTables.
These are not unloaded when a Print Preview is closed. For some reason it
seems they are not loaded in Design mode either (until you work in the
data-tab, trying to select a table).
The idea of a cache would be to speed things up, right?
It is not a cache system to speed things up, because the next time around
when you do a print preview (even if it's the same report), all these
objects are freed, and then re-loaded.
Is it necessesary, during a Print Preview to load all tables that the
Database user can get access to?
Couldn't only the ones that are used in the report get loaded?
Is there any other way to speed this up?
Our Database is *very* big. Probably something like 8000 tables. These are
separated on something like 70 schemas. When we try to use RB with a user
that is DBA, it get's very slow.
Another fun fact is that it takes <30seconds to load all the TdaTables, but
+ with the abour 8000 tables, our application grows with 30 Mb, wich is not
released until you exit the application or open a report in design-time.
Best Regards,
Paul Wiik,
Lynx Technologies
This discussion has been closed.
Comments
When you log in as the DBA, are you going to need access to all 8000 tables
when you run ReportBuiler? If not, you could perhaps create a
DataDictionary component that filters out the tables you will be using. The
DataDictionary will only use the tables you select for it and their names
will be stored in another table on your database. This would dramatically
reduce the time it took to load a report.
--
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
Thanks,
We haven't started utilizing the Data Dictionary yet, and I wasn't aware
that it also kept track of what tables to make available (thought it to be
only on field level). I was planning to modify daDOA.pas to only retrieve
"user_tables" instead of "all_tables", but your solution sounds much better.
Best Regards,
Paul
In fact, if you are using SQL as the database engine, you can simply query
the sysobjects table for the desired tables and fields. You don't even have
to setup special tables for this. The joins table is going to be a big plus
as it allows the users to not have to worry about the join fields, etc. In
fact, it has been helpful to me (time saver). I highly recommend using the
ppDictionary from the beginning.
Good Luck,
Bob Tucker