1
0
mirror of https://github.com/MariaDB/server.git synced 2025-05-02 19:25:03 +03:00
Monty c2118a08b1 Move all kill mutex protection to LOCK_thd_kill
LOCK_thd_data was used to protect both THD data and
ensure that the THD is not deleted while it was in use

This patch moves the THD delete protection to LOCK_thd_kill,
which already protects the THD for kill.

The benefits are:
- More well defined what LOCK_thd_data protects
- LOCK_thd_data usage is now much simpler and easier to verify
- Less chance of deadlocks in SHOW PROCESS LIST as there is less
  chance of interactions between mutexes
- Remove not needed LOCK_thread_count from
  thd_get_error_context_description()
- Fewer mutex taken for thd->awake()

Other things:
- Don't take mysys->var mutex in show processlist to check if thread
  is kill marked
- thd->awake() now automatically takes the LOCK_thd_kill mutex
  (Simplifies code)
- Apc uses LOCK_thd_kill instead of LOCK_thd_data
2017-12-08 13:46:23 +02:00

259 lines
12 KiB
Plaintext

connect con1, localhost, user1, , ;
select "MARKER_BEGIN" as marker;
marker
MARKER_BEGIN
select "This is simple statement one" as payload;
payload
This is simple statement one
select "This is simple statement two" as payload;
payload
This is simple statement two
select "This is the first part of a multi query" as payload;
select "And this is the second part of a multi query" as payload;
select "With a third part to make things complete" as payload;
$$
payload
This is the first part of a multi query
payload
And this is the second part of a multi query
payload
With a third part to make things complete
select "MARKER_END" as marker;
marker
MARKER_END
select "Con1 is done with payload" as status;
status
Con1 is done with payload
connection default;
set @con1_tid = (select thread_id from performance_schema.threads
where processlist_user = 'user1');
select (@con1_tid is not null) as expected;
expected
1
set @marker_begin = (select event_id from performance_schema.events_statements_history_long
where sql_text like "%MARKER_BEGIN%" and thread_id = @con1_tid);
select (@marker_begin is not null) as expected;
expected
1
set @marker_end = (select end_event_id from performance_schema.events_statements_history_long
where sql_text like "%MARKER_END%" and thread_id = @con1_tid);
select (@marker_end is not null) as expected;
expected
1
show status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
Performance_schema_locker_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
select * from (
(
select (event_id - @marker_begin) as relative_event_id,
(end_event_id - @marker_begin) as relative_end_event_id,
event_name,
sql_text as comment,
nesting_event_type,
(nesting_event_id - @marker_begin) as relative_nesting_event_id
from performance_schema.events_statements_history_long
where (thread_id = @con1_tid)
and (@marker_begin <= event_id)
and (end_event_id <= @marker_end)
)
union
(
select (event_id - @marker_begin) as relative_event_id,
(end_event_id - @marker_begin) as relative_end_event_id,
event_name,
"(stage)" as comment,
nesting_event_type,
(nesting_event_id - @marker_begin) as relative_nesting_event_id
from performance_schema.events_stages_history_long
where (thread_id = @con1_tid)
and (@marker_begin <= event_id)
and (end_event_id <= @marker_end)
)
union
(
select (event_id - @marker_begin) as relative_event_id,
(end_event_id - @marker_begin) as relative_end_event_id,
event_name,
operation as comment,
nesting_event_type,
(nesting_event_id - @marker_begin) as relative_nesting_event_id
from performance_schema.events_waits_history_long
where (thread_id = @con1_tid)
and (@marker_begin <= event_id)
and (end_event_id <= @marker_end)
)
) all_events
order by relative_event_id asc;
relative_event_id relative_end_event_id event_name comment nesting_event_type relative_nesting_event_id
0 20 statement/sql/select select "MARKER_BEGIN" as marker NULL NULL
1 4 stage/sql/Init (stage) STATEMENT 0
2 2 wait/io/socket/sql/client_connection recv STAGE 1
3 3 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 1
4 4 wait/io/file/sql/query_log write STAGE 1
5 5 stage/sql/Checking permissions (stage) STATEMENT 0
6 6 stage/sql/Opening tables (stage) STATEMENT 0
7 7 stage/sql/After opening tables (stage) STATEMENT 0
8 8 stage/sql/Init (stage) STATEMENT 0
9 9 stage/sql/Optimizing (stage) STATEMENT 0
10 10 stage/sql/Executing (stage) STATEMENT 0
11 11 stage/sql/End of update loop (stage) STATEMENT 0
12 12 stage/sql/Query end (stage) STATEMENT 0
13 13 stage/sql/Commit (stage) STATEMENT 0
14 14 stage/sql/Closing tables (stage) STATEMENT 0
15 15 stage/sql/Starting cleanup (stage) STATEMENT 0
16 16 stage/sql/Freeing items (stage) STATEMENT 0
17 17 wait/io/socket/sql/client_connection send STATEMENT 0
18 18 wait/synch/mutex/sql/THD::LOCK_thd_kill lock STATEMENT 0
19 20 stage/sql/Reset for next command (stage) STATEMENT 0
20 20 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 19
21 21 idle idle NULL NULL
22 42 statement/sql/select select "This is simple statement one" as payload NULL NULL
23 26 stage/sql/Init (stage) STATEMENT 22
24 24 wait/io/socket/sql/client_connection recv STAGE 23
25 25 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 23
26 26 wait/io/file/sql/query_log write STAGE 23
27 27 stage/sql/Checking permissions (stage) STATEMENT 22
28 28 stage/sql/Opening tables (stage) STATEMENT 22
29 29 stage/sql/After opening tables (stage) STATEMENT 22
30 30 stage/sql/Init (stage) STATEMENT 22
31 31 stage/sql/Optimizing (stage) STATEMENT 22
32 32 stage/sql/Executing (stage) STATEMENT 22
33 33 stage/sql/End of update loop (stage) STATEMENT 22
34 34 stage/sql/Query end (stage) STATEMENT 22
35 35 stage/sql/Commit (stage) STATEMENT 22
36 36 stage/sql/Closing tables (stage) STATEMENT 22
37 37 stage/sql/Starting cleanup (stage) STATEMENT 22
38 38 stage/sql/Freeing items (stage) STATEMENT 22
39 39 wait/io/socket/sql/client_connection send STATEMENT 22
40 40 wait/synch/mutex/sql/THD::LOCK_thd_kill lock STATEMENT 22
41 42 stage/sql/Reset for next command (stage) STATEMENT 22
42 42 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 41
43 43 idle idle NULL NULL
44 64 statement/sql/select select "This is simple statement two" as payload NULL NULL
45 48 stage/sql/Init (stage) STATEMENT 44
46 46 wait/io/socket/sql/client_connection recv STAGE 45
47 47 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 45
48 48 wait/io/file/sql/query_log write STAGE 45
49 49 stage/sql/Checking permissions (stage) STATEMENT 44
50 50 stage/sql/Opening tables (stage) STATEMENT 44
51 51 stage/sql/After opening tables (stage) STATEMENT 44
52 52 stage/sql/Init (stage) STATEMENT 44
53 53 stage/sql/Optimizing (stage) STATEMENT 44
54 54 stage/sql/Executing (stage) STATEMENT 44
55 55 stage/sql/End of update loop (stage) STATEMENT 44
56 56 stage/sql/Query end (stage) STATEMENT 44
57 57 stage/sql/Commit (stage) STATEMENT 44
58 58 stage/sql/Closing tables (stage) STATEMENT 44
59 59 stage/sql/Starting cleanup (stage) STATEMENT 44
60 60 stage/sql/Freeing items (stage) STATEMENT 44
61 61 wait/io/socket/sql/client_connection send STATEMENT 44
62 62 wait/synch/mutex/sql/THD::LOCK_thd_kill lock STATEMENT 44
63 64 stage/sql/Reset for next command (stage) STATEMENT 44
64 64 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 63
65 65 idle idle NULL NULL
66 85 statement/sql/select select "This is the first part of a multi query" as payload;
select "And this is the second part of a multi query" as payload;
select "With a third part to make things complete" as payload NULL NULL
67 71 stage/sql/Init (stage) STATEMENT 66
68 68 wait/io/socket/sql/client_connection recv STAGE 67
69 69 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 67
70 70 wait/io/file/sql/query_log write STAGE 67
71 71 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 67
72 72 stage/sql/Checking permissions (stage) STATEMENT 66
73 73 stage/sql/Opening tables (stage) STATEMENT 66
74 74 stage/sql/After opening tables (stage) STATEMENT 66
75 75 stage/sql/Init (stage) STATEMENT 66
76 76 stage/sql/Optimizing (stage) STATEMENT 66
77 77 stage/sql/Executing (stage) STATEMENT 66
78 78 stage/sql/End of update loop (stage) STATEMENT 66
79 79 stage/sql/Query end (stage) STATEMENT 66
80 80 stage/sql/Commit (stage) STATEMENT 66
81 81 stage/sql/Closing tables (stage) STATEMENT 66
82 82 stage/sql/Starting cleanup (stage) STATEMENT 66
83 85 stage/sql/Freeing items (stage) STATEMENT 66
84 84 wait/io/socket/sql/client_connection send STAGE 83
85 85 wait/synch/mutex/sql/THD::LOCK_thd_kill lock STAGE 83
86 103 statement/sql/select select "And this is the second part of a multi query" as payload;
select "With a third part to make things complete" as payload NULL NULL
87 89 stage/sql/Init (stage) STATEMENT 86
88 88 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 87
89 89 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 87
90 90 stage/sql/Checking permissions (stage) STATEMENT 86
91 91 stage/sql/Opening tables (stage) STATEMENT 86
92 92 stage/sql/After opening tables (stage) STATEMENT 86
93 93 stage/sql/Init (stage) STATEMENT 86
94 94 stage/sql/Optimizing (stage) STATEMENT 86
95 95 stage/sql/Executing (stage) STATEMENT 86
96 96 stage/sql/End of update loop (stage) STATEMENT 86
97 97 stage/sql/Query end (stage) STATEMENT 86
98 98 stage/sql/Commit (stage) STATEMENT 86
99 99 stage/sql/Closing tables (stage) STATEMENT 86
100 100 stage/sql/Starting cleanup (stage) STATEMENT 86
101 103 stage/sql/Freeing items (stage) STATEMENT 86
102 102 wait/io/socket/sql/client_connection send STAGE 101
103 103 wait/synch/mutex/sql/THD::LOCK_thd_kill lock STAGE 101
104 122 statement/sql/select select "With a third part to make things complete" as payload NULL NULL
105 106 stage/sql/Init (stage) STATEMENT 104
106 106 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 105
107 107 stage/sql/Checking permissions (stage) STATEMENT 104
108 108 stage/sql/Opening tables (stage) STATEMENT 104
109 109 stage/sql/After opening tables (stage) STATEMENT 104
110 110 stage/sql/Init (stage) STATEMENT 104
111 111 stage/sql/Optimizing (stage) STATEMENT 104
112 112 stage/sql/Executing (stage) STATEMENT 104
113 113 stage/sql/End of update loop (stage) STATEMENT 104
114 114 stage/sql/Query end (stage) STATEMENT 104
115 115 stage/sql/Commit (stage) STATEMENT 104
116 116 stage/sql/Closing tables (stage) STATEMENT 104
117 117 stage/sql/Starting cleanup (stage) STATEMENT 104
118 118 stage/sql/Freeing items (stage) STATEMENT 104
119 119 wait/io/socket/sql/client_connection send STATEMENT 104
120 120 wait/synch/mutex/sql/THD::LOCK_thd_kill lock STATEMENT 104
121 122 stage/sql/Reset for next command (stage) STATEMENT 104
122 122 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 121
123 123 idle idle NULL NULL
124 144 statement/sql/select select "MARKER_END" as marker NULL NULL
125 128 stage/sql/Init (stage) STATEMENT 124
126 126 wait/io/socket/sql/client_connection recv STAGE 125
127 127 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 125
128 128 wait/io/file/sql/query_log write STAGE 125
129 129 stage/sql/Checking permissions (stage) STATEMENT 124
130 130 stage/sql/Opening tables (stage) STATEMENT 124
131 131 stage/sql/After opening tables (stage) STATEMENT 124
132 132 stage/sql/Init (stage) STATEMENT 124
133 133 stage/sql/Optimizing (stage) STATEMENT 124
134 134 stage/sql/Executing (stage) STATEMENT 124
135 135 stage/sql/End of update loop (stage) STATEMENT 124
136 136 stage/sql/Query end (stage) STATEMENT 124
137 137 stage/sql/Commit (stage) STATEMENT 124
138 138 stage/sql/Closing tables (stage) STATEMENT 124
139 139 stage/sql/Starting cleanup (stage) STATEMENT 124
140 140 stage/sql/Freeing items (stage) STATEMENT 124
141 141 wait/io/socket/sql/client_connection send STATEMENT 124
142 142 wait/synch/mutex/sql/THD::LOCK_thd_kill lock STATEMENT 124
143 144 stage/sql/Reset for next command (stage) STATEMENT 124
144 144 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 143
disconnect con1;