4 เคล็ดลับสำคัญเพื่อหลีกเลี่ยงการหยุดชะงักใน SQL Server

แบ่งปันเลย:

บทความนี้แนะนำเคล็ดลับสำคัญเพื่อหลีกเลี่ยงการหยุดชะงักใน SQL Servers

แม้ว่า SQL Server ได้เห็นวิวัฒนาการที่ยิ่งใหญ่ในช่วงสองสามปีที่ผ่านมาผู้ใช้ยังคงเผชิญกับสถานการณ์ทางตันอยู่เป็นประจำ ตามหลักการแล้วเซิร์ฟเวอร์ฐานข้อมูลควรสามารถดึงข้อมูลการร้องขอได้หลายครั้ง แต่มักส่งผลให้เกิดการบล็อก ความขัดแย้งที่กระบวนการหนึ่งรอการเปิดตัวของทรัพยากรอื่นเรียกว่าบล็อก แล้วก็มี Deadlocksหลีกเลี่ยงการหยุดชะงักขณะทำงานกับ SQL Server

ลองนึกภาพสถานการณ์ที่คน ๆ หนึ่งขอให้คนที่สองปล่อยทรัพยากรและคนที่สองกำลังรอให้คนแรกปล่อย ส่งผลให้ทั้งคู่ติดอยู่ในสถานการณ์ชะงักงัน ไม่มีกระบวนการใดที่สามารถดำเนินการต่อได้เนื่องจากทั้งสองถูกล็อกและต้องการให้อีกกระบวนการหนึ่งปล่อยทรัพยากรหรือล็อก

ในขณะที่ทำงานกับ SQL serverการหยุดชะงักเป็นเรื่องปกติธรรมดาและสามารถขัดขวางกระบวนการทั้งหมดได้ เป็นไปไม่ได้ที่จะหลีกเลี่ยงการชะงักงันโดยสิ้นเชิง แต่ก็สามารถลดโอกาสในการเกิดการชะงักงันได้อย่างแน่นอน

ปัญหาการหยุดชะงัก

การหยุดชะงักใน SQL Serverก่อนที่จะไปดูเคล็ดลับในการลดปัญหาการติดตาย (deadlock) เรามาดูกันก่อนว่าสาเหตุที่พบบ่อยที่สุดของการติดตายมีอะไรบ้าง SQL serverโดยปกติแล้ว ระบบจะออกแบบให้ตรวจจับภาวะการติดตาย (deadlock) โดยอัตโนมัติ แต่หากพบรายงานการติดตาย ผู้ดูแลระบบฐานข้อมูลควรพยายามทำความเข้าใจสาเหตุที่อยู่เบื้องหลังการติดตายนั้น สาเหตุที่พบบ่อยที่สุดคือ การออกแบบฐานข้อมูลที่ไม่ดี ขาดการตรวจสอบและทดสอบที่เหมาะสม และขาดการสร้างดัชนี นอกจากนี้ การติดตายบางส่วนยังเกิดจากคำสั่งค้นหา (query) ที่ออกแบบไม่ดีอีกด้วย

ควรสังเกตว่าการหยุดชะงักส่งผลโดยตรงต่อประสิทธิภาพและอาจหยุดการประมวลผลฐานข้อมูล

1. ให้คำสั่งเหมือนเดิม

การติดตาย (Deadlock) มักเกิดขึ้นหากทรัพยากรไม่ได้รับการประมวลผลตามลำดับที่กำหนดไว้อย่างชัดเจน เพื่อลดปัญหาการติดตาย ธุรกรรมที่เกิดขึ้นพร้อมกันทั้งหมดควรเข้าถึงวัตถุตามลำดับที่กำหนดไว้อย่างชัดเจน ผู้ดูแลระบบฐานข้อมูล (DBA) ควรออกแบบชุดกฎที่ชัดเจนสำหรับการเข้าถึงวัตถุในฐานข้อมูล โดยปกติแล้ว โปรแกรมตรวจสอบการล็อก (Lock Monitor) จะตรวจสอบการติดตาย และเมื่อตรวจพบ จะเลือกเหยื่อของการติดตายหนึ่งรายและยกเลิกธุรกรรมนั้น ดังนั้น การล็อกทั้งหมดจะถูกปลดออก และเซสชันก่อนหน้าจะสามารถดำเนินการต่อได้ เหยื่อของการติดตายจะถูกเลือกโดยพิจารณาจากลำดับความสำคัญของการติดตายที่กำหนดโดยเซิร์ฟเวอร์ หรือต้นทุนในการยกเลิกธุรกรรม

2. ข้อ จำกัด ระหว่างการทำธุรกรรม

คุณสามารถ จำกัด ไม่ให้ผู้ใช้ป้อนข้อมูลประเภทใดก็ได้เมื่อธุรกรรมกำลังประมวลผลและคุณอาจอัปเดตข้อมูลก่อนทำธุรกรรมเพื่อหลีกเลี่ยงการชะงักงัน นอกจากนี้พยายามรักษาการโต้ตอบของผู้ใช้ให้อยู่ในระดับต่ำสุดเนื่องจากมีผลต่อความเร็ว ตามหลักการแล้วธุรกรรมควรสั้นและรวดเร็วเพื่อหลีกเลี่ยงการชะงักงัน แอปพลิเคชันควรได้รับการออกแบบในลักษณะที่จับล็อคได้โดยใช้เวลาน้อยที่สุดและคลายออกโดยเร็วที่สุด

3. คำแนะนำ NOLOCK

เมื่อมีคนเรียกใช้แบบสอบถามกับตารางในระดับการแยกเริ่มต้นของ SQL ตารางจะถูกล็อกและการสืบค้นถัดไปต้องรอการเผยแพร่ คำแนะนำ NOLOCK มีประโยชน์ในสถานการณ์เช่นนี้เนื่องจากช่วยให้การลบล้างการล็อกตารางและการสืบค้นอื่น ๆ เข้าถึงได้ง่าย

4. ใช้ Bound Connections

หากแอปพลิเคชันเดียวกันสามารถเปิดการเชื่อมต่อสองรายการขึ้นไปซึ่งสามารถทำงานร่วมกันได้ก็จะไม่ทำให้เกิดการชะงักงัน นั่นเป็นเหตุผลที่แนะนำให้ใช้การเชื่อมต่อแบบผูก

การหยุดชะงักไม่ได้เป็นเพียงความยุ่งยากเพียงอย่างเดียวที่คุณอาจพบในขณะที่ทำงานกับไฟล์ SQL Server ฐานข้อมูล. ในความเป็นจริงเหตุการณ์ของ sql เสียหาย มีแนวโน้มที่จะทำให้คุณเศร้าโศก เพื่อหลีกเลี่ยงสถานการณ์การสูญเสียข้อมูลลงทุนในเครื่องมือการกู้คืนที่มีประสิทธิภาพเช่น DataNumen SQL Recovery.

บทนำผู้เขียน:

Victor Simon เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ การกู้คืน mdb และผลิตภัณฑ์ซอฟต์แวร์กู้คืน sql ดูข้อมูลเพิ่มเติมได้ที่ https://www.datanumen.com/

แบ่งปันเลย:

ความเห็นถูกปิด