Cache the local server statistics object
By storing the server statistics object in side the session, the lookup involved in getting a worker-local value is avoided. Since the lookup is done multiple times for a single query, it is beneficial to store it in the session. As the worker-local value is never deleted, it is safe to store a reference to it in the session. It is also never updated concurrently so no atomic operations are necessary.
This commit is contained in:
@ -477,8 +477,8 @@ bool RWSplitSession::route_session_write(GWBUF* querybuf, uint8_t command, uint3
|
||||
{
|
||||
nsucc += 1;
|
||||
mxb::atomic::add(&backend->server()->stats.packets, 1, mxb::atomic::RELAXED);
|
||||
m_router->server_stats(backend->server()).total++;
|
||||
m_router->server_stats(backend->server()).read++;
|
||||
m_server_stats[backend->server()].total++;
|
||||
m_server_stats[backend->server()].read++;
|
||||
|
||||
if (expecting_response)
|
||||
{
|
||||
@ -853,7 +853,7 @@ SRWBackend RWSplitSession::handle_slave_is_target(uint8_t cmd, uint32_t stmt_id)
|
||||
if (target)
|
||||
{
|
||||
mxb::atomic::add(&m_router->stats().n_slave, 1, mxb::atomic::RELAXED);
|
||||
m_router->server_stats(target->server()).read++;
|
||||
m_server_stats[target->server()].read++;
|
||||
mxb_assert(target->in_use() || target->can_connect());
|
||||
}
|
||||
else
|
||||
@ -990,7 +990,7 @@ bool RWSplitSession::handle_master_is_target(SRWBackend* dest)
|
||||
if (target && target == m_current_master)
|
||||
{
|
||||
mxb::atomic::add(&m_router->stats().n_master, 1, mxb::atomic::RELAXED);
|
||||
m_router->server_stats(target->server()).write++;
|
||||
m_server_stats[target->server()].write++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1170,7 +1170,7 @@ bool RWSplitSession::handle_got_target(GWBUF* querybuf, SRWBackend& target, bool
|
||||
|
||||
mxb::atomic::add(&m_router->stats().n_queries, 1, mxb::atomic::RELAXED);
|
||||
mxb::atomic::add(&target->server()->stats.packets, 1, mxb::atomic::RELAXED);
|
||||
m_router->server_stats(target->server()).total++;
|
||||
m_server_stats[target->server()].total++;
|
||||
|
||||
if (!m_qc.large_query() && response == mxs::Backend::EXPECT_RESPONSE)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user