Microsoft SQL Server กับ Transaction Log Management ตอนที่ 2

หลังจากที่ได้ทำความเข้าใจความสัมพันธ์ ของ Recovery Model และการ Backup แล้ว บทความตอนที่ 2 จะกล่าวถึงสองส่วนที่สำคัญ ได้แก่
ผู้อ่านอาจตั้งคำถามว่าถ้าไม่ตั้งให้มีคุณสมบัติ Autogrowth แล้ว หากบันทึกจนเต็มขนาดที่ตั้งไว้จะเกิดอะไรขึ้น
ผู้เขียนขออธิบายก่อนว่าไฟล์ Transaction Log นั่นใช้บันทึก Transaction ซึ่งหมายถึง ชุดคำสั่งที่มี activity ในการ Insert, Update หรือ Delete ข้อมูลทั้งที่มีการประกาศชุดคำสั่งเป็น Transaction ด้วยคำสั่ง BEGIN Transaction ถือเป็น Explicit Transaction หรือแม้แต่การ การ Insert, Update หรือ Delete โดยไม่ได้รวมเป็นชุดคำสั่งและประกาศเป็น Transaction แต่อย่างใด หรือ Implicit Transaction นั่นเอง
Activity เหล่านี้จะบันทึกลงในไฟล์ Transaction Log และหากบันทึกลงไม่ได้ ก็หมายถึงเราไม่สามารถทำ Explicit Transaction และ Implicit Transaction ได้
พูดง่ายๆ ก็คือ เราจะไม่สามารถ Insert, Update และ Delete ข้อมูลได้ในฐานข้อมูลนี้ นั่นเองครับ จะทำได้เพียง Select ข้อมูลออกไปดูได้เท่านั้น
การทำงานของฐานข้อมูลจึงทำงานได้คล้ายกับฐานข้อมูลที่มีการตั้งสถานะเป็น Read-Only ผู้เขียนขอย้ำว่าผู้เขียนใช้คำว่า “คล้าย” นะครับ
ผู้อ่านสามารถดูว่าไฟล์ Transaction Log ของผู้อ่านแยกย่อยเป็น VLF อย่างไรได้โดยใช้คำสั่ง DBCC LOGINFO ในขณะอยู่ในฐานข้อมูลที่ต้องการตรวจสอบดังรูป
- Virtual Log Files ( VLF) เมื่อเราสร้างไฟล์ Transaction Log ที่มี Extension เป็น .LDF นั้นในที่นี้จะเรียกว่า Physical Log File โดยจะถูกแบ่งเป็นส่วนย่อยๆ เรียกว่า Virtual Log Files เพื่อเป็นการแบ่งเขตแดนว่าในส่วน VLF ใดเป็นส่วนที่ Active และส่วนใดเป็น Non-Active นั่นเอง
- Log Sequence Number (LSN) คือหมายเลขระบุ Transaction Log ซึ่งจะมีลักษณะเรียงลำดับกันไป
ผู้อ่านอาจตั้งคำถามว่าถ้าไม่ตั้งให้มีคุณสมบัติ Autogrowth แล้ว หากบันทึกจนเต็มขนาดที่ตั้งไว้จะเกิดอะไรขึ้น
ผู้เขียนขออธิบายก่อนว่าไฟล์ Transaction Log นั่นใช้บันทึก Transaction ซึ่งหมายถึง ชุดคำสั่งที่มี activity ในการ Insert, Update หรือ Delete ข้อมูลทั้งที่มีการประกาศชุดคำสั่งเป็น Transaction ด้วยคำสั่ง BEGIN Transaction ถือเป็น Explicit Transaction หรือแม้แต่การ การ Insert, Update หรือ Delete โดยไม่ได้รวมเป็นชุดคำสั่งและประกาศเป็น Transaction แต่อย่างใด หรือ Implicit Transaction นั่นเอง
Activity เหล่านี้จะบันทึกลงในไฟล์ Transaction Log และหากบันทึกลงไม่ได้ ก็หมายถึงเราไม่สามารถทำ Explicit Transaction และ Implicit Transaction ได้
พูดง่ายๆ ก็คือ เราจะไม่สามารถ Insert, Update และ Delete ข้อมูลได้ในฐานข้อมูลนี้ นั่นเองครับ จะทำได้เพียง Select ข้อมูลออกไปดูได้เท่านั้น
การทำงานของฐานข้อมูลจึงทำงานได้คล้ายกับฐานข้อมูลที่มีการตั้งสถานะเป็น Read-Only ผู้เขียนขอย้ำว่าผู้เขียนใช้คำว่า “คล้าย” นะครับ
ผู้อ่านสามารถดูว่าไฟล์ Transaction Log ของผู้อ่านแยกย่อยเป็น VLF อย่างไรได้โดยใช้คำสั่ง DBCC LOGINFO ในขณะอยู่ในฐานข้อมูลที่ต้องการตรวจสอบดังรูป
จากรูปจะเห็นว่าคอลัมน์ Field มีค่าเป็น 2 ทั้งหมดแสดงว่าฐานข้อมูล TestTLOG นี้มี Physical Log File (ไฟล์ .LDF) เพียงไฟล์เดียว (ไม่มีประโยชน์ที่จะสร้าง Physical Log File หลายไฟล์บนดิสก์ หรือ ชุดดิสก์เดียวกัน ผู้เขียนยืนยันและเปิดให้มีการอภิปรายเรื่องนี้โดยละเอียดกับผู้เข้าฝึกอบรม)
ส่วนในคอลัมน์ Status หากมีค่าเป็น 0 นั่นหมายถึง VLF นั้นสามารถนำกลับไปบันทึกข้อมูล Transaction ได้ใหม่
หรือเป็น VLF ที่ยังไม่ได้ถูกใช้ หากมีค่าเป็น 2 แสดงว่าเป็น VLF ที่ยัง active อยู่
จากนี้ผู้เขียนจะนำส่วนของ LSN มารวมด้วย เพื่ออธิบายสถานะ active และ non-active โดยดูได้จากรูปข้างล่าง
ส่วนในคอลัมน์ Status หากมีค่าเป็น 0 นั่นหมายถึง VLF นั้นสามารถนำกลับไปบันทึกข้อมูล Transaction ได้ใหม่
หรือเป็น VLF ที่ยังไม่ได้ถูกใช้ หากมีค่าเป็น 2 แสดงว่าเป็น VLF ที่ยัง active อยู่
จากนี้ผู้เขียนจะนำส่วนของ LSN มารวมด้วย เพื่ออธิบายสถานะ active และ non-active โดยดูได้จากรูปข้างล่าง

จากรูป จะเห็น Transaction ถูกบันทึกลงในไฟล์ Transaction Log ซึ่งมีหมายเลข LSN เรียงจากมากไปหาน้อยตามลำดับการเกิดขึ้นของ Transaction
โดย Transaction ใดสิ้นสุดแล้วจะมีปลายลูกศรด้านขวาและมีสีเทา แต่หาก Transaction ใดยังไม่สิ้นสุด (ยัง active อยู่) จะไม่มีปลายลูกศรด้านขวาและมีสีแดง
โดยที่
ในที่นี้คือบันทึกต่อไปที่ VLF6 และ VLF7 นั่นเอง และเมื่อถึง End of File แล้วจะเวียนกลับมาใช้พื้นที่ในส่วน Begin of File
ในที่นี้คือเริ่มจาก VLF1 ในลักษณะคิววงกลม ขึ้นอยู่กับว่า VLFs ที่ถูกเวียนกลับมาใช้จะพร้อมหรือว่างให้บันทึกข้อมูลลงไปได้หรือไม่
ไม่ใช่จู่ๆ VLFs ที่เป็น non-active แล้วจะสามารถบันทึกข้อมูลแทนข้อมูลเดิมลงไปได้เลย ถึงแม้จะเป็น non-active แล้ว ก็ต้องมีการจัดการอย่างเหมาะสมกับข้อมูล Transaction ที่อยู่ในส่วนของ non-active ด้วย
ผู้อ่านจะบันทึกข้อมูล Transaction ลงไปในส่วนที่เวียนกลับมาได้อย่างถูกต้อง ก็ ต่อเมื่อได้ทำการ Truncate กับ VLFs เหล่านั้นอย่างเหมาะสมและปลอดภัยเท่านั้น
โดย Transaction ใดสิ้นสุดแล้วจะมีปลายลูกศรด้านขวาและมีสีเทา แต่หาก Transaction ใดยังไม่สิ้นสุด (ยัง active อยู่) จะไม่มีปลายลูกศรด้านขวาและมีสีแดง
โดยที่
- VLF1 และ VLF2 มีแต่ Transaction ที่สิ้นสุดไปแล้ว จึงถือว่าเป็น VLFs ที่ non-active
- VLF3, VLF4 และ VLF5 มีทั้ง Transaction ที่สิ้นสุดไปแล้ว และ Transaction ที่ยังไม่สิ้นสุด จึงถือว่าเป็น VLFs ที่ active อยู่
- VLF6 และ VLF7 ยังไม่มีการบันทึก Transaction จึงถือว่าเป็น VLFs ที่ non-active เช่นกัน
ในที่นี้คือบันทึกต่อไปที่ VLF6 และ VLF7 นั่นเอง และเมื่อถึง End of File แล้วจะเวียนกลับมาใช้พื้นที่ในส่วน Begin of File
ในที่นี้คือเริ่มจาก VLF1 ในลักษณะคิววงกลม ขึ้นอยู่กับว่า VLFs ที่ถูกเวียนกลับมาใช้จะพร้อมหรือว่างให้บันทึกข้อมูลลงไปได้หรือไม่
ไม่ใช่จู่ๆ VLFs ที่เป็น non-active แล้วจะสามารถบันทึกข้อมูลแทนข้อมูลเดิมลงไปได้เลย ถึงแม้จะเป็น non-active แล้ว ก็ต้องมีการจัดการอย่างเหมาะสมกับข้อมูล Transaction ที่อยู่ในส่วนของ non-active ด้วย
ผู้อ่านจะบันทึกข้อมูล Transaction ลงไปในส่วนที่เวียนกลับมาได้อย่างถูกต้อง ก็ ต่อเมื่อได้ทำการ Truncate กับ VLFs เหล่านั้นอย่างเหมาะสมและปลอดภัยเท่านั้น
จากบทความนี้จะทำให้ทุกท่านรู้จักกับการทำงานของ Virtual Log Files ( VLF) และ Log Sequence Number (LSN) แล้ว
ว่าการทำงานในระดับไฟล์นั้นทำงานอย่างไร มีการไล่ลำดับการทำงานอย่างไร
และการ Backup Transaction Log จะส่งผลต่อไฟล์ที่เป็น Non-Active และ Active อย่างไร
หรือ ส่งผลต่อเนื้อที่ที่จะนำกลับมาใช้ได้ใหม่อย่างไร
ทำให้เราเข้าใจการทำงานและเพื่อจะได้กำหนดค่าให้กับ Transaction Log ได้อย่างดียิ่งขึ้น
ติดตามบทความสุดท้าย ซึ่งจะพาทุกท่านมาเรียนรู้ การ Truncate Log และการตั้งค่า Recovery ให้กับ Microsoft SQL Server
พร้อมทั้งบทสรุปการทำงานกับ Transaction Log ในตอน Microsoft SQL Server เพื่อที่จะจัดการกับ Transaction Log ได้อย่างมีประสิทธิภาพ
กับบทความ Transaction Log Management ตอนที่ 3 ได้ที่ https://www.9experttraining.com/articles/sql-server-transaction-log-management-3
หากมีข้อเสนอแนะให้เราทำบทความด้านใดเพื่อที่จะสร้างความรู้ความเข้าใจที่ถูกต้องในการใช้งาน Microsoft SQL Server แบบผู้เชี่ยวชาญ
สามารถส่ง Email มาได้ที่ [email protected] ครับ
ว่าการทำงานในระดับไฟล์นั้นทำงานอย่างไร มีการไล่ลำดับการทำงานอย่างไร
และการ Backup Transaction Log จะส่งผลต่อไฟล์ที่เป็น Non-Active และ Active อย่างไร
หรือ ส่งผลต่อเนื้อที่ที่จะนำกลับมาใช้ได้ใหม่อย่างไร
ทำให้เราเข้าใจการทำงานและเพื่อจะได้กำหนดค่าให้กับ Transaction Log ได้อย่างดียิ่งขึ้น
ติดตามบทความสุดท้าย ซึ่งจะพาทุกท่านมาเรียนรู้ การ Truncate Log และการตั้งค่า Recovery ให้กับ Microsoft SQL Server
พร้อมทั้งบทสรุปการทำงานกับ Transaction Log ในตอน Microsoft SQL Server เพื่อที่จะจัดการกับ Transaction Log ได้อย่างมีประสิทธิภาพ
กับบทความ Transaction Log Management ตอนที่ 3 ได้ที่ https://www.9experttraining.com/articles/sql-server-transaction-log-management-3
หากมีข้อเสนอแนะให้เราทำบทความด้านใดเพื่อที่จะสร้างความรู้ความเข้าใจที่ถูกต้องในการใช้งาน Microsoft SQL Server แบบผู้เชี่ยวชาญ
สามารถส่ง Email มาได้ที่ [email protected] ครับ