ฉันจะสำรองฐานข้อมูล SQL Server ขนาดใหญ่โดยไม่ส่งผลต่อประสิทธิภาพได้อย่างไร


18

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

ฐานข้อมูลเองมีขนาดประมาณ 300GB และงานสำรองเริ่มต้นที่ 4:30 น. และยังไม่เสร็จจนกว่าจะถึงเวลา 7:00 น. ไวยากรณ์ปัจจุบันของงานสำรองของเราคือ:

BACKUP DATABASE [DatabaseName]
TO DISK = N'E:\Database Backups\DatabaseName.Bak'
WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak',
NOSKIP, STATS = 10, NOFORMAT

E:\ เป็นพาร์ติชันบนเซิร์ฟเวอร์ที่เก็บทั้งฐานข้อมูลและสำรองฐานข้อมูล

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

มีวิธีการเรียกใช้งานการสำรองข้อมูลนี้จึงไม่ส่งผลกระทบต่อประสิทธิภาพการค้นหาในขณะที่ทำงานอยู่หรือไม่

เรากำลังใช้ SQL Server 2005

คำตอบ:


21
  1. แยก I / O สำรองออกจาก I / O ที่เหลือในระบบของคุณ ในขณะที่อาจใช้เวลานานขึ้นและมีแนวโน้มที่จะ hiccups การสำรองข้อมูลผ่านเครือข่ายแทนดิสก์ท้องถิ่นอาจช่วยบรรเทาผลกระทบโดยตรงกับอินสแตนซ์ แม้ในเครื่องเสมือนคุณควรจะสามารถเปิดเผยที่เก็บข้อมูลอื่นเพื่อให้ SQL Server สามารถเขียนไปยังระบบย่อย I / O อื่น
  2. มันจะไม่สร้างความแตกต่างใด ๆ แต่ถ้านี้ทำงานจากงานทำไมคุณต้องใช้STATSตัวเลือก? คุณแน่ใจว่าคุณจำเป็นต้องมีตัวเลือกอื่น ๆ ( NOUNLOAD, NOSKIP, NOFORMAT)? ฉันไม่ได้ทำการทดสอบประสิทธิภาพที่ครอบคลุมเกี่ยวกับตัวเลือกทั้งหมด แต่ IMHO คุณควรใช้ตัวเลือกที่คุณรู้ว่าคุณต้องการเท่านั้น
  3. เรียกใช้การสำรองข้อมูลเต็มรูปแบบของคุณในเวลาอื่นที่ไม่ยุ่งเกี่ยวกับกิจกรรมของผู้ใช้ปกติ สิ่งนี้ไม่สามารถทำได้เสมอไปแม้กระทั่งในการปฏิบัติการตลอด 24 ชั่วโมงทุกวัน
  4. ถ้าคุณย้ายไปที่ 2008+ คุณสามารถใช้ประโยชน์จากการบีบอัดข้อมูลสำรอง (Enterprise ในปี 2008, Standard หรือ Enterprise ใน 2008 R2 +) หากคุณไม่สามารถย้ายไปยังปี 2008 หรือไม่มีรุ่นที่เพียงพอมีเครื่องมือสำรองข้อมูลของบุคคลที่สามที่จะทำการบีบอัดให้คุณและพวกเขาก็ทำได้ดีทีเดียว ตั้งแต่ปี 2008 ฉันสามารถใช้การบีบอัดแบบเนทีฟและฉันก็พอใจกับความเร็วและการบีบอัด% ที่นั่นโดยไม่จำเป็นต้องลงทุนในบุคคลที่สามต่อไป แต่ในปี 2548 ฉันจำได้ว่าประสบความสำเร็จกับRed-Gate SQL Backup ; Quest LiteSpeedนั้นค่อนข้างดี แต่ฉันไม่รู้ว่าจะต้องใช้ความพยายามแบบใดนับตั้งแต่การเข้าซื้อกิจการของ Dell
  5. หากฐานข้อมูลของคุณอยู่ในการกู้คืนแบบเต็มคุณสามารถใช้เวลานานกว่าในการสำรองข้อมูลเต็มรูปแบบโดยทำการค้าเพื่อความรู้ที่ว่าหากคุณต้องกู้คืนเป็นระยะเวลาหนึ่งคุณอาจมีบันทึกเพิ่มเติมเพื่อกู้คืน คุณสามารถรวมตัวเลือกนี้กับข้อเสนอแนะของ Ali ด้านล่างในการรับความแตกต่างตลอดทั้งสัปดาห์ - หากคุณต้องกู้คืนในวันพฤหัสบดีคุณจะต้องเรียกคืน 1 เต็ม 1 diff 1 และบันทึกตั้งแต่ diff
  6. หากคุณมีข้อมูลจำนวนมากที่เก่าและไม่มีการเปลี่ยนแปลงคุณสามารถพิจารณาโฮสต์นั้นในฐานข้อมูลอื่นด้วยแผนการกู้คืนที่แตกต่างกันหรืออย่างน้อยในกลุ่มไฟล์ที่แตกต่างกันและแยกการสำรองข้อมูลของคุณด้วยวิธีนั้น หากคุณมีข้อมูลอ้างอิงหรือเก็บถาวรข้อมูลที่สามารถสร้างเป็นแบบอ่านอย่างเดียวและหากคุณอยู่ในการกู้คืนอย่างง่ายคุณสามารถย้ายไปยังกลุ่มไฟล์แบบอ่านอย่างเดียวของตัวเองสำรองข้อมูลครั้งเดียวและไม่จำเป็นต้องรวมไว้ในการสำรองข้อมูลทุกคืน เคยอีกครั้ง ดูหัวข้อ MSDN เหล่านี้:

ทำการคืนค่าทีละน้อย

ตัวอย่าง: การกู้คืนทีละกลุ่มของกลุ่มไฟล์บางกลุ่มเท่านั้น (โมเดลการกู้คืนอย่างง่าย)


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

ไม่แน่ใจว่าจะชี้คุณไปในทิศทางที่ถูกต้องได้หรือไม่คุณสามารถแสดงที่เก็บข้อมูลอื่นไปยังเครื่องเสมือนได้หรือไม่?
Aaron Bertrand

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

3
ไม่ฉันหมายถึงการสำรองข้อมูลไปยังระบบย่อย I / O อื่น ๆ นอกเหนือจากดิสก์ที่คุณกำลังทำการอ่านและเขียนพร้อมกันสำหรับฐานข้อมูลและกิจกรรม tempdb ปกติ นี่อาจเป็นดิสก์ไดรฟ์ที่แตกต่างกันบนเซิร์ฟเวอร์เดียวกันการแชร์ในเครื่องอื่น LUN ที่แตกต่างกันบน SAN การแชร์ NAS และอื่น ๆ
Aaron Bertrand

I การกู้คืนทีละน้อยเป็นโซลูชันที่ยอดเยี่ยมที่ฉันไม่ได้คิดขอบคุณสำหรับการโพสต์!
Ali Razeghi

8

นี่เป็นปัญหาทั่วไปมีหลายวิธีและขึ้นอยู่กับสภาพแวดล้อมของคุณ ลองผ่านพวกเขาไป:

1- การบีบอัดข้อมูลสำรองในทันที

ในปี 2008 การบีบอัดข้อมูลสำรอง R1 มีให้บริการในองค์กรในปี 2008R2 มีให้ใช้งานในแบบมาตรฐาน นี่คือขนาดใหญ่ มันจะช่วยคุณประหยัดเวลาได้มาก หากคุณสามารถอัพเกรดได้ ถ้าคุณไม่สามารถตรวจสอบHyperBak RedGate ของยูทิลิตี้หรือเควส LiteSpeed ทั้งสองมีรุ่นทดลองใช้ฟรี

2- การสำรองข้อมูลเต็มและความต่าง

ฉันได้รับมรดกฐานข้อมูล 2TB ทำให้เกิดการหมดเวลาสำหรับ บริษัท อินเทอร์เน็ตรายใหญ่ 24/7 ที่ฉันทำงาน เราเปิดใช้งานการสำรองข้อมูลเต็มรูปแบบและส่วนต่างซึ่งช่วยให้เราประหยัดเวลาได้มาก ฉันจะสำรองข้อมูลทั้งหมดในวันอาทิตย์เวลา 12:00 น. เมื่อกิจกรรมอยู่ในระดับต่ำและจะมีความแตกต่างระหว่างสัปดาห์ สิ่งนี้ช่วยประหยัดพื้นที่ได้มาก Diff ทำงานแตกต่างจากบันทึกธุรกรรมขณะทำงานบนหน้าฐานข้อมูลใดที่เปลี่ยนแปลง การสำรองข้อมูลหน้าเปลี่ยนแปลงใด ๆ ดังนั้นคุณทำการคืนค่าเต็มแล้ว diff คืนค่าเพื่อเพิ่มหน้าที่แก้ไข

3- คอขวดของคุณคืออะไร?

การวิเคราะห์คอขวดเป็นสิ่งสำคัญในการวินิจฉัย คุณสำรองข้อมูลไปยังดิสก์อาเรย์เดียวกับไฟล์ข้อมูลของคุณหรือไม่ ไฟล์ข้อมูลของคุณถูกตรึงหรือไม่ DISK SEC / READ ของคุณและ DISK SEC / WRITE สำหรับดิสก์ข้อมูลระหว่างการสำรองข้อมูลคืออะไร? ฉันแก้ไขข้อมูลสำรองเพื่อสร้าง 4 ไฟล์ แต่ละไฟล์มีตัวเขียนเธรดของตัวเองและใน SAN ของเรานั้นใช้งานได้ดีมาก ลองทดสอบดูฉันใช้เวลา 45 นาทีในการสร้างไฟล์สำรองข้อมูล 4 ไฟล์ เพียงตรวจสอบให้แน่ใจว่าตัวชี้วัดดิสก์ของคุณในรายการด้านบนเหลือน้อย รับพื้นฐาน

4- ทำซ้ำไปยังเซิร์ฟเวอร์อื่นและสำรองข้อมูลนั้น

อันนี้มีความก้าวหน้าเล็กน้อย คุณต้องตรวจสอบให้แน่ใจว่าฐานข้อมูลที่จำลองแบบของคุณทันสมัยและคุณต้องการการตรวจสอบที่เหมาะสม หากเป็นเช่นนั้นคุณสามารถสำรองฐานข้อมูลที่จำลองแบบได้


เพียงแค่หัวขึ้นใน HyperBak ฉันมีมันไม่ได้รับผลประโยชน์จาก VLDB เมื่อฉันทดสอบในปลายปี 2011 ฉันพูดกับ RedGate และพวกเขากล่าวว่ามันเป็นข้อผิดพลาดดังนั้นหวังว่าจะได้รับการแก้ไขโดยตอนนี้ ฉันไม่คิดว่า 300GB จะถือเป็น VLDB ต่อไป แต่ระวังถ้ามันไม่ทำงานตามที่คาดไว้
Ali Razeghi

-1

คุณสามารถใช้พารามิเตอร์เหล่านี้:

BLOCKSIZE - เลือกขนาด 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 (เป็น KB)

BUFFERCOUNT - ระบุจำนวนทั้งหมดของบัฟเฟอร์ I / O ที่จะใช้สำหรับการดำเนินการสำรองข้อมูล คุณสามารถระบุจำนวนเต็มบวกใด ๆ อย่างไรก็ตามบัฟเฟอร์จำนวนมากอาจทำให้เกิดข้อผิดพลาด "หน่วยความจำไม่เพียงพอ" เนื่องจากพื้นที่ที่อยู่เสมือนไม่เพียงพอในกระบวนการ Sqlservr.exe - จาก MSDN

MAXTRNASFERSIZE - จาก 65536 ไบต์ (64 KB) ถึง 4194304 ไบต์ (4 MB)


-3

ลองมัน. จะแก้ไขปัญหาการหมดเวลาหมดอายุในขณะที่ db ขนาดใหญ่

Private Sub Command1_Click()
On Error Resume Next
Dim con As New Connection
Dim tm As String
con.CommandTimeout = 500'''Command timeout should be 500


 With con
    .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=dbiBMS;Data Source=192.168.103.4"
    .Open
 End With
 tm = CStr(Time)

con.Execute " backup database dbiBMS to disk='E:\Database_Backup\Test1.bak' with format "

con.Close
MsgBox tm
Exit Sub
x:
MsgBox Err.Description

End Sub

3
ฉันไม่คิดว่าการตั้งค่าการหมดเวลาเป็น 500 มิลลิวินาทีจะแก้ไขปัญหาการหมดเวลาที่หมดอายุ
vijayp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.