Hi! Some read/study i'm doing about thread pool to understand what could be exposed with information_schema tables... check if i'm grouping ("creating tables") with the right information... i'm reading threadgroup_unix.cc and others threadgroup* files to start this work ----- from your mail Vladislav: *"Global all_groups array contains all thread groups ."* * * => static thread_group_t *all_groups*[MAX_THREAD_GROUPS]; => static uint *group_count*; "group_count" is the max value of a loop using all_groups var? something realted to "threadpool_max_threads", with a limit of group_count<MAX_THREAD_GROUPS? *"Every thread_group_t has list of * * waiting threads , called “waiting_threads”, * * and queue of not yet handled requests, called “queue” * * (request is represented by connection_t ), * * a listener etc."* a request is a "php mysql_connect"? each new tcp/ip connection create a new request? => struct *thread_group_t* { mysql_mutex_t mutex; *connection_queue_t* *queue*; *worker_list_t* *waiting_threads*; * worker_thread_t* *listener; (listener thread? maybe it have a THD and we could show the query_id/thread_id or some information?) pthread_attr_t *pthread_attr; (what is pthread_attr? i didn't found in threadpool*) int pollfd; (a fd to kevent and others libs?) int thread_count; (number of threads in this thread group?!) int active_thread_count; (active threads running this thread group?!) int connection_count; (active connections in this thread group?!) int io_event_count; (io event count? what is this? network io?) int queue_event_count; (queue event count? maybe the COUNT(*) for connection_queue_t queue ?) ulonglong last_thread_creation_time; (last thread create time, it's a unixtimestamp * 1.000.000 (us)? ) int shutdown_pipe[2]; (maybe rpc to call a server shutdown?) bool shutdown; (shutdown information?) bool stalled; (hum... stall (nice name), well i must study about threadpool stall yet, but i think it's a nice information to report to DBA =] ) } MY_ALIGNED(512); I don't know yet how I_P_List<> and I_P_List_adapter<> work, but i will search about it in code... it's like a C++ object with ->legth and others easy to use tools? something like "foreach" (connection_queue_t as xxx) and interact with each connection_t inside connection_queue_t using xxx? typedef I_P_List<*connection_t*, I_P_List_adapter<connection_t, &connection_t::next_in_queue, &connection_t::prev_in_queue>, I_P_List_null_counter, I_P_List_fast_push_back<connection_t> > => *connection_queue_t*; typedef I_P_List<*worker_thread_t*, I_P_List_adapter<worker_thread_t, &worker_thread_t::next_in_list, &worker_thread_t::prev_in_list> > => *worker_list_t*; --- => struct *worker_thread_t* { ulonglong *event_count*; /* number of request handled by this thread */ thread_group_t* *thread_group*; (it's point to thread_group inside all_groups? does it have an ID about what index of all_groups we are?) worker_thread_t *next_in_list; worker_thread_t **prev_in_list; mysql_cond_t *cond*; (what is this?) bool woken; (what is this?) }; => struct *connection_t* { THD *thd; thread_group_t **thread_group*; connection_t *next_in_queue; connection_t **prev_in_queue; ulonglong *abs_wait_timeout*; (what is this?) bool *logged_in*; (hummm waiting password?) bool bound_to_poll_descriptor; (what is this?) bool waiting; (connection in waiting queue state?) }; => *pthread_attr_t* ??? (didn't found in threadpool* files, i will search with time about it, maybe something to linux/unix pthread lib?) * =========================================================================================================== * well now i'm thinking right about *information_schema *tables using the variables from the top of this email... : *TABLES:* 1) *all_groups *variable => *THREADPOOL_THREAD_GROUPS *table columns: *THREAD_GROUP_ID *INT NOT NULL DEFAULT 0, *THREAD_COUNT *INT NOT NULL DEFAULT 0, *ACTIVE_THREAD_COUNT *INT NOT NULL DEFAULT 0, *CONNECTION_COUNT *INT NOT NULL DEFAULT 0, *IO_EVENT_COUNT** *INT NOT NULL DEFAULT 0 COMMENT "WHAT IS THIS? NETWORK I/O?", *QUEUE_EVENT_COUNT** *INT NOT NULL DEFAULT 0, *LAST_THREAD_CREATION_TIME *DECIMAL UNSIGNED? UNIXTIMESTAMP? *SHUTDOWN *ENUM('Y','N') NOT NULL DEFAULT 'N' *STALLED *ENUM('Y','N') NOT NULL DEFAULT 'N' maybe we should put information about *LISTERNER_THREAD_ID* (thd->query_id / thd->thread_id) ? *LISTENER_QUERY_ID *BIGINT NOT NULL DEFAULT 0, *LISTENER_THREAD_ID *BIGINT NOT NULL DEFAULT 0 2) connection_queue_t *queue *=> *THREADPOOL_CONNECTION_QUEUE *table columns from queue->thd *QUERY_ID *INT NOT NULL DEFAULT 0, (does it exists? or just after parser?) *THREAD_ID *INT NOT NULL DEFAULT 0, queue->thread_group *THREAD_GROUP_ID *INT NOT NULL DEFAULT 0, ( i didn't found a ID for each thread_group, there's something for it? like am all_groups[] index? queue->cond (mysql_cond_t) ??? (what is this?) queue->woken (bool) ???? (what is this?) 3) worker_list_t *waiting_threads* => *THREADPOOL_WAITING_THREADS *table, maybe WAITING_QUEUE? *THREAD_GROUP_ID *INT NOT NULL DEFAULT 0, (thread_group_t* thread_group) *EVENT_COUNT *BIGINT UNSIGNED NOT NULL DEFAULT 0, (ulonglong event_count; /* number of request handled by this thread */ what is this?) ->cond (mysql_cond_t) ??? (what is this?) ->woken (bool) ???? (what is this?) i didn't found a THD, for this (query_id/thread_id) pthread_attr_t *pthread_attr; what is this? ----- something that i didn't understand yet... for example... if i got a *waiting_thread*, how i know what THD or what 'worker' thread will "do the job" of this query? i know it's too fast that i will not get it with information_schema, but it's a deterministic function right? there's a pool of worker thread that handle waiting threads? about the thread pool work... if the query is attached to one thread_group, it could 'jump' to another thread group? the "worker thread" is outside from thread group and at end of the execution it will realloc the connection to another thread_group? if anyone have more ideas about this information tables, and where i could get information about each column, please reply with the answer or with ideas =) thanks guys!