การบีบอัดข้อมูล SQL Server นั้นดีสำหรับฐานข้อมูลแบบอ่านอย่างเดียวหรือไม่?


11

บางวรรณกรรมเกี่ยวกับการบีบอัดข้อมูล SQL Server ฉันอ่านว่าค่าใช้จ่ายในการเขียนเพิ่มขึ้นประมาณสี่เท่าตามปกติ ดูเหมือนว่านี่เป็นข้อเสียเปรียบหลักของการบีบอัดข้อมูลซึ่งหมายความว่าสำหรับฐานข้อมูลการเก็บถาวรแบบอ่านอย่างเดียวประสิทธิภาพจะดีขึ้นด้วยการใช้การบีบอัดข้อมูลที่เต็มหน้า 100%

  1. ข้อความข้างต้นเป็นจริงหรือไม่
  2. "การเปลี่ยนแปลง" หลักระหว่างการบีบอัดข้อมูลกับอะไร (สำหรับการอ่าน)

    • "CPU + x%"
    • "IO -y%"?
    • หน้าแยกเกิดขึ้น?
    • การใช้งาน tempdb?
    • การใช้ RAM?
  3. และสำหรับการเขียน?

สำหรับวัตถุประสงค์ของคำถามนี้คุณสามารถ จำกัด บริบทเป็นการบีบอัดระดับหน้าของฐานข้อมูลขนาดใหญ่(> 1TB)แต่ยินดีต้อนรับความคิดเห็นเพิ่มเติมเสมอ


อ้างอิง:

บล็อก SQL Server Storage Engine (สถานการณ์สมมติ DW แสดงให้เห็นว่าการบีบอัดมีประโยชน์มาก)
การบีบอัดข้อมูล: กลยุทธ์การวางแผนกำลังการผลิตและวิธีปฏิบัติที่ดีที่สุด

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

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

ทั้งสองข้อข้างต้นแสดงให้เห็นอย่างเอนเอียงไปสู่การแนะนำการบีบอัดหน้าสำหรับฐานข้อมูลแบบ DW (การดำเนินการแบบอ่านอย่างละเอียด / เอกสิทธิ์และมีข้อมูลขนาดใหญ่)


วรรณกรรมอะไรโดยเฉพาะ? จะมีโอเวอร์เฮดของ CPU อยู่เสมอสำหรับทั้งการบีบอัด / ไม่บีบอัด แต่เช่นเดียวกับการอ่านคุณกำลังเขียนไปยังจำนวนหน้าน้อยลงเช่นกัน ในความเป็นจริงฉันคิดว่าฝั่งการเขียนจะได้ประโยชน์มากกว่าด้านการอ่านเนื่องจากด้านการอ่านมักจะมีหน้าที่บีบอัดที่เก็บไว้ในหน่วยความจำ (นี่ไม่ใช่เสมอไป แต่เป็นกรณีที่ดีที่สุด
Aaron Bertrand

3
มันจะเป็นเรื่องยากมากที่จะให้ตัวชี้วัดใด ๆ ที่คุณต้องการเพราะมันขึ้นอยู่กับลักษณะของข้อมูลและความสามารถในการบีบอัดข้อมูลทั้งหมด (และสิ่งนี้จะแตกต่างกันไปขึ้นอยู่กับแถวและหน้า ) บางคนรายงานอัตราการบีบอัดสูงถึง 90% ซึ่งจะมีผลกระทบต่อการใช้หน่วยความจำ (ในทางบวก) และ CPU เพื่อทำการบีบอัดที่มาก กระดาษนี้ ballparks CPU ค่าใช้จ่ายที่ 10% สำหรับการบีบอัดแถวและสูงขึ้นสำหรับหน้า สิ่งที่คุณสังเกตอาจแตกต่างกันมาก
Aaron Bertrand

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

ดูเหมือนว่าลิงก์ที่คุณเพิ่มไม่มีการเอ่ยถึงการลงโทษ 4 เท่าสำหรับการเขียน คุณจำที่คุณหยิบขึ้นมา? ต้องการดูบริบท
Aaron Bertrand

1
ถ้าคุณไม่สามารถจัดเก็บข้อมูลลงในหน่วยความจำได้มากกว่าสถานการณ์นั้นจะเป็นสิ่งที่สงสัยใช่ไหม? :-)
Aaron Bertrand

คำตอบ:


6

เพียงแค่ 2 เซ็นต์ของฉันจากการทดลองของฉันเองบนฮาร์ดแวร์อายุ 1-2 ปี:

การดำเนินการแบบอ่านอย่างเดียว (การสแกนรูปแบบ DW เรียงลำดับ ฯลฯ ) บนตารางที่บีบอัดหน้า (~ 80rows / หน้า) ฉันพบว่าตัวแบ่งแม้ในการลดขนาดการบีบอัดของ ~ 3x

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

ฉันเดาว่าไมล์สะสมของคุณอาจแตกต่างกันไปหากแผนของคุณซ้อนกันและค้นหาหนัก สิ่งนี้จะขึ้นอยู่กับฮาร์ดแวร์ด้วย (การลงโทษการเข้าถึงโหนด NUMA จากต่างประเทศ, ความเร็วหน่วยความจำและอื่น ๆ )

ด้านบนเป็นเพียงกฎคร่าวๆที่ฉันปฏิบัติตามโดยใช้การทดสอบของฉันเองโดยใช้คำสั่งของฉันเองบนฮาร์ดแวร์ของตัวเอง (Dell Poweredge 910 และที่เก่ากว่า) มันไม่ใช่พระกิตติคุณใช่มั้ย!

แก้ไข:เมื่อวานนี้การนำเสนอ SQLBits XI ที่ยอดเยี่ยมของ Thomas Kejser นั้นมีให้ในรูปแบบวิดีโอ ค่อนข้างเกี่ยวข้องกับการสนทนานี้มันแสดงให้เห็นใบหน้าที่ 'น่าเกลียด' ของค่าใช้จ่ายซีพียูสำหรับการบีบอัดหน้า - การปรับปรุงชะลอตัวลง 4x ล็อคจัดขึ้นอีกนาน

อย่างไรก็ตามโทมัสกำลังใช้ที่จัดเก็บข้อมูล FusionIO และเขาเลือกตารางที่มีคุณสมบัติ 'เพียงแค่' สำหรับการบีบอัดหน้าเว็บ หากที่เก็บข้อมูลอยู่บน SAN ทั่วไปและข้อมูลที่ใช้บีบอัด 3x-4x แสดงว่ารูปภาพนั้นน่าทึ่งน้อยกว่า


1
นั่นเป็นฮาร์ดแวร์เก่าหรือไม่ สำหรับฮาร์ดแวร์ใหม่ SSD เปล่าสำหรับการจัดเก็บฉันพบว่าแกนประมวลผลไม่สามารถติดตามดิสก์ได้อย่างง่ายดาย ฉันหวังว่าผลประโยชน์จะเริ่มต้นง่ายขึ้นมากการลดลง 50% ใน IO นั้นคุ้มค่าเมื่อไม่ทำการเปลี่ยนแปลงมากมาย
TomTom

TomTom ที่เก็บข้อมูลไม่ได้เข้ามาเล่นกับตัวเลขเหล่านี้ การเปรียบเทียบอยู่ระหว่างการบีบอัดตารางในหน่วยความจำและตารางการบีบอัดในหน่วยความจำ
John Alan

ไม่เคยเห็น DWH ที่ดีพอสำหรับหน่วยความจำ อย่างจริงจัง. คุณจะถอยกลับไปที่ดิสก์
TomTom

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

1
เพิ่งเจอสไลด์นำเสนอที่เกี่ยวข้องจาก SQLBits 2013 โดย Thomas Kejser: slideshare.net/fusionio/ …
John Alan

0

ฉันสามารถเพิ่มคำไม่กี่คำจากสภาพแวดล้อม Data Warehouse ของฉัน

การใช้การบีบอัด (PAGE ในกรณีของฉัน) บนโต๊ะทดสอบที่มี 30 milion ของแถว (18GB) ลดขนาดของตารางจาก 18GB เป็น 3GB! (ประสิทธิภาพการจัดเก็บแน่นอน) แต่เพิ่มความเร็วในการโหลด (เขียน) จาก 22 เป็น 36 นาที

ดังนั้นสำหรับการอ่านหรืออ่านและวางข้อมูลในหน่วยความจำอาจเป็นทางออกที่ดี แต่สำหรับการโหลดข้อมูลรายวันอาจทำให้ประสิทธิภาพลดลง

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