insert操作:狀態(tài)為update update/delete操作:狀態(tài)為updating select操作:狀態(tài)為sending data 因此可以推斷應(yīng)該是語句執(zhí)行期間出現(xiàn)了問題,由于篇幅原因只給出一部分,并且我將語句部分也做了相應(yīng)截斷:
show processlist---------------------------- ...... 11827639 root dbmis Execute 9 updating UPDATE 17224594 root dbmis Execute 8 Sending data SELECT sum(exchange_coin) as exchange_coin FROM 17224595 root dbmis Execute 8 update INSERT INTO 17224596 root dg Execute 8 update INSERT INTO 17224597 root dbmis Execute 8 update INSERT INTO 17224598 root dbmis Execute 7 update INSERT INTO 17224599 root dbmis Execute 7 Sending data SELECT COUNT(*) AS tp_count FROM 17224600 root dg Execute 7 update INSERT INTO 17224601 root dbmis Execute 6 update INSERT INTO 17224602 root dbmis Execute 6 Sending data SELECT sum(exchange_coin) as exchange_coin FROM 17224606 root dbmis Execute 5 update INSERT INTO 17224619 root dbmis Execute 2 update INSERT INTO 17224620 root dbmis Execute 2 update INSERT INTO 17224621 root dbmis Execute 2 Sending data SELECT sum(exchange_coin) as exchange_coin 17224622 root dg Execute 2 update INSERT INTO 17224623 root dbmis Execute 1 update INSERT INTO 17224624 root dbmis Execute 1 update INSERT INTO 17224625 root dg Execute 1 update INSERT INTO 17224626 root dbmis Execute 0 update INSERT INTO 2、系統(tǒng)IO/CPU 從vmstat來看,CPU使用不大,而IO也在可以接受的范圍內(nèi)(vmstat wa%不高且b列為0)如下:
Thread 85 (Thread 0x7fbb0d42b700 (LWP 20174)): #0 0x00007fbfae164c73 in select () from /lib64/libc.so.6 #1 0x0000000000987c0f in os_thread_sleep (tm=<optimized out>) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/os/os0thread.cc:287 #2 0x00000000009e4dea in srv_conc_enter_innodb_with_atomics (trx=trx@entry=0x7fba4802f9c8) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/srv/srv0conc.cc:276 #3 srv_conc_enter_innodb (trx=trx@entry=0x7fba4802f9c8) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/srv/srv0conc.cc:511 #4 0x000000000093b948 in innobase_srv_conc_enter_innodb (trx=0x7fba4802f9c8) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/handler/ha_innodb.cc:1280 #5 ha_innobase::write_row (this=0x7fb8440ab260, record=0x7fb8440ab650 "") at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/handler/ha_innodb.cc:6793 #6 0x00000000005b440f in handler::ha_write_row (this=0x7fb8440ab260, buf=0x7fb8440ab650 "") at /home/install/lnmp1.5/src/mysql-5.6.40/sql/handler.cc:7351 #7 0x00000000006dd3a8 in write_record (thd=thd@entry=0x1d396c90, table=table@entry=0x7fb8440aa970, info=info@entry=0x7fbb0d429400, update=update@entry=0x7fbb0d429480) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/sql_insert.cc:1667 #8 0x00000000006e2541 in mysql_insert (thd=thd@entry=0x1d396c90, table_list=<optimized out>, fields=..., values_list=..., update_fields=..., update_values=..., duplic=DUP_REPLACE, ignore=false) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/sql_insert.cc:1072 #9 0x00000000006fa90a in mysql_execute_command (thd=thd@entry=0x1d396c90) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/sql_parse.cc:3500 2、update線程
Thread 81 (Thread 0x7fbb24b67700 (LWP 27490)): #0 0x00007fbfae164c73 in select () from /lib64/libc.so.6 #1 0x0000000000987c0f in os_thread_sleep (tm=<optimized out>) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/os/os0thread.cc:287 #2 0x00000000009e4dea in srv_conc_enter_innodb_with_atomics (trx=trx@entry=0x7fb94003c608) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/srv/srv0conc.cc:276 #3 srv_conc_enter_innodb (trx=trx@entry=0x7fb94003c608) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/srv/srv0conc.cc:511 #4 0x000000000093ae4e in innobase_srv_conc_enter_innodb (trx=0x7fb94003c608) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/handler/ha_innodb.cc:1280 #5 ha_innobase::index_read (this=0x7fb95c05b540, buf=0x7fb95c2ae4f0 "/377/377/377", key_ptr=<optimized out>, key_len=<optimized out>, find_flag=<optimized out>) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/handler/ha_innodb.cc:7675 #6 0x00000000005ab6e0 in ha_index_read_map (find_flag=HA_READ_KEY_EXACT, keypart_map=3, key=0x7fb940017048 "7/307/017e/257h", buf=<optimized out>, this=0x7fb95c05b540) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/handler.cc:2753 #7 handler::read_range_first (this=0x7fb95c05b540, start_key=<optimized out>, end_key=<optimized out>, eq_range_arg=<optimized out>, sorted=<optimized out>) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/handler.cc:6717 #8 0x00000000005aa206 in handler::multi_range_read_next (this=0x7fb95c05b540, range_info=0x7fbb24b65240) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/handler.cc:5871 #9 0x0000000000804acb in QUICK_RANGE_SELECT::get_next (this=0x7fb94000f720) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/opt_range.cc:10644 #10 0x000000000082ae2d in rr_quick (info=0x7fbb24b65410) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/records.cc:369 #11 0x0000000000766e1b in mysql_update (thd=thd@entry=0x1d1f2250, table_list=<optimized out>, fields=..., values=..., conds=0x7fb9400009c8, order_num=<optimized out>, order=<optimized out>, limit=18446744073709551615, handle_duplicates=DUP_ERROR, ignore=false, found_return=found_return@entry=0x7fbb24b65800, updated_return=updated_return@entry=0x7fbb24b65d60) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/sql_update.cc:744 3、select線程
Thread 66 (Thread 0x7fbb3c355700 (LWP 16028)): #0 0x00007fbfae164c73 in select () from /lib64/libc.so.6 #1 0x0000000000987c0f in os_thread_sleep (tm=<optimized out>) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/os/os0thread.cc:287 #2 0x00000000009e4dea in srv_conc_enter_innodb_with_atomics (trx=trx@entry=0x7fb988354858) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/srv/srv0conc.cc:276 #3 srv_conc_enter_innodb (trx=trx@entry=0x7fb988354858) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/srv/srv0conc.cc:511 #4 0x000000000093ae4e in innobase_srv_conc_enter_innodb (trx=0x7fb988354858) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/handler/ha_innodb.cc:1280 #5 ha_innobase::index_read (this=0x7fb9880e33a0, buf=0x7fb988351b50 "/377/377/377/377", key_ptr=<optimized out>, key_len=<optimized out>, find_flag=<optimized out>) at /home/install/lnmp1.5/src/mysql-5.6.40/storage/innobase/handler/ha_innodb.cc:7675 #6 0x00000000005ab6e0 in ha_index_read_map (find_flag=HA_READ_AFTER_KEY, keypart_map=7, key=0x7fb988134a48 "", buf=<optimized out>, this=0x7fb9880e33a0) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/handler.cc:2753 #7 handler::read_range_first (this=0x7fb9880e33a0, start_key=<optimized out>, end_key=<optimized out>, eq_range_arg=<optimized out>, sorted=<optimized out>) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/handler.cc:6717 #8 0x00000000005aa206 in handler::multi_range_read_next (this=0x7fb9880e33a0, range_info=0x7fbb3c353400) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/handler.cc:5871 #9 0x0000000000804acb in QUICK_RANGE_SELECT::get_next (this=0x7fb988002050) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/opt_range.cc:10644 #10 0x000000000082ae2d in rr_quick (info=0x7fb98809c210) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/records.cc:369 #11 0x00000000006d44fd in sub_select (join=0x7fb98809a728, join_tab=0x7fb98809c180, end_of_records=<optimized out>) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/sql_executor.cc:1259 #12 0x00000000006d2823 in do_select (join=0x7fb98809a728) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/sql_executor.cc:936 #13 JOIN::exec (this=0x7fb98809a728) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/sql_executor.cc:194 好了有了這些棧幀視乎發(fā)現(xiàn)一些共同點他們都處于innobase_srv_conc_enter_innodb函數(shù)下,本函數(shù)正是下面參數(shù)實現(xiàn)的方式:
Use the following guidelines to help find and maintain an appropriate setting: - If the number of concurrent user threads for a workload is less than 64, set innodb_thread_concurrency=0. - If your workload is consistently heavy or occasionally spikes, start by setting innodb_thread_concurrency=128 and then lowering the value to 96, 80, 64, and so on, until you find the number of threads that provides the best performance. For example, suppose your system typically has 40 to 50 users, but periodically the number increases to 60, 70, or even 200. You find that performance is stable at 80 concurrent users but starts to show a regression above this number. In this case, you would set innodb_thread_concurrency=80 to avoid impacting performance. - If you do not want InnoDB to use more than a certain number of virtual CPUs for user threads (20 virtual CPUs, for example), set innodb_thread_concurrency to this number (or possibly lower, depending on performance results). If your goal is to isolate MySQL from other applications, you may consider binding the mysqld process exclusively to the virtual CPUs. Be aware, however, that exclusive binding could result in non-optimal hardware usage if the mysqld process is not consistently busy. In this case, you might bind the mysqld process to the virtual CPUs but also allow other applications to use some or all of the virtual CPUs. - innodb_thread_concurrency values that are too high can cause performance regression due to increased contention on system internals and resources. - In some cases, the optimal innodb_thread_concurrency setting can be smaller than the number of virtual CPUs. - Monitor and analyze your system regularly. Changes to workload, number of users, or computing environment may require that you adjust the innodb_thread_concurrency setting 可以發(fā)現(xiàn)要合理的設(shè)置這個值并不那么容易并且要求較高。
S1 S2 S3 insert into baguait4 select * from testgp insert into baguait3 select * from testgp select * from baguait1 如果多觀察幾次你可以看到如下的現(xiàn)象:
mysql> select trx_id,trx_state,trx_query,trx_operation_state,trx_concurrency_tickets from information_schema.innodb_trx /G show processlist; *************************** 1. row *************************** trx_id: 84529 trx_state: RUNNING trx_query: insert into baguait4 select * from testgp trx_operation_state: sleeping before entering InnoDB trx_concurrency_tickets: 0 *************************** 2. row *************************** trx_id: 84524 trx_state: RUNNING trx_query: insert into baguait3 select * from testgp trx_operation_state: inserting trx_concurrency_tickets: 1 *************************** 3. row *************************** trx_id: 422211785606640 trx_state: RUNNING trx_query: select * from baguait1 trx_operation_state: sleeping before entering InnoDB trx_concurrency_tickets: 0 3 rows in set (0.00 sec) +----+-----------------+-----------+---------+---------+------+------------------------+--------------------------------------------+-----------+---------------+ | Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined | +----+-----------------+-----------+---------+---------+------+------------------------+--------------------------------------------+-----------+---------------+ | 1 | event_scheduler | localhost | NULL | Daemon | 3173 | Waiting on empty queue | NULL | 0 | 0 | | 6 | root | localhost | testmts | Query | 70 | Sending data | insert into baguait3 select * from testgp | 0 | 0 | | 7 | root | localhost | testmts | Query | 68 | Sending data | insert into baguait4 select * from testgp | 0 | 0 | | 8 | root | localhost | testmts | Query | 66 | Sending data | select * from baguait1 | 120835 | 0 | | 9 | root | localhost | NULL | Query | 0 | starting | show processlist | 0 | 0 | +----+-----------------+-----------+---------+---------+------+------------------------+--------------------------------------------+-----------+---------------+ 5 rows in set (0.00 sec) mysql> mysql> mysql> mysql> mysql> select trx_id,trx_state,trx_query,trx_operation_state,trx_concurrency_tickets from information_schema.innodb_trx /G show processlist; *************************** 1. row *************************** trx_id: 84529 trx_state: RUNNING trx_query: insert into baguait4 select * from testgp trx_operation_state: sleeping before entering InnoDB trx_concurrency_tickets: 0 *************************** 2. row *************************** trx_id: 84524 trx_state: RUNNING trx_query: insert into baguait3 select * from testgp trx_operation_state: sleeping before entering InnoDB trx_concurrency_tickets: 0 *************************** 3. row *************************** trx_id: 422211785606640 trx_state: RUNNING trx_query: select * from baguait1 trx_operation_state: fetching rows trx_concurrency_tickets: 3 3 rows in set (0.00 sec) +----+-----------------+-----------+---------+---------+------+------------------------+--------------------------------------------+-----------+---------------+ | Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined | +----+-----------------+-----------+---------+---------+------+------------------------+--------------------------------------------+-----------+---------------+ | 1 | event_scheduler | localhost | NULL | Daemon | 3177 | Waiting on empty queue | NULL | 0 | 0 | | 6 | root | localhost | testmts | Query | 74 | Sending data | insert into baguait3 select * from testgp | 0 | 0 | | 7 | root | localhost | testmts | Query | 72 | Sending data | insert into baguait4 select * from testgp | 0 | 0 | | 8 | root | localhost | testmts | Query | 70 | Sending data | select * from baguait1 | 128718 | 0 | | 9 | root | localhost | NULL | Query | 0 | starting | show processlist | 0 | 0 | +----+-----------------+-----------+---------+---------+------+------------------------+--------------------------------------------+-----------+---------------+ 5 rows in set (0.00 sec) 我們可以觀察到trx_operation_state的狀態(tài)3個操作都在交替的變化,但是總有2個處于‘sleeping before entering InnoDB’狀態(tài)。并且我們可以觀察到trx_concurrency_tickets總是不會大于10的。因此我們有理由相信在同一時刻只有一個操作進入了Innodb層。但是需要注意的是在show engine innodb status中觀察不到select的操作如下:
------------ TRANSACTIONS ------------ Trx id counter 84538 Purge done for trx's n:o < 84526 undo n:o < 0 state: running but idle History list length 356 Total number of lock structs in row lock hash table 0 LIST OF TRANSACTIONS FOR EACH SESSION: ---TRANSACTION 422211785609424, not started 0 lock struct(s), heap size 1160, 0 row lock(s) ---TRANSACTION 422211785608032, not started 0 lock struct(s), heap size 1160, 0 row lock(s) ---TRANSACTION 84529, ACTIVE 103 sec inserting, thread declared inside InnoDB 6 mysql tables in use 2, locked 1 1 lock struct(s), heap size 1160, 0 row lock(s), undo log entries 111866 MySQL thread id 7, OS thread handle 140737158833920, query id 80 localhost root Sending data insert into baguait4 select * from testgp Trx read view will not see trx with id >= 84529, sees < 84524 ---TRANSACTION 84524, ACTIVE 105 sec sleeping before entering InnoDB mysql tables in use 2, locked 1 1 lock struct(s), heap size 1160, 0 row lock(s), undo log entries 105605 MySQL thread id 6, OS thread handle 140737159034624, query id 79 localhost root Sending data insert into baguait3 select * from testgp Trx read view will not see trx with id >= 84524, sees < 84524 但是我們還需要注意show engine innodb status有如下輸出第一行說明了有2個會話(線程)堵塞在Innodb層以外。
-------------- ROW OPERATIONS -------------- 1 queries inside InnoDB, 2 queries in queue 3 read views open inside InnoDB 2 RW transactions active inside InnoDB 五、實現(xiàn)方法 前面我們已經(jīng)描述了每次MySQL層和Innodb層的交互都會進行一次這樣的判斷,它用來決定會話(線程)是否能夠進入Innodb層,下面就是大概的邏輯,由函數(shù)innobase_srv_conc_enter_innodb調(diào)入。
1、insert select查詢數(shù)據(jù)進入Innodb層 #0 innobase_srv_conc_enter_innodb (prebuilt=0x7ffedcb98d10) at /mysqldata/percona-server-locks-detail-5.7.22/storage/innobase/handler/ha_innodb.cc:1740 #1 0x0000000001a53f7c in ha_innobase::general_fetch (this=0x7ffedcb9d760, buf=0x7ffedc9469b0 "/375/n", direction=1, match_mode=0) at /mysqldata/percona-server-locks-detail-5.7.22/storage/innobase/handler/ha_innodb.cc:9846 #2 0x0000000001a545ee in ha_innobase::rnd_next (this=0x7ffedcb9d760, buf=0x7ffedc9469b0 "/375/n") at /mysqldata/percona-server-locks-detail-5.7.22/storage/innobase/handler/ha_innodb.cc:10083 #3 0x0000000000f836d6 in handler::ha_rnd_next (this=0x7ffedcb9d760, buf=0x7ffedc9469b0 "/375/n") at /mysqldata/percona-server-locks-detail-5.7.22/sql/handler.cc:3146 #4 0x00000000014e2a55 in rr_sequential (info=0x7ffedcb4f120) at /mysqldata/percona-server-locks-detail-5.7.22/sql/records.cc:521 #5 0x0000000001581277 in sub_select (join=0x7ffedcb4ea20, qep_tab=0x7ffedcb4f0d0, end_of_records=false) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:1280 #6 0x0000000001580be6 in do_select (join=0x7ffedcb4ea20) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:950 #7 0x000000000157eaa2 in JOIN::exec (this=0x7ffedcb4ea20) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:199 #8 0x0000000001620327 in handle_query (thd=0x7ffedc012960, lex=0x7ffedc014f90, result=0x7ffedcc46680, added_options=1342177280, removed_options=0) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_select.cc:185 #9 0x000000000180466d in Sql_cmd_insert_select::execute (this=0x7ffedcc46608, thd=0x7ffedc012960) 2、insert select插入數(shù)據(jù)進入Innodb層 #0 innobase_srv_conc_enter_innodb (prebuilt=0x7ffedcb9c6f0) at /mysqldata/percona-server-locks-detail-5.7.22/storage/innobase/handler/ha_innodb.cc:1740 #1 0x0000000001a50587 in ha_innobase::write_row (this=0x7ffedc946470, record=0x7ffedcb78d00 "/375/n") at /mysqldata/percona-server-locks-detail-5.7.22/storage/innobase/handler/ha_innodb.cc:8341 #2 0x0000000000f9041d in handler::ha_write_row (this=0x7ffedc946470, buf=0x7ffedcb78d00 "/375/n") at /mysqldata/percona-server-locks-detail-5.7.22/sql/handler.cc:8466 #3 0x00000000018004b9 in write_record (thd=0x7ffedc012960, table=0x7ffedcb8f940, info=0x7ffedcc466c8, update=0x7ffedcc46740) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_insert.cc:1881 #4 0x00000000018019b9 in Query_result_insert::send_data (this=0x7ffedcc46680, values=...) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_insert.cc:2279 #5 0x00000000015853a8 in end_send (join=0x7ffedcb4ea20, qep_tab=0x7ffedcb4f248, end_of_records=false) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:2925 #6 0x0000000001581f71 in evaluate_join_record (join=0x7ffedcb4ea20, qep_tab=0x7ffedcb4f0d0) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:1645 #7 0x0000000001581372 in sub_select (join=0x7ffedcb4ea20, qep_tab=0x7ffedcb4f0d0, end_of_records=false) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:1297 #8 0x0000000001580be6 in do_select (join=0x7ffedcb4ea20) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:950 #9 0x000000000157eaa2 in JOIN::exec (this=0x7ffedcb4ea20) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:199 #10 0x0000000001620327 in handle_query (thd=0x7ffedc012960, lex=0x7ffedc014f90, result=0x7ffedcc46680, added_options=1342177280, removed_options=0) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_select.cc:185 #11 0x000000000180466d in Sql_cmd_insert_select::execute (this=0x7ffedcc46608, thd=0x7ffedc012960) 實際上插入數(shù)據(jù)正是在查詢完數(shù)據(jù)后調(diào)用函數(shù)evaluate_join_record的時候,通過回調(diào)了函數(shù)Query_result_insert::send_data來實現(xiàn),這點和單純的select不一樣單純的select這里調(diào)入是函數(shù)Query_result_send::send_data如下:
#0 Query_result_send::send_data (this=0x7ffedcc465f8, items=...) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_class.cc:2915 #1 0x00000000015853a8 in end_send (join=0x7ffedcb4e930, qep_tab=0x7ffedcb4f4b0, end_of_records=false) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:2925 #2 0x0000000001581f71 in evaluate_join_record (join=0x7ffedcb4e930, qep_tab=0x7ffedcb4f338) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:1645 #3 0x0000000001581372 in sub_select (join=0x7ffedcb4e930, qep_tab=0x7ffedcb4f338, end_of_records=false) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:1297 #4 0x0000000001580be6 in do_select (join=0x7ffedcb4e930) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:950 #5 0x000000000157eaa2 in JOIN::exec (this=0x7ffedcb4e930) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_executor.cc:199 #6 0x0000000001620327 in handle_query (thd=0x7ffedc012960, lex=0x7ffedc014f90, result=0x7ffedcc465f8, added_options=0, removed_options=0) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_select.cc:185 #7 0x00000000015d1f77 in execute_sqlcom_select (thd=0x7ffedc012960, all_tables=0x7ffedcc45cf0) at /mysqldata/percona-server-locks-detail-5.7.22/sql/sql_parse.cc:5445