ฉันมีฐานข้อมูลเซิร์ฟเวอร์ 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 และลบไฟล์ที่ไม่ได้ใช้อื่น ๆ ออก ฉันชอบสิ่งนี้เพราะมันช่วยลดเวลาหยุดทำงาน แต่ฉันไม่รู้ว่าจะใช้เวลานานแค่ไหนและมันจะทำให้ประสิทธิภาพในการทำงานลดลงหรือไม่ในขณะที่กำลังเกิดขึ้น
เราไม่มีสภาพแวดล้อมในการโหลดและประสิทธิภาพใด ๆ ที่จะทดสอบสิ่งนี้ ฉันสามารถตรวจสอบได้ว่ากลยุทธ์จะใช้งานได้กับสภาพแวดล้อมการแสดงละครของเรา แต่ไม่ใช่ผลกระทบและไม่ใช่ประสิทธิภาพ
don't know how long it will take to do a differential analysis of 1.4TB
อย่างน้อยตราบใดที่ใช้ในการอ่านข้อมูลนั้น ฉันไม่คิดว่าความคิด rsync ช่วยอะไรได้มากถ้ามีอะไร rsync ถูกสร้างขึ้นมาเพื่อรับมือกับเครือข่ายที่ช้า