rrdengineapi.h 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_RRDENGINEAPI_H
  3. #define NETDATA_RRDENGINEAPI_H
  4. #include "rrdengine.h"
  5. #define RRDENG_MIN_PAGE_CACHE_SIZE_MB (8)
  6. #define RRDENG_MIN_DISK_SPACE_MB (64)
  7. #define RRDENG_NR_STATS (38)
  8. #define RRDENG_FD_BUDGET_PER_INSTANCE (50)
  9. extern int db_engine_use_malloc;
  10. extern int default_rrdeng_page_fetch_timeout;
  11. extern int default_rrdeng_page_fetch_retries;
  12. extern int default_rrdeng_page_cache_mb;
  13. extern int db_engine_journal_indexing;
  14. extern int db_engine_journal_check;
  15. extern int default_rrdeng_disk_quota_mb;
  16. extern int default_multidb_disk_quota_mb;
  17. extern struct rrdengine_instance *multidb_ctx[RRD_STORAGE_TIERS];
  18. extern size_t page_type_size[];
  19. extern size_t tier_page_size[];
  20. #define CTX_POINT_SIZE_BYTES(ctx) page_type_size[(ctx)->config.page_type]
  21. void rrdeng_generate_legacy_uuid(const char *dim_id, const char *chart_id, uuid_t *ret_uuid);
  22. void rrdeng_convert_legacy_uuid_to_multihost(char machine_guid[GUID_LEN + 1], uuid_t *legacy_uuid,
  23. uuid_t *ret_uuid);
  24. STORAGE_METRIC_HANDLE *rrdeng_metric_get_or_create(RRDDIM *rd, STORAGE_INSTANCE *db_instance);
  25. STORAGE_METRIC_HANDLE *rrdeng_metric_get(STORAGE_INSTANCE *db_instance, uuid_t *uuid);
  26. void rrdeng_metric_release(STORAGE_METRIC_HANDLE *db_metric_handle);
  27. STORAGE_METRIC_HANDLE *rrdeng_metric_dup(STORAGE_METRIC_HANDLE *db_metric_handle);
  28. STORAGE_COLLECT_HANDLE *rrdeng_store_metric_init(STORAGE_METRIC_HANDLE *db_metric_handle, uint32_t update_every, STORAGE_METRICS_GROUP *smg);
  29. void rrdeng_store_metric_flush_current_page(STORAGE_COLLECT_HANDLE *collection_handle);
  30. void rrdeng_store_metric_change_collection_frequency(STORAGE_COLLECT_HANDLE *collection_handle, int update_every);
  31. void rrdeng_store_metric_next(STORAGE_COLLECT_HANDLE *collection_handle, usec_t point_in_time_ut, NETDATA_DOUBLE n,
  32. NETDATA_DOUBLE min_value,
  33. NETDATA_DOUBLE max_value,
  34. uint16_t count,
  35. uint16_t anomaly_count,
  36. SN_FLAGS flags);
  37. int rrdeng_store_metric_finalize(STORAGE_COLLECT_HANDLE *collection_handle);
  38. void rrdeng_load_metric_init(STORAGE_METRIC_HANDLE *db_metric_handle, struct storage_engine_query_handle *rrddim_handle,
  39. time_t start_time_s, time_t end_time_s, STORAGE_PRIORITY priority);
  40. STORAGE_POINT rrdeng_load_metric_next(struct storage_engine_query_handle *rrddim_handle);
  41. int rrdeng_load_metric_is_finished(struct storage_engine_query_handle *rrddim_handle);
  42. void rrdeng_load_metric_finalize(struct storage_engine_query_handle *rrddim_handle);
  43. time_t rrdeng_metric_latest_time(STORAGE_METRIC_HANDLE *db_metric_handle);
  44. time_t rrdeng_metric_oldest_time(STORAGE_METRIC_HANDLE *db_metric_handle);
  45. time_t rrdeng_load_align_to_optimal_before(struct storage_engine_query_handle *rrddim_handle);
  46. void rrdeng_get_37_statistics(struct rrdengine_instance *ctx, unsigned long long *array);
  47. /* must call once before using anything */
  48. int rrdeng_init(struct rrdengine_instance **ctxp, const char *dbfiles_path,
  49. unsigned disk_space_mb, size_t tier);
  50. void rrdeng_readiness_wait(struct rrdengine_instance *ctx);
  51. void rrdeng_exit_mode(struct rrdengine_instance *ctx);
  52. int rrdeng_exit(struct rrdengine_instance *ctx);
  53. void rrdeng_prepare_exit(struct rrdengine_instance *ctx);
  54. bool rrdeng_metric_retention_by_uuid(STORAGE_INSTANCE *db_instance, uuid_t *dim_uuid, time_t *first_entry_s, time_t *last_entry_s);
  55. extern STORAGE_METRICS_GROUP *rrdeng_metrics_group_get(STORAGE_INSTANCE *db_instance, uuid_t *uuid);
  56. extern void rrdeng_metrics_group_release(STORAGE_INSTANCE *db_instance, STORAGE_METRICS_GROUP *smg);
  57. typedef struct rrdengine_size_statistics {
  58. size_t default_granularity_secs;
  59. size_t sizeof_datafile;
  60. size_t sizeof_page_in_cache;
  61. size_t sizeof_point_data;
  62. size_t sizeof_page_data;
  63. size_t pages_per_extent;
  64. size_t datafiles;
  65. size_t extents;
  66. size_t extents_pages;
  67. size_t points;
  68. size_t metrics;
  69. size_t metrics_pages;
  70. size_t extents_compressed_bytes;
  71. size_t pages_uncompressed_bytes;
  72. time_t pages_duration_secs;
  73. struct {
  74. size_t pages;
  75. size_t pages_uncompressed_bytes;
  76. time_t pages_duration_secs;
  77. size_t points;
  78. } page_types[256];
  79. size_t single_point_pages;
  80. time_t first_time_s;
  81. time_t last_time_s;
  82. size_t currently_collected_metrics;
  83. size_t estimated_concurrently_collected_metrics;
  84. size_t disk_space;
  85. size_t max_disk_space;
  86. time_t database_retention_secs;
  87. double average_compression_savings;
  88. double average_point_duration_secs;
  89. double average_metric_retention_secs;
  90. double ephemeral_metrics_per_day_percent;
  91. double average_page_size_bytes;
  92. } RRDENG_SIZE_STATS;
  93. struct rrdeng_cache_efficiency_stats {
  94. size_t queries;
  95. size_t queries_planned_with_gaps;
  96. size_t queries_executed_with_gaps;
  97. size_t queries_open;
  98. size_t queries_journal_v2;
  99. size_t currently_running_queries;
  100. // query planner output of the queries
  101. size_t pages_total;
  102. size_t pages_to_load_from_disk;
  103. size_t extents_loaded_from_disk;
  104. // pages metadata sources
  105. size_t pages_meta_source_main_cache;
  106. size_t pages_meta_source_open_cache;
  107. size_t pages_meta_source_journal_v2;
  108. // preloading
  109. size_t page_next_wait_failed;
  110. size_t page_next_wait_loaded;
  111. size_t page_next_nowait_failed;
  112. size_t page_next_nowait_loaded;
  113. // pages data sources
  114. size_t pages_data_source_main_cache;
  115. size_t pages_data_source_main_cache_at_pass4;
  116. size_t pages_data_source_disk;
  117. size_t pages_data_source_extent_cache; // loaded by a cached extent
  118. // cache hits at different points
  119. size_t pages_load_ok_loaded_but_cache_hit_while_inserting; // found in cache while inserting it (conflict)
  120. // loading
  121. size_t pages_load_extent_merged;
  122. size_t pages_load_ok_uncompressed;
  123. size_t pages_load_ok_compressed;
  124. size_t pages_load_fail_invalid_page_in_extent;
  125. size_t pages_load_fail_cant_mmap_extent;
  126. size_t pages_load_fail_datafile_not_available;
  127. size_t pages_load_fail_unroutable;
  128. size_t pages_load_fail_not_found;
  129. size_t pages_load_fail_invalid_extent;
  130. size_t pages_load_fail_cancelled;
  131. // timings for query preparation
  132. size_t prep_time_to_route;
  133. size_t prep_time_in_main_cache_lookup;
  134. size_t prep_time_in_open_cache_lookup;
  135. size_t prep_time_in_journal_v2_lookup;
  136. size_t prep_time_in_pass4_lookup;
  137. // timings the query thread experiences
  138. size_t query_time_init;
  139. size_t query_time_wait_for_prep;
  140. size_t query_time_to_slow_disk_next_page;
  141. size_t query_time_to_fast_disk_next_page;
  142. size_t query_time_to_slow_preload_next_page;
  143. size_t query_time_to_fast_preload_next_page;
  144. // query issues
  145. size_t pages_zero_time_skipped;
  146. size_t pages_past_time_skipped;
  147. size_t pages_overlapping_skipped;
  148. size_t pages_invalid_size_skipped;
  149. size_t pages_invalid_update_every_fixed;
  150. size_t pages_invalid_entries_fixed;
  151. // database events
  152. size_t journal_v2_mapped;
  153. size_t journal_v2_unmapped;
  154. size_t datafile_creation_started;
  155. size_t datafile_deletion_started;
  156. size_t datafile_deletion_spin;
  157. size_t journal_v2_indexing_started;
  158. size_t metrics_retention_started;
  159. };
  160. struct rrdeng_buffer_sizes {
  161. size_t workers;
  162. size_t pdc;
  163. size_t wal;
  164. size_t descriptors;
  165. size_t xt_io;
  166. size_t xt_buf;
  167. size_t handles;
  168. size_t opcodes;
  169. size_t epdl;
  170. size_t deol;
  171. size_t pd;
  172. size_t pgc;
  173. size_t mrg;
  174. #ifdef PDC_USE_JULYL
  175. size_t julyl;
  176. #endif
  177. };
  178. struct rrdeng_buffer_sizes rrdeng_get_buffer_sizes(void);
  179. struct rrdeng_cache_efficiency_stats rrdeng_get_cache_efficiency_stats(void);
  180. RRDENG_SIZE_STATS rrdeng_size_statistics(struct rrdengine_instance *ctx);
  181. size_t rrdeng_collectors_running(struct rrdengine_instance *ctx);
  182. bool rrdeng_is_legacy(STORAGE_INSTANCE *db_instance);
  183. #endif /* NETDATA_RRDENGINEAPI_H */