ディレクトリ
トランザクションがコミットされていない、PROCESSLISTで
二、コミットされていないトランザクションでinformation_schema.innodb_trx
三、コミットされていないトランザクションでperformance_schema.events_statements_current
私たちは、多くの場合、いずれかのこのような状況、コミットされていない上で実行されたトランザクション、フォローアップ再びDDLとDML操作、メタデータのロックを待機中のいずれかのセッションの背中につながる、ロック待ちタイムアウトが発生しました。そして、私たちはしばしば唯一のトランザクションのコミットされていないとセッションIDのトランザクションIDを見つけることが、一般的にスリープ状態にあり、どのような最終的に間違っていることは、コンテンツそれほど頻繁に失礼な問題を解決するために、このセッションの後に殺すトランザクションの分析、が、アプリケーションでありますR&D人材の層は、多くの場合、問題は後で再びキルを繰り返すことになりますときに発生するものを最終的に重要な見つけることができません。
トランザクションがコミットされていない、PROCESSLISTで
トランザクションが完了するが、提出されていないが、実行するためには、show PROCESSLISTの出力に情報を見つけることができません。
-- session 1
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> use test;
Database changed
mysql> create table t1(a int);
Query OK, 0 rows affected (0.45 sec)
mysql> insert into t1 values (1);
Query OK, 1 row affected (0.00 sec)
mysql> select connection_id() from dual;
+-----------------+
| connection_id() |
+-----------------+
| 6 |
+-----------------+
1 row in set (0.00 sec)
-- session 2
mysql> show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+-------+------------------+
| 6 | root | localhost | test | Sleep | 44 | | NULL |
| 7 | root | localhost | NULL | Query | 0 | init | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)
あなたは、睡眠、国家のヌル、NULLへの情報のコマンドコミットされていないトランザクションを見ることができます。
二、コミットされていないトランザクションでinformation_schema.innodb_trx
同様に、information_schema.innodb_trx.trx_queryはまた、我々は、コミットされていないトランザクションのSQLステートメントを提供することはできません、NULLです。
mysql> select * from information_schema.innodb_trx\G
*************************** 1. row ***************************
trx_id: 4632
trx_state: RUNNING
trx_started: 2020-03-28 07:18:32
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 2
trx_mysql_thread_id: 6
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 0
trx_lock_structs: 1
trx_lock_memory_bytes: 376
trx_rows_locked: 0
trx_rows_modified: 1
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 10000
trx_is_read_only: 0
trx_autocommit_non_locking: 0
1 row in set (0.00 sec)
三、コミットされていないトランザクションでperformance_schema.events_statements_current
あなたはそれがまだ完了し実行しているが、提出しなかった場合でも、各セッションが実行されているperformance_schema.events_statements_currentテーブルのSQLを見ることによって見ることができます。
mysql> select * from performance_schema.events_statements_current where sql_text not like 'select * from performance_schema.events_statements_current%'\G
*************************** 1. row ***************************
THREAD_ID: 25
EVENT_ID: 9
END_EVENT_ID: 9
EVENT_NAME: statement/sql/select
SOURCE: mysqld.cc:937
TIMER_START: 1897350780117784000
TIMER_END: 1897350780310674000
TIMER_WAIT: 192890000
LOCK_TIME: 0
SQL_TEXT: select connection_id() from dual
DIGEST: e5d97521478adc05b74560b51be5d6f7
DIGEST_TEXT: SELECT `connection_id` ( ) FROM DUAL
CURRENT_SCHEMA: test
OBJECT_TYPE: NULL
OBJECT_SCHEMA: NULL
OBJECT_NAME: NULL
OBJECT_INSTANCE_BEGIN: NULL
MYSQL_ERRNO: 0
RETURNED_SQLSTATE: NULL
MESSAGE_TEXT: NULL
ERRORS: 0
WARNINGS: 0
ROWS_AFFECTED: 0
ROWS_SENT: 1
ROWS_EXAMINED: 0
CREATED_TMP_DISK_TABLES: 0
CREATED_TMP_TABLES: 0
SELECT_FULL_JOIN: 0
SELECT_FULL_RANGE_JOIN: 0
SELECT_RANGE: 0
SELECT_RANGE_CHECK: 0
SELECT_SCAN: 0
SORT_MERGE_PASSES: 0
SORT_RANGE: 0
SORT_ROWS: 0
SORT_SCAN: 0
NO_INDEX_USED: 0
NO_GOOD_INDEX_USED: 0
NESTING_EVENT_ID: NULL
NESTING_EVENT_TYPE: NULL
1 row in set (0.00 sec)
プログラムは欠陥があります。トランザクションは、SQLのセットで構成することができる、唯一のトランザクションの最終実行を見ることができるこの方法は、SQLは、あなたがそれらのすべてを見ることができないものです。あなたはperformance_schema.threadsテーブル、information_schema.processlistとperformance_schema.events_statements_current 1アップで関連することができます。
mysql> select t1.id, t2.thread_id, t3.sql_text
-> from information_schema.processlist t1,
-> performance_schema.threads t2,
-> performance_schema.events_statements_current t3
-> where t1.id=6
-> and t1.id=t2.processlist_id
-> and t2.thread_id = t3.thread_id\G
*************************** 1. row ***************************
id: 6
thread_id: 25
sql_text: select connection_id() from dual
1 row in set (0.00 sec)