Transaction log VLFs สำคัญต่อประสิทธิภาพเพียงใด?


12

VLF สำคัญแค่ไหนเมื่อพิจารณาประสิทธิภาพของฐานข้อมูล อะไรจะอธิบายสถานการณ์ที่เหมาะสมสำหรับ VLF


สำหรับการอ่านเพิ่มเติมโปรดดูคำถามของฉันที่dba.stackexchange.com/questions/25408/ …
Max Vernon

เจ๋ง - ฉันเห็นว่าสิ่งนี้มีประโยชน์สำหรับการรายงานเกี่ยวกับประสิทธิภาพ
the_good_pony

1
@DBAWaffle อ้างถึง: การทดลองกับ SQL Server VLFs, ส่วนที่ 1จาก Glenn Berry -> sqlskills.com/blogs/glenn/ …
Kin Shah

คำตอบ:


17

ไฟล์บันทึกเสมือนคืออะไร

SQL Server แบ่งไฟล์บันทึกธุรกรรมสำหรับแต่ละฐานข้อมูลเป็นชิ้นเล็ก ๆ เรียกว่า 'ไฟล์บันทึกเสมือน' (หรือ VLF สำหรับระยะสั้น) ฟังก์ชั่นหลักของพวกเขาคือตัวทำเครื่องหมายที่ถูกตัดทอนที่การสำรองข้อมูลบันทึกนั่นคือ SQL Server จะล้าง (และทำเครื่องหมายสำหรับการกลับมาใช้ใหม่) VLF ที่ว่างเปล่าอย่างสมบูรณ์ MSDN มีชิ้นส่วนในการเข้าสู่ระบบการทำธุรกรรม - สถาปัตยกรรมทางกายภาพ

อะไรเป็นตัวกำหนดจำนวน VLF

แต่ละครั้งที่ล็อกไฟล์โตขึ้น (ไม่ว่าจะผ่าน autogrowth หรือ manual growth) ส่วนใหม่ของล็อกไฟล์จะถูกแบ่งออกเป็นจำนวน VLF ตามหมดจดตามขนาดของส่วนใหม่ (ล็อกธุรกรรมที่มีอยู่ถูกทิ้งไว้ตามลำพัง) ดังนั้นการตั้งค่า autogrowth ขนาดเล็ก (เช่น 10% autogrowth ที่เป็นค่าเริ่มต้น) จะทำให้ VLF จำนวนมากถูกสร้างขึ้น

อะไรคือความหมายของ VLF จำนวนมาก?

ปัญหาหลักสาเหตุ VLF จำนวนมากคือ:

  • การกู้คืนช้า (การกู้คืนเป็นระยะระหว่างการกู้คืนฐานข้อมูลโดยที่การทำธุรกรรมเสร็จสมบูรณ์จะถูกเขียนไปยังหน้าข้อมูลและธุรกรรมที่ไม่สมบูรณ์จะถูกย้อนกลับ)
  • ประสิทธิภาพของตัวอ่านบันทึกการทำงานช้าลงในการตั้งค่าการทำมิเรอร์ฐานข้อมูล
  • ประสิทธิภาพการทำงานช้าในระหว่างการสร้างสแน็ปช็อตฐานข้อมูล (โปรดทราบว่านี่รวมถึงฟังก์ชั่นบางอย่างDBCCเนื่องจากใช้สแน็ปช็อตฐานข้อมูลในพื้นหลังเพื่ออำนวยความสะดวกในการตรวจสอบความสอดคล้องโดยไม่ปิดกั้น)

ฉันจะทราบได้อย่างไรว่าฐานข้อมูลของฉันมีกี่ VLF

DBCC LOGINFOจะส่งคืน 1 แถวสำหรับ VLF แต่ละรายการในบันทึกธุรกรรมของฐานข้อมูลของคุณ คำถามนี้มีสคริปต์ที่มีประโยชน์สองสามข้อสำหรับการใช้งานกับฐานข้อมูลทั้งหมดบนเซิร์ฟเวอร์

VLF มีจำนวนเท่าใดเกินไป

นั่นคือการตัดสินที่คุณต้องทำเพื่อตัวเอง กฎส่วนบุคคลของฉันคือว่าภายใต้ 50 ไม่คุ้มกับ messing และมากกว่า 100 (หรือมากกว่านั้น) และฉันแก้ไขการตั้งค่า autogrowth และทำบันทึกจิตไป (ในหน้าต่างการบำรุงรักษาถัดไป) หดตัวและปลูกบันทึกใหม่ .

ช่วยด้วย! ฉันมี VLF แสนล้านและการกู้คืนฐานข้อมูลใช้เวลาทั้งวัน!

ร่างสั้น (จากบล็อกของ Kimberly Tripp ):

  • ตรวจสอบให้แน่ใจว่าคุณเป็นคนเดียวที่เชื่อมต่ออยู่ในฐานข้อมูล (ดังนั้นให้ทำสิ่งนี้ระหว่างหน้าต่างการบำรุงรักษา)
  • สำรองข้อมูลล็อกธุรกรรมไปยังดิสก์ (โดยใช้BACKUP LOG)
  • รันDBCC SHRINKFILEด้วยTRUNCATEONLYเพื่อย่อขนาดไฟล์บันทึกให้เล็กที่สุดเท่าที่จะเป็นไปได้
  • ดำเนินALTER DATABASE [...] MODIFY FILE [...] SIZE=newsizeการปรับขนาดบันทึกธุรกรรมของคุณในขั้นตอนเดียว **

** หมายเหตุ - หากคุณมีไฟล์บันทึกที่มีขนาดใหญ่มาก (หลายสิบ GB หรือมากกว่า) คุณอาจต้องการปรับขนาดในหลายขั้นตอนเพื่อรับ VLFs ในจำนวนที่เหมาะสมด้วยขนาดที่เหมาะสมเพื่อหลีกเลี่ยงการสำรองข้อมูลปูม 'ก้อน' มากเกินไป ตั้งแต่ VLFs เป็นหน่วยของการตัดที่พวกเขายังตรวจสอบบันทึกขนาดการสำรองข้อมูลตามรายละเอียดในบล็อกของคิม


ขอบคุณคุณคิดว่า VLF หลายตัวจะเห็นได้ชัดว่าเป็นอุปสรรคต่อประสิทธิภาพการทำงานในสภาพแวดล้อม OLTP ที่มีการเปลี่ยนแปลงข้อมูลเป็นประจำมีจำนวนมากที่ต้องทำอย่างไร
the_good_pony

VLF จำนวนมากมีความโดดเด่นจริงๆในสถานการณ์ที่ฉันได้กล่าวไว้ข้างต้น พวกเขาอาจขัดขวางประสิทธิภาพเล็กน้อยในสภาพแวดล้อม OLTP แต่เพียงเล็กน้อยดังนั้น
Simon Righarts

1
สำหรับฉันการกู้คืนมากกว่า 20 ชั่วโมงขึ้นไปเป็นสิ่งที่ทำให้ฉันเชื่อมั่นในความสำคัญของการรักษาระดับ VLF ที่ต่ำกว่า (1,000)
Max Vernon

@SimonRigharts ฉันอยากรู้อยากเห็น VLF จำนวนมากส่งผลกระทบต่อประสิทธิภาพของธุรกรรมปกติหรือไม่? หรือส่งผลกระทบต่อการสำรองข้อมูลและเรียกคืนเท่านั้น
Chris Aldrich

@ChrisAldrich อาจมีบางส่วนของค่าใช้จ่ายเล็ก ๆ น้อย ๆ ในการทำธุรกรรมหากมันครอบคลุมขอบเขต VLF (แต่ถ้ามีฉันไม่เคยได้ยินมัน) แต่มีรายละเอียดในคำถามเพียงครั้งเดียวคุณจะสังเกตเห็นผลกระทบของ VLF จำนวนมากอยู่ระหว่างการกู้คืนการทำมิรเรอร์หรือสแน็ปช็อต
Simon Righarts
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.