ดูการหยุดชะงักหลายครั้งที่ผ่านมา


12

ฉันเห็นว่าฉันสามารถดูการหยุดชะงักล่าสุดใน mysql / innodb แต่มีวิธีดูการหยุดชะงักที่ผ่านมาหรือไม่ เรามีปัญหาการหยุดชะงักสองประการประเด็นหนึ่งมีความสำคัญ การหยุดชะงักที่สำคัญน้อยกว่าเกิดขึ้นวันละหลายครั้งดังนั้นจึงกลายเป็นการหยุดชะงัก "ล่าสุด"

คำตอบ:


15

มีการตั้งค่าที่นำมาใช้ใน 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';

การตั้งค่านี้เป็นสิ่งใหม่สำหรับฉันเช่นกัน

ให้มันลองและบอกเราทุกสิ่งที่คุณคิด !!!


เรากำลังทำงาน 5.5.34 มีตัวเลือกสำหรับเวอร์ชั่นของเราบ้างไหม?
gwgeller

ความผิดพลาดของฉัน. มันมีอยู่ใน 5.5 dev.mysql.com/doc/refman/5.5/en/... ฉันจะอัปเดตคำตอบของฉัน
RolandoMySQLDBA

ทำงานเหมือนโฆษณาขอบคุณ! ฉันเปลี่ยนการตั้งค่าโดยใช้ sql ดังนั้นฉันจึงไม่ต้องรีสตาร์ท บังเอิญมี deadlocks ที่ร้ายแรงน้อยกว่าสองตัวเกิดขึ้นและปรากฏในบันทึกข้อผิดพลาด
gwgeller

การตั้งค่าที่ runtime ไม่ทำงานสำหรับฉันมันเขียนอะไรในบันทึกข้อผิดพลาด
lapo

1
@Jordan AWS ไม่เคยให้ออก SUPER และที่ผมกล่าวถึงนี้ 6 ปีที่ผ่านมา: dba.stackexchange.com/questions/34525/... พวกเขาใช้ทริกเกอร์เพื่อให้แน่ใจว่าคุณไม่สามารถแฮ็คmysql.userและรันFLUSH PRIVILEGES;ได้
RolandoMySQLDBA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.