รายละเอียด บทความ 1

Recovery Model อลเวง ตอนที่ 4
คำถามสุดท้ายครับ คำถามไม่เท่าไหร่ แต่คำตอบน่าสนใจครับคำถามที่ 4 แล้วทำไม Truncate ไฟล์ Log ครับ ในเมื่อฐานข้อมูลยังคงทำงานได้ตามปกติ ?
คำตอบที่ 4 “มันเป็นการค้นพบเองของพวกผมครับ คืออยู่ดีๆ ฐานข้อมูลก็ทำได้แค่การ Select หรือดึงข้อมูลออกมาได้เท่านั้น แต่ไม่สามารถที่จะ Insert, Update, หรือ Delete ได้เลย พวกผมก็ลองเปลี่ยนออปชั่นของฐานข้อมูลไปเรื่อยๆ จนเมื่อเปลี่ยนกลับไปใช้ Simple Recovery Model ไม่นานฐานข้อมูลก็ยอมให้ Insert, Update, หรือ Delete ได้อีกครั้ง พวกผมก็เลยสลับไปสลับมาแบบนี้ครับ แล้วอีกอย่างขนาดของไฟล์ Log ก็ไม่ได้ลดขนาดลงนะครับ ทำไมถึงเป็นแบบนี้ครับ”
เมื่อไหร่ก็ตามที่มีการขยายขนาดไฟล์ Log ให้ใหญ่ขึ้นก็สามารถบันทึกทรานแซคชั่น (Transaction) ลงไปได้มากขึ้นตามไปด้วย
ทรานแซคชั่นนั้นมีทั้งแบบที่ประกาศเป็นทรานแซคชั่น และไม่ได้ประกาศเป็นทรานแซคชั่น
หากประกาศก็จะเป็นกลุ่มของชุดคำสั่งในการ Insert, Update หรือ Delete ที่ไปทำการปรับปรุงฐานข้อมูลบันทึกลงไปเป็นชุดๆ
แต่หากไม่ได้ประกาศไว้ หนึ่งคำสั่งก็จะถือเป็นหนึ่งทรานแซคชั่น โดยไฟล์ Log จะเก็บบันทึกข้อมูลที่เปลี่ยนแปลงไปเพราะคำสั่ง Insert, Update หรือ Delete ภายในทรานแซคชั่นเอาไว้ทั้งค่าเก่าก่อนถูกปรับเปลี่ยนและค่าใหม่ที่ถูกเปลี่ยนเข้าไป การที่เก็บรักษาค่าเก่าเอาไว้ก็เพื่อหากต้อง Rollback ข้อมูลกลับไปเป็นค่าเดิมยังสามารถทำได้นั่นเอง
สรุปก็คือ เมื่อมีการ Insert, Update หรือ Delete ข้อมูลมากเท่าไหร่ ก็จะมีการเขียนลงไฟล์ Log มากเท่านั้น และหากกำหนดให้ไฟล์ Log เพิ่มขนาดไฟล์ได้เองอัตโนมัติ ขนาดของไฟล์ก็ขยายใหญ่ขึ้นเรื่อยๆ เพื่อรองรับปริมาณทรานแซคชั่นที่จะบันทึกลงไป ขยายไปเรื่อยๆ จนเต็มพื้นที่ดิสก์ และเมื่อไหร่มีการบันทึกทรานแซคชั่นไปจนเต็มความจุไฟล์ ก็ไม่สามารถบันทึกเพิ่มได้อีกต่อไปทำให้ไม่สามารถที่จะ Insert, Update หรือว่า Delete ใดๆ ได้ ทำได้เพียง Select ข้อมูลเท่านั้น จนกว่าไฟล์ Log จะถูก Truncate ด้วยวิธีใดวิธีหนึ่ง (แนะนำให้ทำการแบ็คอัพแบบ Transaction Log Backup เพื่อ Truncate) จึงจะกลับมาบันทึกทรานแซคชั่นได้อีกครั้ง
ส่วนที่ถามว่าเมื่อ Truncate ไปแล้วขนาดไฟล์ Log ไม่ได้ลดขนาดลงนั้น
เป็นเพราะการ Truncate เป็นการลบทรานแซคชั่นที่เสร็จสิ้นไปแล้วและเกิดก่อน Checkpoint ตัวล่าสุดทิ้งไปจนหมด ทำให้เหลือพื้นที่ในการบันทึกเพิ่มขึ้น แต่ขนาดของไฟล์จะยังคงเท่าเดิม
เปรียบได้กับการที่คุณซื้อแทงค์น้ำขนาดใหญ่มา แล้วคุณใส่น้ำไปจนเต็ม เมื่อคุณเปิดน้ำออกทิ้งไปจนหมด คุณก็สามารถเติมน้ำได้ใหม่ แต่แทงค์น้ำขนาดใหญ่ของคุณก็ไม่ได้หดเล็กลงแต่อย่างใด
แต่หากคุณต้องการให้ขนาดไฟล์หดเล็กลงด้วยคุณสามารถใช้การ SHRINKFILE ช่วยได้
เหลือบทสรุปอีกนิดหนึ่งครับ ติดตามได้ในตอนสุดท้าย ของ Recovery Model อลเวงครับ
หลักสูตรที่เกี่ยวข้อง
https://www.9experttraining.com/sql-server-database-administration-training-course
บทความโดย
อาจารย์ภัคพงศ์ กฤตวัฒน์
วิทยากรดูแลและออกแบบหลักสูตร
กลุ่มวิชา SQL Server/Window Server