Bug #85976 User name not shown in sys.processlist and sys.session with thread pool plugin
Submitted: 17 Apr 2017 22:14 Modified: 11 Jul 2019 0:09
Reporter: Jesper wisborg Krogh Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: SYS Schema Severity:S3 (Non-critical)
Version:5.7.9 OS:Any
Assigned to: Jesper wisborg Krogh CPU Architecture:Any

[17 Apr 2017 22:14] Jesper wisborg Krogh
Description:
When the thread pool plugin the user name in the sys.processlist and sys.session views will just show the thread name (thread_pool/tp_one_connection) instead of the actual user name.

How to repeat:
---------------------------
Without thread pool plugin:
---------------------------

mysql> SELECT * FROM sys.session\G
*************************** 1. row ***************************
                thd_id: 27
               conn_id: 4
                  user: root@localhost
                    db: NULL
               command: Query
                 state: Sending data
                  time: 0
     current_statement: SELECT * FROM sys.session
     statement_latency: 16.63 ms
              progress: NULL
          lock_latency: 15.17 ms
         rows_examined: 0
             rows_sent: 0
         rows_affected: 0
            tmp_tables: 4
       tmp_disk_tables: 1
             full_scan: YES
        last_statement: NULL
last_statement_latency: NULL
        current_memory: 3.08 MiB
             last_wait: NULL
     last_wait_latency: NULL
                source: NULL
           trx_latency: 1.52 ms
             trx_state: ACTIVE
        trx_autocommit: YES
                   pid: 9866
          program_name: mysql
...

------------------------
With thread pool plugin:
------------------------

From my.cnf:

      [mysqld]
      plugin-load = thread_pool.so

mysql> mysql> SELECT * FROM sys.session\G
*************************** 1. row ***************************
                thd_id: 44
               conn_id: 4
                  user: thread_pool/tp_one_connection
                    db: NULL
               command: Query
                 state: Sending data
                  time: 0
     current_statement: SELECT * FROM sys.session
     statement_latency: 101.34 ms
              progress: NULL
          lock_latency: 99.16 ms
         rows_examined: 0
             rows_sent: 0
         rows_affected: 0
            tmp_tables: 4
       tmp_disk_tables: 1
             full_scan: YES
        last_statement: NULL
last_statement_latency: NULL
        current_memory: 3.06 MiB
             last_wait: NULL
     last_wait_latency: NULL
                source: NULL
           trx_latency: 2.30 ms
             trx_state: ACTIVE
        trx_autocommit: YES
                   pid: 9866
          program_name: mysql
...

mysql> SELECT * FROM performance_schema.threads WHERE THREAD_ID = 44\G
*************************** 1. row ***************************
          THREAD_ID: 44
               NAME: thread/thread_pool/tp_one_connection
               TYPE: FOREGROUND
     PROCESSLIST_ID: 4
   PROCESSLIST_USER: root
   PROCESSLIST_HOST: localhost
     PROCESSLIST_DB: sys
PROCESSLIST_COMMAND: Query
   PROCESSLIST_TIME: 0
  PROCESSLIST_STATE: Sending data
   PROCESSLIST_INFO: SELECT * FROM performance_schema.threads WHERE THREAD_ID = 44
   PARENT_THREAD_ID: NULL
               ROLE: NULL
       INSTRUMENTED: YES
            HISTORY: YES
    CONNECTION_TYPE: SSL/TLS
       THREAD_OS_ID: NULL
1 row in set (0.00 sec)

Suggested fix:
Currently the check whether to display a user name or the thread name is:

IF(pps.name = 'thread/sql/one_connection',
   CONCAT(pps.processlist_user, '@', pps.processlist_host),
   REPLACE(pps.name, 'thread/', '')) user,

So only when the one connection per thread method is used for thread handling, the user name and host name will be picked up from the performance_schema.threads table. This should be extended to include thread/thread_pool/tp_one_connection .
[11 Jul 2019 0:09] Paul DuBois
Posted by developer:
 
Fixed in 5.7.28.

With the thread_pool plugin enabled, the sys.processlist and
sys.session views displayed a thread name rather than the actual user
name.