Commit 35809da2 authored by Thayumanavar S's avatar Thayumanavar S

WL#10287 - Backport WL#7195 to MySQL - 5.5

This is backport of WL#7195 to MySQL-5.5. In 5.5, we
offload connection authentication from the acceptor
thread to tp worker threads.

Connection authentication happens in the acceptor thread that
accepts the connection for thread pool plugin. Connection authentication
involves exchanging packets with client and disk I/O
which is time consuming. This can cause other client
connections to starve and wait in the queue possibly increasing the
connect latency and decreasing throughput. In the worst case, some
connections could be dropped. n addition, SSL handshakes are quite
expensive and can stall connections in the accept queue.

This patch offloads connection authentication when thread pool
plugin is used for client connection. Each thread group
shall have a queue of connection_context objects, which represents
new connections that need to be processed by thread group threads.
The connection context is composed of THD object & list pointers
for intrusive queue implementation. Whenever a new connection
arrives, connection context object is created and added to the
queue. A new connect handler thread is created or woken up to handle
the authentication task. The worker thread loop is modified to
process connection events on connect handler threads in addition to
checking for query processing events. The initial number of connect
handler threads is one per thread group and it is restricted to
a maximum of 4 threads per thread group.
parent 01ea63b3
/* /*
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -385,6 +385,7 @@ THD *thd_get_current_thd() ...@@ -385,6 +385,7 @@ THD *thd_get_current_thd()
*/ */
void thd_new_connection_setup(THD *thd, char *stack_start) void thd_new_connection_setup(THD *thd, char *stack_start)
{ {
thd_lock_thread_count(thd);
#ifdef HAVE_PSI_INTERFACE #ifdef HAVE_PSI_INTERFACE
if (PSI_server) if (PSI_server)
thd_set_psi(thd, thd_set_psi(thd,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment