การย้ายฐานข้อมูล SQL Server ไปยังดิสก์ใหม่ขณะออนไลน์


11

ฉันมีฐานข้อมูลเซิร์ฟเวอร์ SQL ขนาด 1.4TB ที่พยายามอย่างหนักกับดิสก์ I / O เราได้ติดตั้งอาร์เรย์ SSD ใหม่ลงในเซิร์ฟเวอร์ที่จะแก้ปัญหาทั้งหมดของเราเราเพิ่งจะโต้วาทีวิธีที่ดีที่สุดในการย้ายฐานข้อมูลไปทั่ว เป็นการดีถ้าเราสามารถทำได้โดยไม่หยุดทำงานนั่นเป็นสิ่งที่ดีที่สุด แต่ในกรณีที่ตัวเลือกอยู่ระหว่างสองวันของประสิทธิภาพที่ไม่ดี (เช่นขณะคัดลอกข้อมูล) เมื่อเทียบกับการหยุดทำงานสองชั่วโมงตัวเลือกหลังอาจเหมาะสมกว่า

จนถึงตอนนี้วิธีแก้ไขปัญหาที่เราพบคือ:

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

  • การคัดลอกระดับบล็อก การใช้ยูทิลิตีคล้าย rsync เราจะคัดลอกไฟล์ข้ามพื้นหลังในขณะที่ฐานข้อมูลกำลังทำงาน เมื่อเราพร้อมที่จะย้ายข้อมูลเราใช้ออฟไลน์ DB ทำสำเนาที่แตกต่างกันโดยใช้ยูทิลิตี้นี้จากนั้นชี้เซิร์ฟเวอร์ SQL ไปที่ไฟล์ใหม่และนำมาออนไลน์ ไม่ทราบเวลาที่นี่ เราไม่ทราบว่าต้องใช้เวลานานเท่าใดในการวิเคราะห์ความแตกต่างของ 1.4TB และคัดลอกสิ่งนั้นข้าม ข้อกังวลอื่น ๆ ของเราคือการคัดลอกระดับบล็อกจะทำให้ไฟล์ในบางสถานะไม่สามารถอ่านได้โดย SQL Server และเราจะเสียเวลา

  • การโยกย้าย SQL สร้างไฟล์ข้อมูล SQL ขนาด 1.4TB ใหม่บนดิสก์ใหม่และปิดใช้งาน autogrowth กับไฟล์อื่นทั้งหมด จากนั้นรัน DBBC SHRINKFILE (-file_name-, EMPTYFILE) ในไฟล์ข้อมูลอื่น ๆ ทั้งหมด เมื่อข้อมูลทั้งหมดผ่านไปแล้วฉันจะใช้เวลาตามกำหนดเวลาเพื่อย้ายไฟล์ MDF ไปยัง SSD และลบไฟล์ที่ไม่ได้ใช้อื่น ๆ ออก ฉันชอบสิ่งนี้เพราะมันช่วยลดเวลาหยุดทำงาน แต่ฉันไม่รู้ว่าจะใช้เวลานานแค่ไหนและมันจะทำให้ประสิทธิภาพในการทำงานลดลงหรือไม่ในขณะที่กำลังเกิดขึ้น

เราไม่มีสภาพแวดล้อมในการโหลดและประสิทธิภาพใด ๆ ที่จะทดสอบสิ่งนี้ ฉันสามารถตรวจสอบได้ว่ากลยุทธ์จะใช้งานได้กับสภาพแวดล้อมการแสดงละครของเรา แต่ไม่ใช่ผลกระทบและไม่ใช่ประสิทธิภาพ


ไฟล์ข้อมูลของคุณถูกเก็บไว้ในพาร์ติชัน LVM หรือไม่?
Marco

1
don't know how long it will take to do a differential analysis of 1.4TBอย่างน้อยตราบใดที่ใช้ในการอ่านข้อมูลนั้น ฉันไม่คิดว่าความคิด rsync ช่วยอะไรได้มากถ้ามีอะไร rsync ถูกสร้างขึ้นมาเพื่อรับมือกับเครือข่ายที่ช้า
usr

2
แทนที่จะใช้ EMPTYFILE ฉันจะสร้างดัชนีทั้งหมดไปยังกลุ่มไฟล์ใหม่ที่อยู่บน SSD วิธีการที่ดัชนีจะปรากฏที่ดีและจัดระเบียบ EMPTYFILE อาจแยกส่วนพวกเขาไม่แน่ใจ
usr

คำตอบ:


14

วิธีการหนึ่งที่จะย้ายฐานข้อมูลทั้งหมดอยู่กับและBACKUP RESTOREฐานข้อมูลจะไม่พร้อมใช้งานในระหว่างการสลับครั้งสุดท้าย แต่การหยุดทำงานควรมีเพียงเล็กน้อยกับการวางแผน ขั้นตอนนี้จะถือว่าโมเดลการกู้คืนFULLหรือBULK_LOGGED:

1) ทำการสำรองข้อมูลเต็มรูปแบบ (หรือใช้ที่มีอยู่ของคุณ)

2) คืนค่าการสำรองข้อมูลเต็มรูปแบบล่าสุดเป็นชื่อฐานข้อมูลที่แตกต่างกันระบุWITH MOVEตัวเลือกในการย้ายไฟล์บนที่จัดเก็บข้อมูล SSD ตามต้องการและNORECOVERYตัวเลือกเพื่อให้สามารถเรียกคืนข้อมูลสำรอง

3) RESTORE...WITH NORECOVERYใช้การเปลี่ยนแปลงที่เพิ่มขึ้นไปยังฐานข้อมูลใหม่จนกว่าจะถึงเวลาของการตัดในช่วงสุดท้ายกับการสำรองข้อมูลล็อกธุรกรรมและ สิ่งนี้จะลดเวลาหยุดทำงานของการสลับไปยังฐานข้อมูลใหม่เป็นครั้งสุดท้าย

4) WITH RECOVERYในการสลับไปยังฐานข้อมูลใหม่ที่ใช้แอพลิเคชันออฟไลน์ทำการสำรองข้อมูลล็อกธุรกรรมสุดท้ายและนำไปใช้กับฐานข้อมูลใหม่ สุดท้ายเปลี่ยนชื่อฐานข้อมูลต้นฉบับเป็นชื่ออื่นและเปลี่ยนชื่อฐานข้อมูลที่ย้ายไปเป็นชื่อเดิม วางฐานข้อมูลเก่าตามที่คุณสะดวก

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


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

-6
Good approach is to use SQL REPLICATION between two server
once all data replicated on SSD server then take current server offline 
and switch to SSD server.

2
คุณได้รับการโหวตเพราะคุณไม่ได้ตอบคำถาม มีเพียงเซิร์ฟเวอร์เดียวในสถานการณ์ที่อยู่ระหว่างการสนทนา
AakashM

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

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