Backup internals - จะเกิดอะไรขึ้นเมื่องานสำรองทำงานในแง่ของการล็อคและค่าใช้จ่ายด้านประสิทธิภาพใน SQL Server


13

สำหรับ MySQL ฉันรู้ว่าฐานข้อมูลได้รับการสำรองข้อมูลแบบตารางต่อตารางในคำสั่ง SQL ผลลัพธ์นี้ในการล็อคและถ้าคุณอัปเดตคอลัมน์ในขณะที่สำรองข้อมูลคุณอาจพบปัญหาความสมบูรณ์

เพื่อความเข้าใจของฉันนี้ไม่ได้ใช้สำหรับ Microsoft SQL Server แต่ SQL Server จัดการกับสิ่งนี้ได้อย่างไร มีการตรึงภายในเพื่อให้ db สอดคล้องกันหรือไม่?

นอกจากนี้ฉันได้ยินมาว่าการสำรองข้อมูลเป็นเธรดเดี่ยวซึ่งหมายความว่าใช้คอร์เดียวเท่านั้นโดยสมมติว่าคุณสำรองข้อมูลเป็นไฟล์เดียว นอกจากนี้สมมติว่าคุณมีเครื่องมัลติคอร์เช่น 16 คอร์หรืออย่างน้อยก็สำคัญมากกว่าหนึ่ง

จากประสบการณ์ส่วนตัวของฉันฉันไม่เคยมีปัญหาเมื่อทำการสำรองข้อมูลไม่ล็อคหรือปัญหาค่าใช้จ่าย แต่ประสบการณ์ของฉันมี จำกัด นั่นเป็นเหตุผลที่ฉันแนะนำเสมอให้เปิดการบีบอัดข้อมูลสำรองในคุณสมบัติเซิร์ฟเวอร์

ดังนั้นจะเกิดอะไรขึ้นเมื่องานสำรองทำงาน และยังมีความแตกต่างอย่างมีนัยสำคัญสำหรับรุ่นที่แตกต่างกันอย่างไร เช่น 2008,2012 และ 2014 (ไม่ใช่ใบอนุญาต)


4
บทความนี้พอลแรนดัลเป็นจุดเริ่มต้นที่ดีสำหรับข้อมูลเกี่ยวกับการสำรองข้อมูลtechnet.microsoft.com/en-us/magazine/2009.07.sqlbackup.aspx
เจมส์เดอร์สัน

คำตอบ:


9

คะแนนทั้งหมดของคุณได้รับการกล่าวถึงในการสำรองข้อมูลโดย Paul Randal

30-01) การสำรองข้อมูลทำให้เกิดการบล็อค

เลขที่ดำเนินการสำรองข้อมูลไม่ได้ใช้ล็อควัตถุผู้ใช้ การสำรองข้อมูลทำให้โหลดการอ่านหนักมากในระบบย่อย I / O ดังนั้นจึงอาจดูเหมือนว่าเวิร์กโหลดกำลังถูกบล็อก แต่มันไม่ได้เป็นจริง มันเป็นเพียงการชะลอตัว มีกรณีพิเศษที่การสำรองข้อมูลที่ต้องรับส่วนขยายที่บันทึกจำนวนมากจะใช้การล็อกไฟล์ซึ่งสามารถบล็อกการดำเนินการของจุดตรวจสอบได้ แต่ DML จะไม่ถูกบล็อก

นอกจากนี้ฉันได้ยินมาว่าการสำรองข้อมูลเป็นเธรดเดี่ยวซึ่งหมายความว่าใช้คอร์เดียวเท่านั้นโดยสมมติว่าคุณสำรองข้อมูลเป็นไฟล์เดียว

การสำรองข้อมูลเมื่อทำกับไฟล์หรืออุปกรณ์เดียวจะใช้ 1 thread นักเขียน ดังนั้นหากคุณสำรองไฟล์หลายไฟล์ / อุปกรณ์ (เป็นไฟล์. bak หลายไฟล์) จะมีหนึ่งเธรดนักเขียนต่อไฟล์ / อุปกรณ์

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

ตรวจสอบ

  1. วิดีโอเตรียมความพร้อม Microsoft Certified Master (MCM) ของ SQL Server 2008 โดยเฉพาะ Backup Internals
  2. ดูที่การสำรองข้อมูลภายในและวิธีการติดตามการสำรองข้อมูลและคืนค่าปริมาณงาน (ตอนที่ 1) - โดย: Jonathan Kehayias
  3. ดูที่การสำรองข้อมูลภายในและวิธีการติดตามการสำรองข้อมูลและคืนค่าปริมาณงาน (ตอนที่ 2) - โดย: Jonathan Kehayias

7

บทความที่เขียนโดย Paul เกี่ยวกับการสำรองข้อมูลภายในนั้นยอดเยี่ยมและคุณต้องอ่าน เพิ่มสิ่งที่ผู้อื่นพูดและเน้นเฉพาะส่วนของคำถามของคุณ

นอกจากนี้ฉันได้ยินมาว่าการสำรองข้อมูลเป็นเธรดเดี่ยวซึ่งหมายความว่าใช้คอร์เดียวเท่านั้นโดยสมมติว่าคุณสำรองข้อมูลเป็นไฟล์เดียว นอกจากนี้สมมติว่าคุณมีเครื่องมัลติคอร์เช่น 16 คอร์หรืออย่างน้อยก็สำคัญมากกว่าหนึ่ง

การดำเนินการสำรองข้อมูลcan use parallelismแต่โปรดจำไว้ว่านี่ไม่ใช่การขนานที่ขับเคลื่อนโดย Optimizer ใน SQL Server โดยมีการขับเคลื่อนด้วยจำนวนดิสก์ที่เกี่ยวข้องจากการที่การสำรองข้อมูลต้องอ่านไฟล์ข้อมูลและที่การสำรองข้อมูลเขียนไฟล์ข้อมูลและจำนวนไฟล์สำรองที่สร้างขึ้น

คุณไม่สามารถใช้MAXDOPคำใบ้ในขณะที่ทำการสำรองข้อมูล SQL Server

คุณไม่สามารถสร้างแผนการดำเนินการใน SSMS สำหรับการดำเนินการสำรอง TSQL แบบง่าย ๆ

ความขนานที่ขับเคลื่อนโดยเครื่องมือเพิ่มประสิทธิภาพการสืบค้นใน SQL Server นั้นโดยทั่วไปแล้วสำหรับผู้ประกอบการที่เกี่ยวข้อง (จริง ๆ แล้วมันมีความซับซ้อนมากขึ้น แต่เพื่อความเรียบง่ายที่คุณสามารถทำได้) เนื่องจากการดำเนินการสำรองข้อมูลไม่เกี่ยวข้องกับตัวดำเนินการใด ๆ

ฉันเขียนบทความเกี่ยวกับ Technet Wiki เกี่ยวกับBackup และ parallelismที่ฉันใช้ตัวอย่างง่าย ๆ เพื่ออธิบาย parallelism ระหว่างการสำรองข้อมูล SQL Server ต่อไปนี้เป็นข้อสรุป

  1. หากไฟล์ฐานข้อมูลอยู่ในการดำเนินการสำรองข้อมูลหลายดิสก์จะเริ่มต้นที่เธรดต่ออุปกรณ์ไดรฟ์เพื่ออ่านข้อมูล ในทำนองเดียวกันถ้าทำการกู้คืนข้อมูลในหลาย ๆ ไดรฟ์ / จุดเชื่อมต่อการสำรองข้อมูลจะเริ่มต้นหนึ่งเธรดต่อไดรฟ์ / จุดเชื่อมต่อ

  2. แม้ว่าคุณจะทิ้งสำเนาสำรองหลายชุดในไดรฟ์เดียวกันเราก็จะมีหนึ่งเธรดต่อไฟล์สำรองที่ถูกทิ้ง

  3. ความขนานที่เกี่ยวข้องกับการสำรองข้อมูลนั้นสัมพันธ์กับแถบสี แต่ละแถบจะได้รับเธรดของผู้ปฏิบัติงานและเป็นส่วนเดียวของการสำรองข้อมูล / คืนค่าที่ควรพิจารณาว่าเป็นการดำเนินการแบบขนาน

  4. ระดับสูงสุดของความขนานไม่ส่งผลกระทบต่อการดำเนินการสำรองข้อมูล

ฉันได้รับความเห็นจากผู้เชี่ยวชาญเกี่ยวกับเรื่องนี้จาก Paul และ Bob Dorr

ดังนั้นจะเกิดอะไรขึ้นเมื่องานสำรองทำงาน และยังมีความแตกต่างอย่างมีนัยสำคัญสำหรับรุ่นที่แตกต่างกันอย่างไร เช่น 2008,2012 และ 2014 (ไม่ใช่ใบอนุญาต)

ฉันอยากจะแนะนำให้คุณอ่านบทความ blog.msdnโดย Bob Dorr บางจุดสำคัญที่เขาเน้นคือ

  1. เมื่อการสำรองข้อมูลเริ่มต้นจะสร้างชุดของบัฟเฟอร์ที่จัดสรรจากหน่วยความจำภายนอกพูลบัฟเฟอร์ เป้าหมายทั่วไป 4MB สำหรับแต่ละบัฟเฟอร์ส่งผลให้มีบัฟเฟอร์ประมาณ 4 ถึง 8 รายละเอียดเกี่ยวกับการคำนวณอยู่ใน: http://support.microsoft.com/kb/904804/en-us

  2. บัฟเฟอร์จะถูกเปลี่ยนระหว่างคิวว่างและคิวข้อมูล ตัวอ่านดึงบัฟเฟอร์ว่างเติมด้วยข้อมูลและวางลงในคิวข้อมูล ตัวเขียนดึงข้อมูลบัฟเฟอร์ที่กรอกข้อมูลจากคิวข้อมูลประมวลผลบัฟเฟอร์และกลับสู่รายการอิสระ

  3. คุณจะได้รับเครื่องเขียนต่ออุปกรณ์สำรองข้อมูลแต่ละครั้งจะดึงข้อมูลจากคิวข้อมูล ดังนั้นคำสั่งแบ็กอัพที่มีข้อกำหนดคุณสมบัติของดิสก์สี่ (4) จะมีตัวเขียนสี่ตัวและตัวอ่าน ผู้อ่านใช้ async I / O เพื่อให้สามารถติดตามผู้เขียนได้

คุณสามารถเปิดใช้trace flags 3213 and 3605งานทั้งสองแบบไม่มีเอกสารดังนั้นโปรดใช้มันในสภาพแวดล้อมการทดสอบและดูข้อความที่น่าสนใจที่ถูกทิ้งใน SQL Server errorlog สิ่งที่ชอบด้านล่างจะปรากฏขึ้น

Memory limit: 249MB
BufferCount:                7
Sets Of Buffers:            1
MaxTransferSize:            1024 KB
Min MaxTransferSize:        64 KB
Total buffer space:         7 MB
Tabular data device count:  1
Fulltext data device count: 0
Filestream device count:    0
TXF device count:           0
Filesystem i/o alignment:   512
Media Buffer count:            7
Media Buffer size:          1024KB

ฉันไม่ทราบเกี่ยวกับการเปลี่ยนแปลงที่สำคัญของรหัสสำรองสำหรับรุ่นต่างๆสิ่งต่าง ๆ ไม่ได้รับการบันทึกไว้ ฉันรู้เฉพาะเกี่ยวกับการปรับปรุงที่แนะนำในการSQL Server 2012 SP1 Cumulative Update 2,เปิดใช้งานการสำรองและเรียกคืนจากบริการเก็บข้อมูล Windows Azure Blob จาก SQL Server โดยใช้ TSQL หรือ SMO อ่านที่นี่


4

โดยทั่วไป SQL Server จะทำสำเนาสกปรกของทุกหน้าในดิสก์ หน้าเหล่านั้นมีแนวโน้มที่ไม่สอดคล้องกันหากมีกิจกรรมที่เกิดขึ้นพร้อมกันหรือถ้าก่อนหน้านี้มีกิจกรรมที่ไม่ใช่จุดตรวจ

จากนั้น SQL Server จะคัดลอกส่วนที่จำเป็นของบันทึกการทำธุรกรรมที่จำเป็นเพื่อนำหน้าล้าสมัยไปเป็นเวอร์ชั่นล่าสุดและทำให้ทุกอย่างสอดคล้องกันในการกู้คืน

ฉันไม่สามารถพูดคุยกับมัลติเธรดของการสำรองข้อมูลได้ ฉันหวังว่ามันจะเป็นแบบขนาน คุณจะสำรองฐานข้อมูล 10TB บนระบบย่อย IO 10GB / วินาทีได้อย่างไร


ขอบคุณ usr สำหรับคำตอบ แต่บางสิ่งไม่ชัดเจน จะเกิดอะไรขึ้นถ้าฉันได้ตั้งค่ารูปแบบการกู้คืนเป็นแบบง่าย ๆ หรือเรียกใช้คำสั่งเช่นตัดในระหว่างงานสำรอง นั่นหมายความว่าเซิร์ฟเวอร์ SQL ไม่สามารถนำสิ่งนี้ไปสู่สถานะที่สอดคล้องกันได้หรือไม่
RayofCommand

โมเดลบันทึกที่มีประสิทธิภาพระหว่างการสำรองข้อมูลเต็ม SQL Server จำเป็นต้องหมุนทุกอย่างไปข้างหน้าแม้ว่าคุณต้องการ SIMPLE การตัดทอนตารางเป็นการดำเนินการบันทึกและธุรกรรมไม่มีปัญหา DDL เป็นธุรกรรม
usr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.