SQL Server - วิธีปฏิบัติที่ดีที่สุดสำหรับการเติบโตของไฟล์ฐานข้อมูล


16

ฉันเฝ้าสังเกตการเติบโตของไฟล์ผ่านตัวรวบรวมข้อมูลใน sql server 2008 r2 เป็นเวลาสองสัปดาห์ ฐานข้อมูลมีการเติบโตอย่างต่อเนื่องที่ประมาณ 35 (MB) / วัน ฐานข้อมูลยังไม่ถึงขนาดเริ่มต้นที่ 2 GB

การเติบโตอัตโนมัติของไฟล์ฐานข้อมูลถูกตั้งไว้ที่ 5MB และฉันต้องการลองวิธีอื่นดังนั้นฉันจึงกำลังมองหาคำแนะนำและหรือความคิดเห็น

มีงานปรับแต่งที่ทำงานทุกสัปดาห์ในคืนวันอาทิตย์เวลา 1:30 น. ภารกิจจะ:

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

ฉันต้องการเพิ่มอีกสองขั้นตอนในแผนการปรับรายสัปดาห์:

  1. ขยายไฟล์ฐานข้อมูลขึ้น 500 MB หากพื้นที่ที่ใช้จนถึงขีด จำกัด หรือขนาดทั้งหมด
  2. ขยายไฟล์บันทึกเพิ่มขึ้น 250 MB (หลังการย่อขนาด) หากพื้นที่ที่ใช้จนถึงขีด จำกัด ขนาดทั้งหมด

ด้วยการวางภาระการเติบโตในเวลาออฟไลน์ฉันหวังว่าจะได้รับประสิทธิภาพโดยการลดจำนวนกิจกรรมการเติบโตอัตโนมัติในช่วงที่มีงานหนัก

ฉันมีคำถามสองข้อเกี่ยวกับไฟล์ที่กำลังเติบโตอัตโนมัติ

  • สถานที่ที่ดีที่สุดที่จะนำขั้นตอนการเติบโตของไฟล์มาไว้ก่อนหน้าขั้นตอนปัจจุบันหรือหลังจากนั้น
  • หากฉันใช้ALTER DATABASE|MODIFY FILEเพื่อขยายไฟล์ฉันจะทราบได้SpaceUsedInFile >= (TotalFileSpace-@AllowanceThreshold)อย่างไร

2
ฐานข้อมูลของคุณควรมีขนาดเพียงพอที่ไม่เคยเติบโต ไม่น้อยไปกว่านี้ตรวจสอบให้แน่ใจว่ามีการเปิดใช้งานการเริ่มต้นไฟล์ทันที
Remus Rusanu

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

3
@AaronBertrand: ฉันโปรดปรานง่ายอธิคำแนะนำ ในเวลาที่ฉันเรียนรู้มันเกาะติดดีกว่า ผู้ใช้ส่วนใหญ่ไม่สามารถจัดการกับ 'มันขึ้นอยู่กับ' และผู้ที่สามารถคิดออกเองว่ามีเฉดสีเทาในระหว่างสีดำและสีขาว ...
Remus Rusanu

3
@DanAndrews: การจัดสรรเกินอาจมีผล 'ดาวน์สตรีม' คิดว่านักพัฒนาพยายามกู้คืนฐานข้อมูลบนเครื่องของเขาเพื่อค้นพบว่ามันต้องการไดรฟ์ 1TB ใหม่สองตัวสำหรับข้อมูล 1Gb ...
Remus Rusanu

2
ฉันแค่เล่นเป็นทนายของปีศาจ อย่างไรก็ตาม HDs นั้นราคาถูก เสียเวลาในการผลิตสำหรับการกำหนดค่าใหม่และการสูญเสียประสิทธิภาพมีราคาแพง
Dan Andrews

คำตอบ:


24

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

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

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

ดังนั้นคำแนะนำของฉันจะเป็น:

ขยายไฟล์ข้อมูลด้วยตนเองโดยอัตโนมัติในช่วงเวลาที่เงียบจนถึงขนาดที่รองรับการเติบโตหลายเดือน คุณจะประหยัดอะไรในระหว่างนี้?

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

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


ขอบคุณสำหรับการป้อนข้อมูล ... ฉันจะ ues คำแนะนำของคุณสำหรับการเติบโตล็อกไฟล์และตรวจสอบในขณะที่ ฉันใช้ GB สำหรับ MB ในขนาด autgrow ไม่ถูกต้อง ฉันเห็นด้วยและไม่คิดว่าหดฐานข้อมูลกำลังทำสิ่งที่ตั้งใจจะทำ ในตอนท้ายของปีฐานข้อมูลถึง 15GB ในเวลาที่สร้างงานเราหมดพื้นที่สำหรับการสำรองข้อมูล

+1 สำหรับควรถูกเรียกว่า auto-fragment :-) คุณได้เปิดใช้งานปัญหา Connect แล้วหรือยัง? :-)
marc_s

10

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

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

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

SELECT instance_name,
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
       into ##Logsize
FROM
(
   SELECT *
   FROM sys.dm_os_performance_counters
   WHERE counter_name IN
   (
       'Data File(s) Size (KB)',
       'Log File(s) Size (KB)',
       'Log File(s) Used Size (KB)',
       'Percent Log Used'
   )
     AND instance_name = 'database your interested in' 
) AS Src
PIVOT
(
   MAX(cntr_value)
   FOR counter_name IN
   (
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
   )
) AS pvt 
go
declare @logsize int
Select @logsize = [Percent Log Used] from ##Logsize

If @logsize > the maximum percent you want the log to fill too i.e 90
    BEGIN
        --Do your thing here
    END

Drop table ##Logsize

แน่นอนว่านี่อาจถูกกำหนดให้เป็นงาน


ฉันลบฐานข้อมูล "AND instance_name = 'ที่คุณสนใจ" เพื่อให้ส่งคืนฐานข้อมูลทั้งหมด จากนั้นใช้การนับโดยที่ขนาดการบันทึกอยู่เหนือขีด จำกัด ในคำสั่ง IF หากการนับสูงกว่า 1 ฉันจะทำ sp_send_dbmail ด้วยคำสั่งเลือกชื่อจากตาราง temp เพื่อส่งอีเมลชื่อของบันทึกที่เกินขีด จำกัด
Nick Winstanley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.