ฉันเห็นว่าฉันสามารถดูการหยุดชะงักล่าสุดใน mysql / innodb แต่มีวิธีดูการหยุดชะงักที่ผ่านมาหรือไม่ เรามีปัญหาการหยุดชะงักสองประการประเด็นหนึ่งมีความสำคัญ การหยุดชะงักที่สำคัญน้อยกว่าเกิดขึ้นวันละหลายครั้งดังนั้นจึงกลายเป็นการหยุดชะงัก "ล่าสุด"
ฉันเห็นว่าฉันสามารถดูการหยุดชะงักล่าสุดใน mysql / innodb แต่มีวิธีดูการหยุดชะงักที่ผ่านมาหรือไม่ เรามีปัญหาการหยุดชะงักสองประการประเด็นหนึ่งมีความสำคัญ การหยุดชะงักที่สำคัญน้อยกว่าเกิดขึ้นวันละหลายครั้งดังนั้นจึงกลายเป็นการหยุดชะงัก "ล่าสุด"
คำตอบ:
มีการตั้งค่าที่นำมาใช้ใน MySQL 5.5.30: innodb_print_all_deadlocks
เมื่อเปิดใช้งานตัวเลือกนี้ข้อมูลเกี่ยวกับการหยุดชะงักทั้งหมดในธุรกรรมผู้ใช้ InnoDB จะถูกบันทึกไว้ในบันทึกข้อผิดพลาด mysqld มิฉะนั้นคุณจะเห็นข้อมูลเกี่ยวกับการหยุดชะงักล่าสุดเท่านั้นโดยใช้คำสั่ง SHOW ENGINE INNODB STATUS การหยุดชะงักของ InnoDB เป็นครั้งคราวไม่จำเป็นต้องเป็นปัญหาเนื่องจาก InnoDB ตรวจพบเงื่อนไขทันทีและย้อนกลับหนึ่งในธุรกรรมโดยอัตโนมัติ คุณอาจใช้ตัวเลือกนี้เพื่อแก้ไขปัญหาสาเหตุการชะงักงันที่เกิดขึ้นหากแอปพลิเคชันไม่มีตรรกะการจัดการข้อผิดพลาดที่เหมาะสมเพื่อตรวจสอบการย้อนกลับและลองดำเนินการอีกครั้ง จำนวน deadlocks จำนวนมากอาจบ่งชี้ว่าจำเป็นต้องปรับโครงสร้างธุรกรรมที่ออก DML หรือ SELECT ... สำหรับการอัพเดตคำสั่งสำหรับหลายตารางเพื่อให้แต่ละธุรกรรมเข้าถึงตารางในลำดับเดียวกันดังนั้นจึงหลีกเลี่ยงเงื่อนไข deadlock
เพียงเพิ่มการตั้งค่านี้ไปที่ my.cnf
[mysqld]
innodb_print_all_deadlocks = 1
หรือ
[mysqld]
innodb_print_all_deadlocks = on
คุณไม่ต้องรีสตาร์ท mysql เพียงเข้าสู่ mysql และเรียกใช้
mysql> SET GLOBAL innodb_print_all_deadlocks = 1;
or
mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
การตั้งค่านี้เป็นสิ่งใหม่สำหรับฉันเช่นกัน
ให้มันลองและบอกเราทุกสิ่งที่คุณคิด !!!
mysql.user
และรันFLUSH PRIVILEGES;
ได้