Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ดู Global Locks ใน MySQL (InnoDB) ด้วย SHOW ENGINE INNODB STATUS

การตรวจสอบ Locks และ Transaction ใน InnoDB

ใช้คำสั่ง SHOW ENGINE INNODB STATUS\G เพื่อดูข้อมูลล็อค ทราน잭ชัน และสถานะ InnoDB แบบละเอียด

คำสั่ง

SHOW ENGINE INNODB STATUS\G

ใช้ \G เพื่อแสดงผลแนวตั้ง (อ่านง่ายกว่า)

ส่วนสำคัญใน Output

1. SEMAPHORES - ล็อคระดับระบบปฏิบัติการ

---------- SEMAPHORES ----------
OS WAIT ARRAY INFO: reservation count 244, signal count 241
RW-shared spins 23, rounds 37, OS waits 14
RW-excl spins 16, rounds 380, OS waits 9
Spin rounds per wait: 1.61 RW-shared, 23.75 RW-excl, 4.00 RW-sx
  • RW-shared = Shared locks (S-locks, สำหรับ SELECT)
  • RW-excl = Exclusive locks (X-locks, สำหรับ UPDATE/DELETE)
  • OS waits = จำนวนครั้งที่ต้องรอ OS-level mutex

2. TRANSACTIONS - ทรานแซกชันที่ทำงานอยู่

------------ TRANSACTIONS ------------
Trx id counter 60219
History list length 32
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 284507225290560, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
  • Trx id counter = Transaction ID ถัดไป
  • History list length = Undo log entries ที่ยังไม่ purge
  • Lock structs = จำนวนล็อคที่ถือครอง

3. FILE I/O - การทำงาน I/O

-------- FILE I/O --------
I/O thread 0 state: wait Windows aio (insert buffer thread)
...
Pending normal aio reads: [0, 0, 0, 0], aio writes: [0, 0, 0, 0]
2134 OS file reads, 2843 OS file writes, 1186 OS fsyncs

4. BUFFER POOL - หน่วยความจำ

--------------------- BUFFER POOL AND MEMORY ---------------------
Total large memory allocated 8585216
Buffer pool size 512
Free buffers 253
Database pages 256
Modified db pages 0
Pages read 2111, created 215, written 1437

5. ROW OPERATIONS - สถิติการทำงานแถว

-------------- ROW OPERATIONS --------------
Number of rows inserted 247, updated 512, deleted 19, read 6593
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s

การตรวจสอบ Locks แบบละเอียด (MySQL 5.7+ / 8.0+)

-- ดู Locks ปัจจุบัน
SELECT * FROM performance_schema.data_locks;

-- ดู Threads ที่รอ Lock
SELECT * FROM performance_schema.data_lock_waits;

-- ดู Transactions
SELECT * FROM information_schema.INNODB_TRX;

การวิเคราะห์ Deadlock

-- ดู Deadlock ล่าสุด
SHOW ENGINE INNODB STATUS\G
-- หาส่วน: LATEST DETECTED DEADLOCK

คำแนะนำ

  • รันคำสั่งนี้ตอนมีปัญหา Performance หรือ Deadlock
  • ใช้ \G เพื่ออ่านง่าย (output ยาวมาก)
  • โฟกัสที่: TRANSACTIONS (active locks), SEMAPHORES (contention), ROW OPERATIONS (throughput)
  • สำหรับ Monitoring จริง ใช้ Performance Schema หรือ Tools เช่น pt-deadlock-logger, MySQL Enterprise Monitor