ZengCode.Com (The Thai Php Framework)  


Home   Download   Manual   About us    

Facebook   


MAIN MENU
News
Php Tips
Android Programming
Design Pattern By PHP
C# using Linq น่าใช้จริงๆ
C# Tips & Technique
C# Design Pattern
Linux Quick Tips
Java & JavaScript Tips
Database & SQL
ZengCode Framework Guide
Zeng Code Code
Programming
IPhone (Tips and Trick)

Download เอกสารที่น่าสนใจ

     SQL: Transaction Isolation  (2009-04-01)

SQL: Transaction Isolation

Transaction Isolation เรียกแบบง่ายๆน่าจะหมายถึงระดับการล๊อกการเข้าถึงของมูลของดาตาเบส
แบ่งได้เป็น 4 ระดับ

ก่อนจะดูว่าแต่ละระดับ นั้นเป็นอย่างไรเรามาดูความหมายของของอาการต่างๆ ที่เกิดขึ้นจากระดับการล๊อก


Description of set_transaction.gif follows

กำหนดให้
T1 หมายถึง Transaction ที่ 1
T2 หมายถึง Transaction ที่ 2

Dirty Read
คือการอ่านข้อมูลที่ยังไม่ Commit ได้
เช่น
Begin T1
Begin T2

T1.Select * -- Select ครั้งที่ 1
T2.Update
T1.Select * -- Select ครั้งที่ 2

T2.Commit
T1.Commit

จะเห็นว่าการ Select ครั้งที่ 1 และ 2 นั้นผลไม่เหมือนกัน แม้ว่า T2 ยังไม่ Commit ก็ตาม
ถ้าเกิด T2 มัน มี error แล้วเราก็ Rollback มันซะแล้วอ่านอีกครั้งค่ามันก็จะเหมือนกับการอ่านครั้งแรก
ง่ายๆ Dirty Read คืออ่านอะไรที่ไม่ชัวร์ออกมา เหมือนอ่านรูป slot machine ที่กำลังหมุนอยู่แล้วก็เอามาใช้ ทั้งๆที่ต้องรอให้มันหยุดนิ่งก่อน

Repeatable Read
คือ อ่านแล้ว มีตัวอื่นมาอับเดทและคอมมิท แล้วอ่านอีกทีก็ได้ค่าเหมือนเดิม

เช่น
Begin T1
Begin T2

T1.Select * -- Select ครั้งที่ 1
T2.Update
T2.Commit
T1.Select * -- Select ครั้งที่ 2

T1.Commit

จะเห็นว่าการ Select ครั้งที่ 1 และ 2 นั้นได้ผลเหมือนกัน แม้ข้อมูลถูกเปลี่ยนแปลงไปแล้วก็ตาม

NonRepeatable Read
คือ อ่านแล้ว มีตัวอื่นมาอับเดทและคอมมิท แล้วอ่านอีกทีก็ได้ค่าไม่เหมือนเดิม

Phantom Read
คือ อาการผีโผล่มาจากไหน คือเราคาดหวังว่าเป็น Repeatable Read แต่อ่านอีกครั้งค่าไม่เปลี่ยน แต่กลับมีค่าใหม่โผล่ขึ้นมา คือจำนวน row ที่อ่านได้เพิ่มขึ้น เพราะผลจาก insert




ต่อมาก็มาดูถึง Isolation Level ไล่จากระดับอ่อนสุดไปถึงเข้มสุด
1. Read Uncommitted
มันก็เหมือนการ select * from Table with (nolock)
มันจะเกิดอาการ Dirty Read อ่านอะไรที่ไม่ชัวร์ออกมา

2. Read Committed
จะอ่านค่าได้เฉพาะข้อมูลที่ Committed แล้วเท่านั้น จะเกิดอาการ Nonrepeatable Read และ Phantom Read ได้

3. Repeatable Read
อ่านแล้วคอมมิทอ่านอีกก็ได้แบบเดิม แต่จะเกิด Phantom Read ได้
ทำ ไม่มันอ่านได้เหมือนเดิม เพราะข้อมูลที่ถูกอ่านครั้งแรกนั้นมันจะรู้ว่าตัวไหนถูกอ่านมาบ้าง โดยดูจาก condition where แล้วคราวนี้ถ้ามีตัวอื่นพยายามจะอับเดทข้อมูลที่ข้อมูลอยู่ใน where อันแรกมันจะค้างไม่ update ให้และรอจะกว่า transaction แรกจะ commit ถึงจะทำการ update ให้ แต่เรายัง insert ข้อมูล ถ้าข้อมูลใหม่ไปตรงกับ where อันแรก อ่านมาอรกครั้งผลก็จะไม่เหมือนเดิม(Phantom Read)

4. Serializable
มีค่าเท่ากับ Holdlock
เป็น ระดับที่เข้มงวดสุดจะไม่เกิดอาการ Dirty Read, Nonrepeatable Read, Phantom Read เพราะอะไรนั้น เพราะมันจะใช้ lock แบบต่างๆ ทำให้ Transaction อื่นๆยังใช้งานข้อมูลไม่ได้ต้องรอให้ Transaction ที่ถือ lock นั้นทำงานเสร็จก่อน ซึ่ง Lock ต่างๆจะอธิบายในคราวหน้า

แต่การเซต Isolation Level ที่เข้มงวดมากนั้นจะเกิดปัญหาการเข้าถึงข้อมูล อาจทำให้เกิด deadlock ได้ถ้าจัดการไม่ดี ในคราวหน้าจะพูดถึงรูปแบบการเกิดและวิธีจัดการ deadlock

 

Create Date : 07 มีนาคม 2549
Last Update : 7 มีนาคม 2549 15:39:40 น.    

ขอบคุณที่มา http://www.bloggang.com/viewdiary.php?id=chaizzz&month=03-2006&date=07&group=1&gblog=9


Comment
Name
Comment
Security CodeCAPTCHA Image

easy tracking
avis car rental discount code

This page took 0.178878 seconds to load.