Subject | Re: Query is running slowly for the first time. |
---|---|
Author | un_spoken |
Post date | 2012-10-09T11:15:51Z |
> Ah, alright. Thought so. It has been discovered (and discussed a fewWill it be enough to put the query into the stored procedure with STARTDATE / STOPDATE parameters?
> weeks/months? ago) that preparing a query on largish tables can take a
> quite some time. I can't recall the outcome of the discussion at the
> moment, but I think the recommendation is to strictly use prepared
> queries and re-use them and/or have some sort of a prepared statement
> cache at the client-side.
> Another questionable setting is a page size of 4K. Especially with yourHere are the stats:
> huge table, my chrystal ball tells me, that indexes on that table might
> have an index depth > 3, which is not good. Run gstat -r -i and check
> out the index depth. You can also send me the output privately, if you like.
Database "E:\7\777.FDB"
Database header page information:
Flags 0
Checksum 12345
Generation 2658
Page size 4096
ODS version 11.2
Oldest transaction 2641
Oldest active 2642
Oldest snapshot 2642
Next transaction 2646
Bumped transaction 1
Sequence number 0
Next attachment ID 6
Implementation ID 26
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Oct 4, 2012 8:57:47
Attributes force write
Variable header data:
Sweep interval: 20000
*END*
Database file sequence:
File E:\7\777.FDB is the only file
Analyzing database pages ...
TASK (205)
Primary pointer page: 693, Index root page: 694
Average record length: 182.34, total records: 56321425
Average version length: 0.00, total versions: 0, max versions: 0
Data pages: 3155184, data page slots: 3155184, average fill: 87%
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 3155183
Index IDX_IDS_DATE_RA (13)
Depth: 4, leaf buckets: 84402, nodes: 56321425
Average data length: 0.06, total dup: 56095180, max dup: 3416489
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 0
60 - 79% = 1
80 - 99% = 84401
Index IDX_TASK_IDCONTRACT (10)
Depth: 3, leaf buckets: 82924, nodes: 56321425
Average data length: 0.00, total dup: 56321424, max dup: 56321424
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 0
60 - 79% = 1
80 - 99% = 82923
Index IDX_TASK_IDRFID (11)
Depth: 3, leaf buckets: 82924, nodes: 56321425
Average data length: 0.00, total dup: 56321424, max dup: 56321424
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 0
60 - 79% = 1
80 - 99% = 82923
Index IDX_TASK_IDSHEDULE (9)
Depth: 3, leaf buckets: 83101, nodes: 56321425
Average data length: 0.01, total dup: 56152049, max dup: 13102888
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 0
60 - 79% = 1
80 - 99% = 83100
Index IDX_TASK_RA_IDC_NN (14)
Depth: 4, leaf buckets: 100214, nodes: 56321425
Average data length: 1.03, total dup: 41870112, max dup: 1848518
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 1
60 - 79% = 0
80 - 99% = 100213
Index IDX_TASK_RFID_CODE (12)
Depth: 3, leaf buckets: 83185, nodes: 56321425
Average data length: 0.01, total dup: 56321424, max dup: 56321424
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 0
60 - 79% = 1
80 - 99% = 83184
Index PK_TASK (0)
Depth: 4, leaf buckets: 97215, nodes: 56321425
Average data length: 1.01, total dup: 0, max dup: 0
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 0
60 - 79% = 1
80 - 99% = 97214
Index TASK_DODATE_A (1)
Depth: 3, leaf buckets: 83062, nodes: 56321425
Average data length: 0.01, total dup: 56321083, max dup: 4510863
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 83062
Index TASK_DODATE_D (2)
Depth: 3, leaf buckets: 83062, nodes: 56321425
Average data length: 0.01, total dup: 56321083, max dup: 4510863
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 83062
Index TASK_IDCLIENT_A (3)
Depth: 3, leaf buckets: 85451, nodes: 56321425
Average data length: 0.17, total dup: 47105057, max dup: 2002164
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 1
60 - 79% = 0
80 - 99% = 85450
Index TASK_IDCLIENT_D (4)
Depth: 3, leaf buckets: 85935, nodes: 56321425
Average data length: 0.17, total dup: 47105057, max dup: 2002164
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 85934
Index TASK_IDLOCATION_A (5)
Depth: 3, leaf buckets: 85458, nodes: 56321425
Average data length: 0.17, total dup: 47103478, max dup: 2005487
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 1
60 - 79% = 0
80 - 99% = 85457
Index TASK_IDLOCATION_D (6)
Depth: 3, leaf buckets: 85929, nodes: 56321425
Average data length: 0.17, total dup: 47103478, max dup: 2005487
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 0
60 - 79% = 1
80 - 99% = 85928
Index TASK_RECORD_ACTIVE_A (7)
Depth: 3, leaf buckets: 82932, nodes: 56321425
Average data length: 0.00, total dup: 56321423, max dup: 39119519
Fill distribution:
0 - 19% = 0
20 - 39% = 1
40 - 59% = 0
60 - 79% = 0
80 - 99% = 82931
Index TASK_RECORD_ACTIVE_D (8)
Depth: 3, leaf buckets: 82932, nodes: 56321425
Average data length: 0.00, total dup: 56321423, max dup: 39119519
Fill distribution:
0 - 19% = 0
20 - 39% = 1
40 - 59% = 0
60 - 79% = 0
80 - 99% = 82931
> Increasing the page size will reduce the index depth for largishI've never done that before. So I am firsty backing up my database and druing restore I have an option to setup this?
> indexes. Changing the page size can be done via a backup/restore cycle
> with gbak.
> I have an excel sheet, which calculates the approx. RAM usage based onI will tell you for my both configurations, one is developer machine and second is the server machine. Please run your magic formulas for both of the configurations:)
> different settings and environment pre-requisites. So, if you tell me
> the following variables:
> RAM available for FirebirdBy RAM available for Firebird you mean total RAM of the systems? I assume that here.
DevMachine: 8 GB, Server: 8 GB
> Number of Firebird server instances1 server instance on both of the systems.
> AVG number of databases per Firebird server instance1 database per instance on both of the systems
> Approx. AVG number of connections per databaseIt is a bit hard for me to determine...because I do not know if I think correctly here... On both systems we have classic server instance. So when I see fb_inter_server.exe that means we have one connection per proccess? Or can I have multiple connections inside this one proccess? (Those processess are spawning threads which can connect to a database simultanously). So I need to make an assumption here also.
DevMachine 2 connetions, Server 20 connections.
> >As I've mentioned earlier I've restarted Firebird (without restarting machine) and after this, query was running fast.
> > What is interesing: I need to restart my machine to recreate the slow execution time.
>
> Or unpreparing the query and/or disconneting in case of Classic to purge
> the local per-connection page cache.
Thank you Tomas!:)