mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-28 10:41:12 +00:00
db: add metrics for short reads and memory used for results
Signed-off-by: Paweł Dziepak <pdziepak@scylladb.com>
This commit is contained in:
27
database.cc
27
database.cc
@@ -1813,6 +1813,27 @@ database::setup_collectd() {
|
||||
, "queue_length", "queued_reads_system_keyspace")
|
||||
, scollectd::make_typed(scollectd::data_type::GAUGE, [this] { return _system_read_concurrency_sem.waiters(); })
|
||||
));
|
||||
|
||||
_collectd.push_back(
|
||||
scollectd::add_polled_metric(scollectd::type_instance_id("database"
|
||||
, scollectd::per_cpu_plugin_instance
|
||||
, "bytes", "total_result_memory")
|
||||
, scollectd::make_typed(scollectd::data_type::GAUGE, [this] {
|
||||
return get_result_memory_limiter().total_used_memory();
|
||||
})
|
||||
));
|
||||
_collectd.push_back(
|
||||
scollectd::add_polled_metric(scollectd::type_instance_id("database"
|
||||
, scollectd::per_cpu_plugin_instance
|
||||
, "total_operations", "short_data_queries")
|
||||
, scollectd::make_typed(scollectd::data_type::DERIVE, _stats->short_data_queries)
|
||||
));
|
||||
_collectd.push_back(
|
||||
scollectd::add_polled_metric(scollectd::type_instance_id("database"
|
||||
, scollectd::per_cpu_plugin_instance
|
||||
, "total_operations", "short_mutation_queries")
|
||||
, scollectd::make_typed(scollectd::data_type::DERIVE, _stats->short_mutation_queries)
|
||||
));
|
||||
}
|
||||
|
||||
database::~database() {
|
||||
@@ -2413,6 +2434,9 @@ database::query(schema_ptr s, const query::read_command& cmd, query::result_requ
|
||||
++s->total_reads_failed;
|
||||
} else {
|
||||
++s->total_reads;
|
||||
auto result = f.get0();
|
||||
s->short_data_queries += bool(result->is_short_read());
|
||||
return make_ready_future<lw_shared_ptr<query::result>>(std::move(result));
|
||||
}
|
||||
return f;
|
||||
});
|
||||
@@ -2428,6 +2452,9 @@ database::query_mutations(schema_ptr s, const query::read_command& cmd, const qu
|
||||
++s->total_reads_failed;
|
||||
} else {
|
||||
++s->total_reads;
|
||||
auto result = f.get0();
|
||||
s->short_mutation_queries += bool(result.is_short_read());
|
||||
return make_ready_future<reconcilable_result>(std::move(result));
|
||||
}
|
||||
return f;
|
||||
});
|
||||
|
||||
@@ -1049,6 +1049,9 @@ private:
|
||||
uint64_t total_reads = 0;
|
||||
uint64_t total_reads_failed = 0;
|
||||
uint64_t sstable_read_queue_overloaded = 0;
|
||||
|
||||
uint64_t short_data_queries = 0;
|
||||
uint64_t short_mutation_queries = 0;
|
||||
};
|
||||
|
||||
lw_shared_ptr<db_stats> _stats;
|
||||
|
||||
@@ -49,18 +49,24 @@ namespace query {
|
||||
class result_memory_accounter;
|
||||
|
||||
class result_memory_limiter {
|
||||
const size_t _maximum_total_result_memory;
|
||||
semaphore _memory_limiter;
|
||||
public:
|
||||
static constexpr size_t minimum_result_size = 4 * 1024;
|
||||
static constexpr size_t maximum_result_size = 1 * 1024 * 1024;
|
||||
public:
|
||||
result_memory_limiter()
|
||||
: _memory_limiter(memory::stats().total_memory() / 10)
|
||||
: _maximum_total_result_memory(memory::stats().total_memory() / 10)
|
||||
, _memory_limiter(_maximum_total_result_memory)
|
||||
{ }
|
||||
|
||||
result_memory_limiter(const result_memory_limiter&) = delete;
|
||||
result_memory_limiter(result_memory_limiter&&) = delete;
|
||||
|
||||
ssize_t total_used_memory() const {
|
||||
return _maximum_total_result_memory - _memory_limiter.available_units();
|
||||
}
|
||||
|
||||
// Reserves minimum_result_size and creates new memory accounter.
|
||||
future<result_memory_accounter> new_read();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user