Bei der Analyse von Leistungsproblemen werden häufig langsame Abfragen und langsame Binlog-Transaktionen verwendet. Kürzlich habe ich eine langsame Abfrage analysiert und festgestellt, dass sie eine große Anzahl langsamer Commit-Anweisungen enthielt, der Abgleich bei der Analyse der langsamen Binlog-Transaktionen jedoch nicht abgeschlossen werden konnte. Beispielsweise kann es in diesem Zeitraum 1.000 Commit-Anweisungen geben, aber möglicherweise nur 100 langsame Transaktionen. Das ist ein zu großer Unterschied. Warum tritt dieses Phänomen auf?
Langsame Transaktion Für eine Transaktion, die eine Übermittlung (Einfügung) anzeigt, ist sie normalerweise wie folgt:
GTID_LOG_EVENT und
Das erste Mal, dass der Befehl „INSERT“ initiiert wird, ist QUERY_EVENT.
MAP_EVENT/WRITE_ROWS_EVENT ist der Zeitpunkt, zu dem jeder „Einfüge“-Befehl initiiert wird.
Daher erhalten wir normalerweise eine langsame Transaktionszeit, indem wir die Zeit von QUERY_EVENT von der Zeit von Die Anweisung wird eingeleitet.
begin; insert into it values(10); commit; -- insert语句执行 -> QUERY_EVENT时间(T1) -- insert语句执行完成,判定insert语句是否为慢查询(T2) -- commit语句执行 -> GTID_LOG_EVENT和XID_EVENT时间(T3) flush fsync -----> 传输binlog (sync_binlog=1) <---- 等待ACK (rpl_semi_sync_master_wait_point=AFTER_SYNC) commit -- commit语句执行完成,判定commit语句是否为慢查询(T4)
3. Beweis
Hauptdatenbank: Das Halbsynchronisations-Timeout beträgt 999999999.
begin; select now(); -T1 insert into it values(10); select sleep(10); select now(); -T2 commit; (断点在从库生效卡主ack) -T3 select now(); -T4 结果 mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> select now(); -T1 +---------------------+ | now() | +---------------------+ | 2022-06-12 22:20:43 | +---------------------+ 1 row in set (0.00 sec) mysql> insert into it values(10); Query OK, 1 row affected (0.10 sec) mysql> select sleep(10); +-----------+ | sleep(10) | +-----------+ | 0 | +-----------+ 1 row in set (10.01 sec) mysql> select now(); -T2 AND T3 +---------------------+ | now() | +---------------------+ | 2022-06-12 22:20:54 | +---------------------+ 1 row in set (0.00 sec) mysql> commit; Query OK, 0 rows affected (21.64 sec) mysql> select now(); -T4 +---------------------+ | now() | +---------------------+ | 2022-06-12 22:21:15 | +---------------------+ 1 row in set (0.00 sec)
Lassen Sie uns die langsame Abfrage und das Binlog analysieren Fügen Sie es hier hinzu. Sleep(10) verlängert die Transaktionszeit, da die Einfügung zu schnell erfolgt.
binlog langsame Transaktion 22:20:54(T2) - 22:20:43(T1) = etwa 11 Sekunden (wir haben Sleep(10) hinzugefügt)
# at 12221 #220612 22:20:54 server id 613306 end_log_pos 12286 CRC32 0x3e019332 GTID last_committed=40 sequence_number=41 rbr_only=yes /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/; SET @@SESSION.GTID_NEXT= '00320cc8-39f9-11ec-b5ba-000c2929706d:41'/*!*/; # at 12286 #220612 22:20:43 server id 613306 end_log_pos 12360 CRC32 0x8dcde193 Query thread_id=43 exec_time=1 error_code=0 SET TIMESTAMP=1655043643/*!*/; BEGIN /*!*/; # at 12360 #220612 22:20:43 server id 613306 end_log_pos 12409 CRC32 0x0db68582 Rows_query # insert into it values(10) # at 12409 #220612 22:20:43 server id 613306 end_log_pos 12456 CRC32 0x363a48c7 Table_map: `mysemi`.`it` mapped to number 124 # at 12456 #220612 22:20:43 server id 613306 end_log_pos 12496 CRC32 0xd44e43f3 Write_rows: table id 124 flags: STMT_END_F ### INSERT INTO `mysemi`.`it` ### SET ### @1=10 /* INT meta=0 nullable=1 is_null=0 */ # at 12496 #220612 22:20:54 server id 613306 end_log_pos 12527 CRC32 0x4d8d2c64 Xid = 547 COMMIT/*!*/;
Commit in langsamer Abfrage ist langsam 22 :21:15(T4) - 22:20:54(T3) = 21 Sekunden
# Time: 2022-06-12T22:21:15.746223Z # User@Host: root[root] @ localhost [] Id: 43 # Schema: mysemi Last_errno: 0 Killed: 0 # Query_time: 21.641090 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 Rows_affected: 0 # Bytes_sent: 11 SET timestamp=1655043675; commit;
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen langsamem Commit in MySQL, langsamer Abfrage und langsamer Transaktion in Binlog?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!