hamsterdb Embedded Database 1.1.13
|
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 00416 ham_bool_t last_insert_was_append; 00417 00419 ham_bool_t last_insert_was_prepend; 00420 00421 } ham_runtime_statistics_dbdata_t; 00422 00454 struct ham_statistics_t 00455 { 00457 ham_size_t freelist_record_count; 00458 00460 ham_size_t freelist_stats_maxalloc; 00461 00463 ham_freelist_page_statistics_t *freelist_stats; 00464 00466 ham_runtime_statistics_dbdata_t db_stats; 00467 00469 ham_runtime_statistics_globdata_t global_stats; 00470 00476 unsigned dont_collect_freelist_stats: 1; 00477 00482 unsigned dont_collect_db_stats: 1; 00483 00489 unsigned dont_collect_global_stats: 1; 00490 00502 ham_free_statistics_func_t *_free_func; 00503 00504 /* 00505 * internal use: this element is set by hamsterdb and to be used by the 00506 * @a _free_func callback. 00507 */ 00508 void *_free_func_internal_arg; 00509 00510 }; 00511 00535 HAM_EXPORT ham_status_t HAM_CALLCONV 00536 ham_clean_statistics_datarec(ham_statistics_t *stats); 00537 00538 00539 #ifdef __cplusplus 00540 } // extern "C" 00541 #endif 00542 00543 #endif /* HAM_HAMSTERDB_STATS_H__ */ 00544