DB Recovery: Buffer Management

Log-Record Buffering


กฎการทำงานของสำหรับ log buffer คือ
1. log record จะต้องถูกเขียนตามลำดับการทำงานก่อนหลัง ข้อมูลที่เปลี่ยนแปลงทีหลังจะไม่สามารถเขียน log ก่อนหน้าข้อมูลที่เปลี่ยนแปลงได้
2. เมื่อ transaction จะ commit ได้ จะต้องเขียน log record ลง log ก่อน
3. ข้อมูลที่จะเขียนจาก DB buffer ไปลง DB space จะต้องมีการ เีขียน log record เหล่านี้ลง log file ก่อนเสมอ ซึ่งเราเรียกกฎนี้ว่า Write Ahead Protocol หรือ Write Ahead Logging (WAL) ซึ่งบอกไว้ว่า log record จะต้องทำก่อนเขียน DB buffer ลง DB space ซึ่งการที่จะ write ส่วนไหนลงไปก่อนนั้น DBMS จะต้องทำงานประสานกับ OS เพื่อที่จะให้ DBMS สามารถเขียนข้อมูลลง disk ได้อย่างถูกต้องตาม protocol

Database Buffering


กฎการทำงานของ DB Buffer คือ ถ้าการเรียกข้อมูล B2 ทำให้ B1 จะต้องถูกเขียนกลับไปลง DB Space (คือ buffer เต็มแล้วเมื่อต้องเรียกข้อมูลขึ้นมา ก็จะต้องเขียนข้อมูลบางส่วนกลับลงไปที่ disk เื่พื่อให้ buffer มีที่พอสำหรับข้อมูลที่จะเีรียกขึ้นมาใหม่) DB Buffering จะต้องทำงานดังนี้
1. เขียน log records จาก log buffer ลง stable storage
2. เีขียนข้อมูล B1 กลับลงไปที่ DB space
3. แล้วจึงดึงข้อมูลของ B2 ขึ้นมาแทน B1 ใน buffer

OS Role in Buffer management


การจัดการ DB Buffer สามารถทำได้สองแนวทางคือ

  1. DBMS จองเนื้อที่ในหน่วยความจำไว้จำนวนหนึ่ง มีขนาด fixe size (ซึ่งเป็นเนื้อที่ที่อยู่นอกเหนือ Virtual Memory ของ OS) สำหรับเป็น buffer และ DBMS จะเป็นตัวจัดการ buffer นั้นกับ DB space โดยตรง โดยไม่ผ่าน OS ซึ่งวิธีนี้เรียกอีกอย่างว่า Raw Device Option
    ข้อดี: ทำงานได้เร็วกว่า เพราะว่าไม่ต้องผ่าน OS เหมาะกับกรณี OS ทำงานกับ DBMS ได้ไม่ดี
    ข้อเสีย: Buffer จะต้องมีขนาดคงที่ค่าหนึ่ง ซึ่ง DBMS จะให้ DBA เป็นคนกำหนด และค่านี้ถ้ากำหนดน้อยเกินไป ก็ทำให้เนื้อที่ไม่เพียงพอกับข้อมูลที่จะใช้งานทำให้มีการ อ่าน เขียน buffer บ่อย แต่ถ้ากำหนดมากเกินไป ก็จะไปเสียเนื้อที่ใหน memory ทำให้ไม่เพียงพอกับการทำงานของโปรแกรมอื่นๆ ใน server

  2. DB Buffer จะอยู่ใน Virtual Memory ของ OS และมีขนาดไม่คงที่ การทำงาน DBMS จะทำงานกับ OS เพื่อดึงและเขียนกลับข้อมูล
    ข้อดี: buffer มีขนาดไม่คงที่ จึงยืดหยุ่นในการทำงานได้ดีกว่า
    ข้อเสีย:ใช้กรณี DBMS และ OS ทำงานรวมกันไ้ด้ีดี

No comments:

Post a Comment