รับ MS SQL Server เพื่อปล่อยพื้นที่ดิสก์


9

ตารางฐานข้อมูลที่มีการจัดการไม่ดีมีจำนวนมหาศาล 48 + กิ๊กบันทึกเด็กกำพร้า ฉันพยายามทำความสะอาดและทำให้ฮาร์ดไดรฟ์เต็มอันตรายของฉันกลับสู่สภาวะปกติ ฉันจะลบประมาณ 400 ล้านบันทึกจากตารางนี้ สิ่งนี้กำลังทำงานอยู่ขณะที่ฉันพิมพ์ ฉันสังเกตเห็นว่าฉันไม่เห็นการลดลงของพื้นที่ว่างในฮาร์ดไดรฟ์ของฉัน แต่ฉันเห็นหน่วยความจำลดลงในแบบสอบถามตารางระบบฉันกำลังทำงานเพื่อให้ได้ขนาดตาราง ฐานข้อมูลใช้ "Simple Recovery Model"

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

  1. เนื่องจากฐานข้อมูลไม่ควรมีขนาดนี้ มันยังไม่ดีสำหรับฉันที่จะหดหรือไม่
  2. นี่คือฐานข้อมูลการผลิต หากฉันย่อขนาดลงมันจะทำให้ระบบหยุดทำงานหรือล็อคฐานข้อมูลหรือไม่
  3. ใน SQL Server Management Studio คุณมีสองตัวเลือกสำหรับการย่อขนาดฐานข้อมูลหรือไฟล์ ให้สถานการณ์ของฉันสิ่งที่จะเป็นตัวเลือกที่ดีที่สุด?
  4. มีกฎเกี่ยวกับเปอร์เซ็นต์ของพื้นที่ว่างที่ควรมีฐานข้อมูลหรือไม่

การอ่านคำอธิบายแท็กของการย่อขนาดทำให้ฉันไม่ต้องการทำเช่นนั้น มีวิธีอื่นอีกไหม?

คำตอบ:


14

ฉันจะลบประมาณ 400 ล้านบันทึกจากตารางนี้

หวังว่าคุณกำลังทำมันเป็นชิ้น - เพื่อหลีกเลี่ยงการบันทึกธุรกรรมท้อถอย

สังเกตว่าฉันไม่เห็นการตกหล่นของฮาร์ดไดรฟ์

คุณไม่ต้องทำตามที่คุณต้องย่อไฟล์ฐานข้อมูลเพื่อลดพื้นที่ เพียงแค่การลบระเบียนเซิร์ฟเวอร์ SQL เคยชินปล่อยกลับพื้นที่ในการปฏิบัติการ

  1. เนื่องจากฐานข้อมูลไม่ควรมีขนาดนี้ มันยังไม่ดีสำหรับฉันที่จะหดหรือไม่

โดยทั่วไปถือว่าเป็นการปฏิบัติที่ไม่ดีเนื่องจากฐานข้อมูลควรถูกกำหนดอย่างเหมาะสม หากคุณมีความมั่นใจ 100% ว่าฐานข้อมูลของคุณจะไม่ไปได้อีกครั้งขนาดนี้ตกลงมันสำหรับคุณที่จะหดตัวลงฐานข้อมูล (ในสถานการณ์ของคุณ)

  1. นี่คือฐานข้อมูลการผลิต หากฉันย่อขนาดลงมันจะทำให้ระบบหยุดทำงานหรือล็อคฐานข้อมูลหรือไม่

ลดขนาดฐานข้อมูลเป็นอย่างมาก IO แนะนำให้ลดขนาดโดยใช้DBCC SHRINKFILEระหว่างช่วงเวลาการบำรุงรักษาหรือเมื่อมีกิจกรรมน้อยที่สุด

  1. ในสตูดิโอการจัดการคุณมีสองตัวเลือกฐานข้อมูลหรือไฟล์ ให้สถานการณ์ของฉันสิ่งที่จะเป็นตัวเลือกที่ดีที่สุด?

คุณควรใช้ TSQL เพื่อลดขนาด (เนื่องจากคุณถามการย่อขนาดไฟล์เป็นวิธีไปแทนฐานข้อมูล) คุณสามารถใช้ฐานข้อมูลการย่อขนาดใน chunks -สคริปต์tsqlเพื่อทำการย่อขนาดใน chunks

โปรดจำไว้ว่าเมื่อคุณลดขนาดคุณกำลังแยกส่วนดัชนีของคุณ

  1. มีกฎเกี่ยวกับเปอร์เซ็นต์ของพื้นที่ว่างที่ควรมีฐานข้อมูลหรือไม่

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

การอ้างอิง: เหตุใดทรานแซคชันของธุรกรรมจึงเพิ่มขึ้นหรือหมดพื้นที่?


5

คุณมีเหตุผลที่ดีที่ควรคำนึงถึงเนื่องจากการลดขนาดฐานข้อมูลใน SQL Server มักจะ "ดูด" Paul Randal หัวหน้าแผนกเครื่องมือจัดเก็บข้อมูลใน SQL 2005 ระบุไว้ว่า ShrinkDB เขียนได้แย่มาก มันจะหาพื้นที่ว่างโดยการเก็บข้อมูลไว้ที่จุดสิ้นสุดสุดและวางไว้ในจุดเริ่มต้นและทำต่อไปเรื่อย ๆ จนกว่าจะมีพื้นที่ว่างที่ส่วนท้ายของไฟล์ DB ณ จุดนี้มันสามารถปล่อยพื้นที่จาก SQL Server และคืนสู่ระบบปฏิบัติการ คุณกลับไฟล์ฐานข้อมูลของคุณได้อย่างมีประสิทธิภาพดังนั้นคุณจะเห็นการแตกแฟรกเมนต์ขนาดใหญ่ตามปกติ คุณสามารถอ่านเกี่ยวกับมุมมองของเขาในโพสต์บล็อกนี้หรือวิดีโอMCM Internals

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

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

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

การเติบโตของไฟล์บันทึกก็มีความสำคัญมากกว่าเช่นกัน ไฟล์บันทึกเพิ่มเติมสามารถทำให้เกิดการแตกแฟรกเมนต์ VLF สิ่งนี้ทำให้การกู้คืนของคุณช้าลงมากและอาจส่งผลกระทบต่อจุดตรวจ / ตัดปลาย ต่อไปนี้คือความเสี่ยงด้านประสิทธิภาพที่คุณต้องใช้เมื่อมีการแยกส่วนไฟล์บันทึก ทำDBCC LOGINFO();บนแต่ละฐานข้อมูล พยายามที่จะเก็บหมายเลขประมาณ 50ish ต่อ Kim Tripp แต่ถ้าคุณเห็นหลายร้อยคุณมีปัญหาการกระจายตัวซึ่งหมายความว่าไฟล์บันทึกของคุณต้องเติบโตเพื่อรองรับการดำเนินงาน วิธีที่ดีในการดูว่าไฟล์บันทึกของคุณควรเป็นอย่างไรต่อ Paul Randal คือปล่อยให้มันเติบโตเป็นเวลาหนึ่งสัปดาห์และทำดัชนีใหม่ นั่นอาจเป็นจุดที่ดีบางทีคุณอาจใช้พื้นที่ว่างเพิ่มขึ้นเล็กน้อยในกรณีนี้ ตรวจสอบให้แน่ใจว่าบันทึกของคุณไม่ได้แยกส่วนด้วย DBCC LOGINFO (); อีกครั้งและถ้าเป็นเช่นนั้นก็หมายความว่าพวกเขาเติบโตขึ้นมาก ย่อขนาดและขยายไฟล์บันทึกอีกครั้งโดยใช้วิธีนี้


2

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

ฉันขอแนะนำให้จ้างผู้เชี่ยวชาญเพื่อทำการศึกษาและเขียนแผน

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