00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef TABLE_STATISTICS
00027
00028 #define TABLE_STATISTICS
00029
00030 #include "struct_manager.h"
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 typedef struct {
00049 counter nBlocks;
00050 counter nAlloced;
00051 counter nFree;
00052 counter size;
00053 } NodeStats;
00054
00055 #define NodeStats_NumBlocks(NS) ( (NS).nBlocks )
00056
00057 #define NodeStats_NumAllocNodes(NS) ( (NS).nAlloced )
00058 #define NodeStats_NumFreeNodes(NS) ( (NS).nFree )
00059 #define NodeStats_NumUsedNodes(NS) ( (NS).nAlloced - (NS).nFree )
00060
00061 #define NodeStats_NodeSize(NS) ( (NS).size )
00062
00063 #define NodeStats_SizeAllocNodes(NS) ( NodeStats_NumAllocNodes(NS) \
00064 * NodeStats_NodeSize(NS) )
00065 #define NodeStats_SizeFreeNodes(NS) ( NodeStats_NumFreeNodes(NS) \
00066 * NodeStats_NodeSize(NS) )
00067 #define NodeStats_SizeUsedNodes(NS) ( NodeStats_NumUsedNodes(NS) \
00068 * NodeStats_NodeSize(NS) )
00069
00070
00071
00072
00073
00074 typedef struct {
00075 NodeStats hdr;
00076 counter ttlBkts;
00077 counter ttlUsedBkts;
00078 counter occupancy;
00079 counter bktSize;
00080 } HashStats;
00081
00082 #define HashStats_NumBlocks(HS) NodeStats_NumBlocks((HS).hdr)
00083
00084 #define HashStats_NumAllocHeaders(HS) NodeStats_NumAllocNodes((HS).hdr)
00085 #define HashStats_NumFreeHeaders(HS) NodeStats_NumFreeNodes((HS).hdr)
00086 #define HashStats_NumUsedHeaders(HS) NodeStats_NumUsedNodes((HS).hdr)
00087
00088 #define HashStats_HeaderSize(HS) NodeStats_NodeSize((HS).hdr)
00089
00090 #define HashStats_SizeAllocHeaders(HS) NodeStats_SizeAllocNodes((HS).hdr)
00091 #define HashStats_SizeUsedHeaders(HS) NodeStats_SizeUsedNodes((HS).hdr)
00092 #define HashStats_SizeFreeHeaders(HS) NodeStats_SizeFreeNodes((HS).hdr)
00093
00094 #define HashStats_NumBuckets(HS) ( (HS).ttlBkts )
00095 #define HashStats_NonEmptyBuckets(HS) ( (HS).ttlUsedBkts )
00096 #define HashStats_EmptyBuckets(HS) ( (HS).ttlBkts - (HS).ttlUsedBkts )
00097 #define HashStats_TotalOccupancy(HS) ( (HS).occupancy )
00098
00099 #define HashStats_BucketSize(HS) ( (HS).bktSize )
00100
00101 #define HashStats_SizeAllocBuckets(HS) ( HashStats_NumBuckets(HS) * \
00102 HashStats_BucketSize(HS) )
00103
00104 #define HashStats_SizeAllocTotal(HS) ( HashStats_SizeAllocHeaders(HS) + \
00105 HashStats_SizeAllocBuckets(HS) )
00106 #define HashStats_SizeUsedTotal(HS) ( HashStats_SizeUsedHeaders(HS) + \
00107 HashStats_SizeAllocBuckets(HS) )
00108 #define HashStats_SizeFreeTotal(HS) HashStats_SizeFreeHeaders(HS)
00109
00110
00111
00112
00113
00114 NodeStats subgoal_statistics(CTXTdeclc Structure_Manager *);
00115 NodeStats node_statistics(Structure_Manager *);
00116 HashStats hash_statistics(Structure_Manager *);
00117
00118
00119
00120
00121
00122
00123 #ifndef MULTI_THREAD
00124 #define CurrentTotalTableSpaceAlloc(BTN,BTHT,VARSF,PRODSF,CONSSF, \
00125 ALN,TSTN,TSTHT,TSI) \
00126 ( NodeStats_SizeAllocNodes(BTN) + HashStats_SizeAllocTotal(BTHT) + \
00127 NodeStats_SizeAllocNodes(VARSF) + NodeStats_SizeAllocNodes(PRODSF) + \
00128 NodeStats_SizeAllocNodes(CONSSF) + NodeStats_SizeAllocNodes(ALN) + \
00129 NodeStats_SizeAllocNodes(TSTN) + HashStats_SizeAllocTotal(TSTHT) + \
00130 NodeStats_SizeAllocNodes(TSI) )
00131
00132 #define CurrentTotalTableSpaceUsed(BTN,BTHT,VARSF,PRODSF,CONSSF, \
00133 ALN,TSTN,TSTHT,TSI) \
00134 ( NodeStats_SizeUsedNodes(BTN) + HashStats_SizeUsedTotal(BTHT) + \
00135 NodeStats_SizeUsedNodes(VARSF) + NodeStats_SizeUsedNodes(PRODSF) + \
00136 NodeStats_SizeUsedNodes(CONSSF) + NodeStats_SizeUsedNodes(ALN) + \
00137 NodeStats_SizeUsedNodes(TSTN) + HashStats_SizeUsedTotal(TSTHT) + \
00138 NodeStats_SizeUsedNodes(TSI) )
00139
00140 #else
00141
00142 #define CurrentTotalTableSpaceAlloc(BTN,BTHT,VARSF,PRODSF,CONSSF, \
00143 ALN,TSTN,TSTHT,TSI) \
00144 ( NodeStats_SizeAllocNodes(BTN) + HashStats_SizeAllocTotal(BTHT) + \
00145 NodeStats_SizeAllocNodes(VARSF) + NodeStats_SizeAllocNodes(PRODSF) + \
00146 NodeStats_SizeAllocNodes(CONSSF) + NodeStats_SizeAllocNodes(ALN) + \
00147 NodeStats_SizeAllocNodes(TSTN) + HashStats_SizeAllocTotal(TSTHT) + \
00148 NodeStats_SizeAllocNodes(TSI) )
00149
00150 #define CurrentTotalTableSpaceUsed(BTN,BTHT,VARSF,PRODSF,CONSSF, \
00151 ALN,TSTN,TSTHT,TSI) \
00152 ( NodeStats_SizeUsedNodes(BTN) + HashStats_SizeUsedTotal(BTHT) + \
00153 NodeStats_SizeUsedNodes(VARSF) + NodeStats_SizeUsedNodes(PRODSF) + \
00154 NodeStats_SizeUsedNodes(CONSSF) + NodeStats_SizeUsedNodes(ALN) + \
00155 NodeStats_SizeUsedNodes(TSTN) + HashStats_SizeUsedTotal(TSTHT) + \
00156 NodeStats_SizeUsedNodes(TSI) )
00157
00158 #define CurrentSharedTableSpaceAlloc(BTN,BTHT,VARSF,ALN) \
00159 ( NodeStats_SizeAllocNodes(BTN) + HashStats_SizeAllocTotal(BTHT) + \
00160 NodeStats_SizeAllocNodes(VARSF) + NodeStats_SizeAllocNodes(ALN) )
00161
00162 #define CurrentPrivateTableSpaceAlloc(BTN,BTHT,VARSF,PRODSF,CONSSF, \
00163 ALN,TSTN,TSTHT,TSI) \
00164 ( NodeStats_SizeAllocNodes(BTN) + HashStats_SizeAllocTotal(BTHT) + \
00165 NodeStats_SizeAllocNodes(VARSF) + NodeStats_SizeAllocNodes(PRODSF) + \
00166 NodeStats_SizeAllocNodes(CONSSF) + NodeStats_SizeAllocNodes(ALN) + \
00167 NodeStats_SizeAllocNodes(TSTN) + HashStats_SizeAllocTotal(TSTHT) + \
00168 NodeStats_SizeAllocNodes(TSI) )
00169
00170 #define CurrentSharedTableSpaceUsed(BTN,BTHT,VARSF,ALN) \
00171 ( NodeStats_SizeUsedNodes(BTN) + HashStats_SizeUsedTotal(BTHT) + \
00172 NodeStats_SizeUsedNodes(VARSF) + NodeStats_SizeUsedNodes(ALN) )
00173
00174 #define CurrentPrivateTableSpaceUsed(BTN,BTHT,VARSF,PRODSF,CONSSF, \
00175 ALN,TSTN,TSTHT,TSI) \
00176 ( NodeStats_SizeUsedNodes(BTN) + HashStats_SizeUsedTotal(BTHT) + \
00177 NodeStats_SizeUsedNodes(VARSF) + NodeStats_SizeUsedNodes(PRODSF) + \
00178 NodeStats_SizeUsedNodes(CONSSF) + NodeStats_SizeUsedNodes(ALN) + \
00179 NodeStats_SizeUsedNodes(TSTN) + HashStats_SizeUsedTotal(TSTHT) + \
00180 NodeStats_SizeUsedNodes(TSI) )
00181
00182 #endif
00183
00184
00185
00186
00187
00188 void print_detailed_tablespace_stats(CTXTdecl);
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199 void reset_maximum_tablespace_stats(void);
00200
00201
00202
00203 void compute_maximum_tablespace_stats(CTXTdecl);
00204 void update_maximum_tablespace_stats(NodeStats *btn, HashStats *btht,
00205 NodeStats *varsf, NodeStats *prodsf,
00206 NodeStats *conssf, NodeStats *aln,
00207 NodeStats *tstn, HashStats *tstht,
00208 NodeStats *tsi);
00209
00210
00211
00212
00213
00214 counter maximum_answer_list_nodes(void);
00215 counter maximum_timestamp_index_nodes(void);
00216 unsigned long maximum_total_tablespace_usage(void);
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231 typedef struct {
00232 struct {
00233 counter total;
00234 counter complete;
00235 struct {
00236 counter n;
00237 counter vrnt;
00238
00239 } producer;
00240 struct {
00241 counter total;
00242 counter entry;
00243
00244 } subsumed;
00245 } CallCI;
00246 struct {
00247 counter total;
00248 counter inserts;
00249 } AnsCI;
00250 counter consumption;
00251 counter identify;
00252
00253 } NumSubOps;
00254
00255 #define INIT_NUMSUBOPS { {0,0,{0,0},{0,0}}, {0,0}, 0, 0 }
00256 extern NumSubOps numSubOps;
00257
00258 #define NumSubOps_CallCheckInsert numSubOps.CallCI.total
00259 #define NumSubOps_CallToCompletedTable numSubOps.CallCI.complete
00260 #define NumSubOps_ProducerCall numSubOps.CallCI.producer.n
00261 #define NumSubOps_VariantCall numSubOps.CallCI.producer.vrnt
00262 #define NumSubOps_SubsumedCall numSubOps.CallCI.subsumed.total
00263 #define NumSubOps_SubsumedCallEntry numSubOps.CallCI.subsumed.entry
00264 #define NumSubOps_AnswerCheckInsert numSubOps.AnsCI.total
00265 #define NumSubOps_AnswerInsert numSubOps.AnsCI.inserts
00266 #define NumSubOps_AnswerConsumption numSubOps.consumption
00267 #define NumSubOps_IdentifyRelevantAnswers numSubOps.identify
00268
00269
00270 void reset_subsumption_stats(void);
00271 void print_detailed_subsumption_stats(void);
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285 #endif