Sunday, June 10, 2012

Isolation Level

ระบบจัดการฐานข้อมูล (Database Management System หรือ DBMS)สมัยใหม่ในปัจจุบันมีคุณสมบัติหลัก ๆ ที่คล้ายคลึงกันมาก โดยเฉพาะระบบฐานข้อมูลที่สร้างขึ้นในเชิงพาณิชย์เพื่อให้สามารถแข่งขันกันได้ ระบบจัดการฐานข้อมูลยี่ห้อต่าง ๆ จึงพยายามพัฒนาคุณสมบัติของตนเองให้เทียบเท่าคู่แข่งเสมอ แต่ในความคล้ายนี้ก็มีบางอย่างที่ยังต่างกัน เรื่องหนึ่งที่ทำให้ระบบจัดการฐานข้อมูล Oracle ต่างจาก Microsoft SQL Server มาก ๆ ก็คือเรื่องของ Transaction Isolation Level

Isolation Level หรือถ้าลองแปลเป็นไทยอาจจะแปลว่า "ระัดับของความเป็นส่วนตัว" ซึ่งหมายถึงความเป็นส่วนตัวของ Transaction นั่นแหละครับ ทำนองว่า Transaction ใด ๆ ควรจะมีความเป็นส่วนตัวของข้อมูลในระดับหนึ่งในการทำงาน ไม่ใช่เรื่องของ Security หรือ Privacy นะครับ แต่เป็นการที่ว่า Transaction จะทำงานร่วมกันอย่างไรโดยยังมีความถูกต้องของข้อมูล ไม่ใช่ว่าคนนึงทำอย่าง อีกคนทำอีกอย่างแล้วข้อมูลตีกันไปตีกันมาจนเล๊ะตุ้มเป๊ะแบบนั้น

Isolation Level เกิดขึ้นมาเพื่อแก้สถานการณ์ซึ่งเป็นปัญหาหลัก ๆ สามประการตามที่ระบุในมาตรฐาน ANSI/ISO ในการทำงานร่วมกันของ Transaction คือ

1) Dirty Read ชื่อก็บอกอยู่แล้วว่าเป็นการอ่านที่สกปรก การอ่านที่สกปรกคือ เมื่อ User คนหนึ่งกำลังอัพเดทข้อมูลอยู่ใน Transaction ใด ๆ แต่ยังไม่ Commit ปรากฎว่าเมื่อ User อีกคนหนึ่งคิวรีข้อมูลชุดเดียวกันกลับได้เห็นข้อมูลที่ User คนแรกอัพเดทแล้ว (แม้จะยังไม่ได้ Commit) ที่บอกว่าสกปรกคือ User คนแรกอาจจะ Rollback ก็ได้ หรือข้อมูลที่เห็นตอนนั้นอาจจะอยู่ในระหว่างการทำงาน ไม่ใช่ค่าสุดท้ายที่ถูกต้อง

2) Non-Repeatable Read สมมติว่าใน Transaction ของคุณคิวรีข้อมูลหนึ่งอยู่ แต่พอเวลาผ่านไปสักพัก คิวรีข้อมูลเดิมอีกที แต่ปรากฎว่าข้อมูลได้เปลี่ยนไปแล้ว เรื่องแบบนี้ไม่น่าแปลก ถ้าเราอ่านข้อมูลจากตารางในกรณีที่ไม่ได้อยู่ใน Transaction เพราะเมื่อเวลาผ่านไปข้อมูลก็มีสิทธิ์ถูกเปลี่ยนได้อยู่แล้ว แต่ใน Transaction หนึ่ง ๆ ข้อมูลที่นำมาใช้งานควรจะถือว่าเอามาจากจุด ณ ตอนเริ่ม Transaction เป็นหลัก

3) Phantoms Read เหมือนจะหมายถึงข้อมูลผี หรือข้อมูลปีศาจอะไรทำนองนั้น คือระหว่างทำงานใน Transaction อยู่ เราคิวรีได้ข้อมูลชุดหนึ่ง ณ เวลา T1 ต่อมาเมื่อเราคิวรีอีก ณ เวลา T2 ข้อมูลชุดที่เราทำงานด้วยอยู่ เกิดมีเรคคอร์ดเพิ่มขึ้นหรือหายไป ต่างจาก Non-Repeatable Read คือ Case นั้นข้อมูลของเราเปลี่ยนไป แต่เคสนี้จำนวนของเรคคอร์ดเปลี่ยนไป

แล้วเรื่องนี้เกี่่ยวอะไรกับ Isolation Level เรามาดูกันต่อไปครั้งหน้านะครับ

อ่านเพิ่มเติม:
1) Isolation (Database Systems), Wikipedia,
http://en.wikipedia.org/wiki/Isolation_(database_systems)
2) Expert Oracle Database Architecture 2nd Edition, Thomas Kyte
3) SQL Server2008 R2, ธาริน สิทธิธรรมชารี