db: add metrics for short reads and memory used for results

Signed-off-by: Paweł Dziepak <pdziepak@scylladb.com>
This commit is contained in:
Paweł Dziepak
2016-11-29 15:24:58 +00:00
parent ba51e7e8db
commit cfd4d0f680
3 changed files with 37 additions and 1 deletions

View File

@@ -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;
});

View File

@@ -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;

View File

@@ -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();