ปลอดภัยหรือไม่ที่จะเปิดใช้งานการย่อขนาดอัตโนมัติของ SQL Server


44

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

คำตอบ:


70

(แต่เดิมฉันถูกถามว่าเป็นคำถามปกติ แต่ก็พบวิธีการที่ถูกต้อง - ขอบคุณ BrentO)

ไม่ไม่เคย.

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

ย่อขนาดอัตโนมัติเป็นการตั้งค่าฐานข้อมูลทั่วไปที่เปิดใช้งาน ดูเหมือนว่าเป็นความคิดที่ดี - ลบพื้นที่พิเศษออกจากฐานข้อมูล มี 'DBA ที่ไม่สมัครใจ' อยู่มากมาย (คิดว่า TFS, SharePoint, BizTalk หรือ SQL Server เก่าทั่วไป) ที่อาจไม่รู้ว่าการย่อขนาดอัตโนมัติเป็นสิ่งที่เลวร้าย

ในขณะที่ Microsoft ฉันเคยเป็นเจ้าของ SQL Server Storage Engine และพยายามที่จะลบคุณสมบัติการย่อขนาดอัตโนมัติ แต่ต้องอยู่เพื่อความเข้ากันได้ย้อนหลัง

ทำไมการย่อขนาดอัตโนมัติถึงไม่ดี

ฐานข้อมูลมีแนวโน้มที่จะเติบโตอีกครั้งดังนั้นทำไมหดตัวลง

  1. Shrink-Grow-Shrink-Grow ทำให้การกระจายตัวของระดับระบบไฟล์และใช้ทรัพยากรจำนวนมาก
  2. คุณไม่สามารถควบคุมได้เมื่อมันเตะเข้า (ถึงแม้ว่ามันจะเป็นปกติ)
  3. มันใช้ทรัพยากรมากมาย การย้ายเพจไปรอบ ๆ ในฐานข้อมูลนั้นต้องใช้ CPU CPU จำนวนมากและสร้างบันทึกธุรกรรมจำนวนมาก
  4. นี่คือนักเตะตัวจริง: ไฟล์ข้อมูลหดตัวลง (ไม่ว่าจะเป็นอัตโนมัติหรือไม่ก็ตาม) ทำให้เกิดการกระจายตัวของดัชนีขนาดใหญ่ซึ่งนำไปสู่ประสิทธิภาพที่ไม่ดี

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

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

แก้ไข: ฉันควรเพิ่มสิ่งนี้เตือนโดยคำตอบที่สอง - มีความเข้าใจผิดทั่วไปว่าการขัดจังหวะการหดตัวอาจทำให้เกิดความเสียหาย ไม่มันจะไม่ ฉันเคยเป็นเจ้าของหดตัวรหัสใน SQL Server - มันย้อนกลับย้ายหน้าปัจจุบันที่จะทำถ้าถูกขัดจังหวะ

หวังว่านี่จะช่วยได้!


มีวิธีที่คุณสามารถจัดทำดัชนีใหม่หลังจากหดตัวหรือไม่?
แลนซ์โรเบิร์ต

4
ไม่จัดทำดัชนีใหม่เพราะจะทำให้ไฟล์เติบโตอีกครั้ง (สร้างดัชนีใหม่ก่อนที่จะทิ้งไฟล์เก่า) แต่ทำการจัดโครงสร้างใหม่ (ไม่ว่าจะผ่าน DBCC INDEXDEFRAG อันเก่าของฉันหรือ ALTER INDEX ... REORGANIZE ใหม่) จะแยกออกเป็นชิ้น ๆ เพิ่มเติม IO, cpu, การบันทึก ...
Paul Randal

ฉันสังเกตว่าหลังจากลบ autoshrink การใช้หน่วยความจำของ srrver จะสูงกว่า
user193655

4

แน่นอน Paul ถูกต้อง

ดู DB ทั้งหมดและการตั้งค่า autoshrink ของพวกเขา หากคุณมีฐานข้อมูลจำนวนมากหนึ่งจะแอบเข้ามา

sp_msforeachdb  @command1 = 'Select ''[?]'',DATABASEPROPERTYEX(''?'',''IsAutoShrink'')'

อยู่ใน dmv ที่ไหนสักแห่ง .... ฉันสงสัย


2
sys.d Database มีฟิลด์ is_auto_shrink (และ is_auto-close, is_auto_update_stats ฯลฯ )
Paul Randal

Wonderful im googling: ฉันมีรายงานที่ช่วยให้เรารู้ได้อย่างไรว่าดีบีเอสที่กำหนดค่าเป็น autoshrink และรหัสของคุณทำงานได้ดีและสร้างรายงานที่ดีจาก db ทั้งหมดสำหรับเรา
saber tabatabaee yazdi

2

ไม่ใช่ "ไม่ปลอดภัย" - จะไม่สร้างความเสียหายใด ๆ

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

IIRC ตัวเลือกจะปิดใช้งานตามค่าเริ่มต้นสำหรับฐานข้อมูลทั้งหมดในรุ่น MSSQL ทั้งหมดยกเว้น Express


2
ไม่ควรกำหนดหด Shrink - พวกเขาควรจะดำเนินการที่หายากจริงๆเพราะปัญหาที่เกิดขึ้น ฉันไม่เข้าใจความคิดเห็นของคุณเกี่ยวกับการย่อขนาดหลังจากการสำรองข้อมูล - บันทึกการบันทึกที่สร้างขึ้นโดยการดำเนินการย่อขนาดจะได้รับการสำรองข้อมูลโดยบันทึกการทำธุรกรรมครั้งต่อไปไม่ว่าคุณจะทำอะไรหรือสำรองข้อมูลอื่นใด ขอบคุณ
Paul Randal

1

มีเอกสารทางเทคนิคที่มีอยู่ใน TechNet ที่อธิบายการบำรุงรักษา SQL ในรายละเอียดเพิ่มเติม

http://technet.microsoft.com/en-us/library/cc262731.aspx


น่าเสียดายที่ whitepaper มุ่งเน้นไปที่การติดตั้ง SharePoint เท่านั้นและจริง ๆ แล้วมีข้อผิดพลาดบางอย่างฉันเพิ่งใช้เวลาในการสอนคลาส SharePoint MCM ปัจจุบันกับ Bill Baer ผู้เขียน whitepaper
Paul Randal

3
ความรู้ทั่วไปที่ดีในการบำรุงรักษาฐานข้อมูลอยู่ในบทความ TechNet นิตยสารของฉันในเรื่องฐานข้อมูลที่มีประสิทธิภาพการบำรุงรักษา - technet.microsoft.com/en-us/magazine/cc671165.aspx
Paul Randal

1

ฉันเห็นเซิร์ฟเวอร์ SQL ที่เปิดใช้งานทั้ง Autogrow และ Autoshrink เซิร์ฟเวอร์ (ค่อนข้างทรงพลัง) นี้ช้ามากเพราะทุกสิ่งที่ทำตลอดทั้งวันหดตัวและขยายฐานข้อมูลไฟล์ Autoshrink มีประโยชน์ แต่ฉันขอแนะนำสองสิ่ง:

  1. ปิดใช้งาน Autoshrink ตามค่าเริ่มต้น
  2. เอกสารกำหนดค่าเซิร์ฟเวอร์ของคุณเพื่อให้คุณทราบว่าเปิดใช้งาน Autogrow และ Autoshrink ไว้ที่ไหน

1

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

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


1

นอกจากนี้ลองดูวิดีโอบทช่วยสอนนี้ ....

ดู Paul Randal แสดงให้เห็นว่าการหดตัวและการย่อขนาดอัตโนมัติสามารถทำให้เกิดปัญหาการแตกแฟรกเมนต์ที่ร้ายแรงสำหรับฐานข้อมูลของคุณได้อย่างไร http://wtv.watchtechvideos.com/topic194.html

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