hamsterdb_stats.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2005-2010 Christoph Rupp (chris@crupp.de).
00003  *
00004  * This program is free software; you can redistribute it and/or modify it
00005  * under the terms of the GNU General Public License as published by the
00006  * Free Software Foundation; either version 2 of the License, or 
00007  * (at your option) any later version.
00008  *
00009  * See files COPYING.* for License information.
00010  */
00011 
00024 #ifndef HAM_HAMSTERDB_STATS_H__
00025 #define HAM_HAMSTERDB_STATS_H__
00026 
00027 #include <ham/hamsterdb.h>
00028 
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif 
00032 
00033 struct ham_statistics_t;
00034 typedef struct ham_statistics_t ham_statistics_t;
00035 
00036 
00045 typedef void ham_free_statistics_func_t(ham_statistics_t *self);
00046 
00052 #define HAM_STATISTICS_HIGH_WATER_MARK                0x7FFFFFFF /* could be 0xFFFFFFFF */
00053 
00071 #define HAM_FREELIST_SLOT_SPREAD   (16-5+1) /* 1 chunk .. 2^(SPREAD-1) chunks */
00072 
00073 /* -- equivalents of the statistics.h internal PERSISTED data structures -- */
00074 
00089 typedef struct ham_freelist_slotsize_stats_t 
00090 {
00091     ham_u32_t first_start;
00092 
00093     /* reserved: */
00094     ham_u32_t free_fill;
00095     ham_u32_t epic_fail_midrange;
00096     ham_u32_t epic_win_midrange;
00097 
00099     ham_u32_t scan_count;
00100 
00101     ham_u32_t ok_scan_count;
00102     
00104     ham_u32_t scan_cost;
00105     ham_u32_t ok_scan_cost;
00106 
00107 } ham_freelist_slotsize_stats_t;
00108 
00118 typedef struct ham_freelist_page_statistics_t
00119 {
00120     ham_freelist_slotsize_stats_t per_size[HAM_FREELIST_SLOT_SPREAD]; 
00121 
00131     ham_u32_t last_start;
00132 
00143     ham_u32_t persisted_bits;
00144 
00149     ham_u32_t insert_count;
00150     ham_u32_t delete_count;
00151     ham_u32_t extend_count;
00152     ham_u32_t fail_count;
00153     ham_u32_t search_count;
00154 
00155     ham_u32_t rescale_monitor;
00156 
00157 } ham_freelist_page_statistics_t;
00158 
00159 /* -- end of equivalents of the statistics.h internal PERSISTED data 
00160  * structures -- */
00161 
00165 typedef struct ham_runtime_statistics_globdata_t
00166 {
00168     ham_u32_t scan_count[HAM_FREELIST_SLOT_SPREAD];
00169     ham_u32_t ok_scan_count[HAM_FREELIST_SLOT_SPREAD];
00170     
00172     ham_u32_t scan_cost[HAM_FREELIST_SLOT_SPREAD];
00173     ham_u32_t ok_scan_cost[HAM_FREELIST_SLOT_SPREAD];
00174 
00176     ham_u32_t insert_count;
00177     ham_u32_t delete_count;
00178     ham_u32_t extend_count;
00179     ham_u32_t fail_count;
00180     ham_u32_t search_count;
00181 
00182     ham_u32_t insert_query_count;
00183     ham_u32_t erase_query_count;
00184     ham_u32_t query_count;
00185 
00186     ham_u32_t first_page_with_free_space[HAM_FREELIST_SLOT_SPREAD];
00187 
00282     ham_u32_t rescale_monitor;
00283 
00284 } ham_runtime_statistics_globdata_t;
00285 
00286 
00296 #define HAM_OPERATION_STATS_FIND           0
00297 #define HAM_OPERATION_STATS_INSERT         1
00298 #define HAM_OPERATION_STATS_ERASE          2
00299 
00301 #define HAM_OPERATION_STATS_MAX            3
00302 
00311 typedef struct ham_runtime_statistics_opdbdata_t
00312 {
00313     ham_u32_t btree_count;
00314     ham_u32_t btree_fail_count;
00315     ham_u32_t btree_cost;
00316     ham_u32_t btree_fail_cost;
00317         
00318     ham_offset_t btree_last_page_addr;
00319 
00324     ham_u32_t btree_last_page_sq_hits; 
00325 
00326     ham_u32_t query_count;
00327 
00328     ham_u32_t btree_hinting_fail_count;
00329     ham_u32_t btree_hinting_count;
00330 
00331     ham_u32_t aging_tracker;
00332 
00333 } ham_runtime_statistics_opdbdata_t;
00334 
00335 typedef struct ham_runtime_statistics_dbdata_t
00336 {
00337     /* find/insert/erase */
00338     ham_runtime_statistics_opdbdata_t op[HAM_OPERATION_STATS_MAX]; 
00339 
00356     ham_u32_t rescale_tracker;
00357 
00406     ham_key_t lower_bound;
00407     ham_u32_t lower_bound_index;
00408     ham_offset_t lower_bound_page_address;
00409     ham_bool_t lower_bound_set;
00410     ham_key_t upper_bound;
00411     ham_u32_t upper_bound_index;
00412     ham_offset_t upper_bound_page_address;
00413     ham_bool_t upper_bound_set;
00414 
00415 } ham_runtime_statistics_dbdata_t;
00416 
00448 struct ham_statistics_t
00449 {
00451     ham_size_t freelist_record_count;
00452 
00454     ham_size_t freelist_stats_maxalloc;
00455 
00457     ham_freelist_page_statistics_t *freelist_stats;
00458 
00460     ham_runtime_statistics_dbdata_t db_stats;
00461 
00463     ham_runtime_statistics_globdata_t global_stats;
00464 
00470     unsigned dont_collect_freelist_stats: 1;
00471 
00476     unsigned dont_collect_db_stats: 1;
00477 
00483     unsigned dont_collect_global_stats: 1;
00484 
00496     ham_free_statistics_func_t *_free_func;
00497 
00498     /* 
00499      * internal use: this element is set by hamsterdb and to be used by the 
00500      * @a _free_func callback.
00501      */
00502     void *_free_func_internal_arg;
00503 
00504 };
00505 
00529 HAM_EXPORT ham_status_t HAM_CALLCONV
00530 ham_clean_statistics_datarec(ham_statistics_t *stats);
00531 
00532 
00533 #ifdef __cplusplus
00534 } // extern "C"
00535 #endif 
00536 
00537 #endif /* HAM_HAMSTERDB_STATS_H__ */
00538 

Generated on Wed Apr 14 20:37:55 2010 for hamsterdb Embedded Database by  doxygen 1.6.1