\

Facebook


วันอังคารที่ 22 สิงหาคม พ.ศ. 2560

วิธีปลด Table Lock ใน SQL SERVER 2008R2


เคยเจอไหม เวลา SELECT ข้อมูลจาก database เเล้วมันหมุนไม่หยุด ไม่ใช้เพราะ query ทำงานนานเเต่อาจเป็นเพราะ table กำลังโดน lock กล่าวคือ process ก่อนหน้านั้นยังทำงานไม่เสร็จ ผู้ใช้คนอื่นจึงยังแตะต้อง ตารางนัน้ไม่ได้ แล้ววิธีปลด lock ต้องทำยังไงหล่ะ

กันก่อนแก้ 

ป้องกันการล็อกตารางในโดยใช้คำสั่ง WITH (NOLOCK) ถ้าใช้  SQL Server 2008R2 ก็ใช้คำสั่งสั้นๆ (NOLOCK) ตามหลังการ SELECT ยกตัวอย่างเช่น


SELECT TOP 100 * FROM dbo.product WITH (NOLOCK)


ถ้าล็อคไปแล้วแก้ไขโดย ค้นหาก่อนว่ามี PROCESS ไหนจองอยู่จากตาราง sys.dm_tran_locks เช่น


SELECT * FROM sys.dm_tran_locks

  WHERE resource_database_id = DB_ID()

  AND resource_associated_entity_id = OBJECT_ID(N'dbo.product');


ถ้ามี record เเสดงว่า process จอง Table อยู่ จัดการมันซะ มองหา process ID แล้วรันคำสั่ง


KILL {PROCESS_ID}

ลองซีเล็กอีกที พบว่าไม่เหลือเร็คคอดละ
จบงาน

ไม่มีความคิดเห็น:

May be like this posts