| Bug #104575 | Duplicated threads in performance_schema.threads table | ||
|---|---|---|---|
| Submitted: | 10 Aug 2021 3:22 | Modified: | 8 Sep 2021 12:50 |
| Reporter: | Kaige Ye (OCA) | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: InnoDB storage engine | Severity: | S3 (Non-critical) |
| Version: | 8.0.26 | OS: | Ubuntu (20.04) |
| Assigned to: | Marc ALFF | CPU Architecture: | x86 |
| Tags: | Contribution | ||
[10 Aug 2021 10:55]
MySQL Verification Team
Hello Kaige Ye, Thank you for the report and feedback. regards, Umesh
[27 Aug 2021 13:06]
OCA Admin
Contribution submitted via Github - Bug #104575 Duplicated threads in performance_schema.threads table (*) Contribution by Kaige Ye (Github YKG, mysql-server/pull/356#issuecomment-906852097): I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: git_patch_707003564.txt (text/plain), 1.12 KiB.
[27 Aug 2021 14:00]
MySQL Verification Team
Thank you for your contribution. regards, Umesh
[8 Sep 2021 12:35]
Daniel Price
Posted by developer: Fixed as of the upcoming 8.0.27 release: The srv_purge_thread and srv_worker_thread threads were duplicated in the performance_schema.threads table. Thanks to Kaige Ye for the contribution.
[8 Sep 2021 12:50]
Daniel Price
Fixed as of the upcoming 8.0.27 release: The srv_purge_thread and srv_worker_thread threads were duplicated in the performance_schema.threads table. Thanks to Kaige Ye for the contribution.

Description: The `srv_purge_thread` and `srv_worker_thread` threads are duplicated in the P_S.threads table. Here is the result: mysql> select thread_id,name,thread_os_id from performance_schema.threads; +-----------+---------------------------------------------+--------------+ | thread_id | name | thread_os_id | +-----------+---------------------------------------------+--------------+ | 1 | thread/sql/main | 15962 | | 3 | thread/innodb/io_ibuf_thread | 15967 | ... | 32 | thread/innodb/buf_dump_thread | 15996 | | 33 | thread/innodb/clone_gtid_thread | 15997 | | 34 | thread/innodb/srv_purge_thread | 15998 | <<<<<<<<<< | 35 | thread/innodb/srv_purge_thread | 15998 | <<<<<<<<<< | 36 | thread/innodb/srv_worker_thread | 15999 | <<<<<<<<<< | 37 | thread/innodb/srv_worker_thread | 15999 | <<<<<<<<<< | 38 | thread/innodb/srv_worker_thread | 16000 | <<<<<<<<<< | 39 | thread/innodb/srv_worker_thread | 16000 | <<<<<<<<<< | 40 | thread/innodb/srv_worker_thread | 16001 | <<<<<<<<<< | 41 | thread/innodb/srv_worker_thread | 16001 | <<<<<<<<<< | 42 | thread/sql/event_scheduler | 16002 | ... | 47 | thread/sql/one_connection | 16008 | +-----------+---------------------------------------------+--------------+ 43 rows in set (0.05 sec) Thread 35 is duplicated to thread 34, because they share the same thread_os_id. Thread 37/39/41 have the same problem. I digged the code, the root cause are here: for `srv_purge_thread`: /storage/innobase/srv/srv0srv.cc 3052 void srv_purge_coordinator_thread() { 3053 srv_slot_t *slot; 3054 3055 #ifdef UNIV_PFS_THREAD > 3056 THD *thd = create_thd(false, true, true, srv_purge_thread_key.m_value); 3057 #else 3058 THD *thd = create_thd(false, true, true, 0); 3059 #endif for `srv_worker_thread`: /storage/innobase/srv/srv0srv.cc 2801 void srv_worker_thread() { ... 2807 #ifdef UNIV_PFS_THREAD > 2808 THD *thd = create_thd(false, true, true, srv_worker_thread_key.m_value); 2809 #else 2810 THD *thd = create_thd(false, true, true, 0); 2811 #endif `create_thd` calls `thread_init`, and eventually made `create_thd` in pfs.cc:L2965 been called twice. /storage/perfschema/pfs.cc 2959 PSI_thread *pfs_new_thread_vc(PSI_thread_key key, const void *identity, 2960 ulonglong processlist_id) { 2961 PFS_thread *pfs; 2962 2963 PFS_thread_class *klass = find_thread_class(key); 2964 if (likely(klass != nullptr)) { >> 2965 pfs = create_thread(klass, identity, processlist_id); 2966 } else { 2967 pfs = nullptr; 2968 } How to repeat: select THREAD_ID,NAME,THREAD_OS_ID from performance_schema.threads; Suggested fix: L2807~L2811 and L3055~L3059 in /storage/innobase/srv/srv0srv.cc might should be deleted.