บทนำ: SQLServer2005SP2 นำฟังก์ชัน vardecimal มาให้เรา ฟังก์ชันนี้ช่วยให้ข้อมูลทศนิยมที่มีความยาวคงที่ดั้งเดิมถูกจัดเก็บในรูปแบบความยาวผันแปรได้ในไฟล์ข้อมูล ว่ากันว่าฟังก์ชันนี้สามารถประหยัดพื้นที่สำหรับคลังข้อมูลได้ และ SQLServer2008 ก็คือ ฟังก์ชันการบีบอัดข้อมูลได้รับการปรับปรุงให้ดีขึ้น
ฟังก์ชันการบีบอัดข้อมูลใน SQL Server เริ่มต้นครั้งแรกใน SQL Server 2005 รูปแบบการจัดเก็บข้อมูลใหม่ที่เรียกว่า vardecimal ถูกเพิ่มให้กับรุ่นองค์กรและรุ่นพัฒนา ฟังก์ชันนี้อาจส่งผลต่อฟิลด์ทศนิยมและตัวเลข หากตารางในฐานข้อมูลมีข้อมูลประเภททศนิยมและตัวเลข ผู้ใช้จะสามารถใช้รูปแบบหน่วยเก็บข้อมูล vardecimal เพื่อลดขนาดของฐานข้อมูลได้ เป็นที่น่าสังเกตว่าจำนวนพื้นที่ที่สามารถบันทึกได้นั้นขึ้นอยู่กับจำนวนคอลัมน์ข้อมูลทศนิยมหรือตัวเลขในฐานข้อมูล การกระจายข้อมูล และขนาดของตาราง
ใช้การบีบอัดข้อมูล
ฟังก์ชันการบีบอัดข้อมูลที่กลายเป็นคุณลักษณะใหม่ใน SQL Server 2008: การบีบอัดข้อมูล เมื่อใช้คุณลักษณะนี้ คุณสามารถลดขนาดชุดย่อยของตารางข้อมูล ดัชนี และพาร์ติชันได้ แต่เหตุใดฟังก์ชันนี้ที่มีอยู่ก่อนหน้านี้ใน SQL Server 2005 จึงควรได้รับการปรับปรุงในระบบเวอร์ชันใหม่ ในสภาพแวดล้อมของตลาดที่ต้นทุนการจัดเก็บข้อมูลลดลงอย่างต่อเนื่อง เทคโนโลยีการบีบอัดข้อมูลจะมีประโยชน์อะไรต่อองค์กรบ้าง
แม้ว่าต้นทุนการจัดเก็บข้อมูลจะไม่ใช่ปัจจัยสำคัญที่องค์กรให้ความสนใจอีกต่อไป แต่ก็ไม่ได้หมายความว่าขนาดฐานข้อมูลจะไม่ส่งผลกระทบต่อประสิทธิภาพการดำเนินงานขององค์กร เพราะนอกจากจะส่งผลต่อต้นทุนการจัดเก็บข้อมูลแล้ว ขนาดฐานข้อมูลยังเกี่ยวข้องอย่างมากกับการจัดการอีกด้วย ปัญหาด้านต้นทุนและประสิทธิภาพ
ประการแรก เนื่องจากต้องมีการสำรองข้อมูลฐานข้อมูล ยิ่งขนาดฐานข้อมูลใหญ่ขึ้น ระยะเวลาในการสำรองข้อมูลก็จะนานขึ้น และต้นทุนของฮาร์ดแวร์สำรองข้อมูลก็จะเพิ่มขึ้นด้วย ค่าใช้จ่ายในการจัดการอีกประการหนึ่งคือค่าบำรุงรักษาฐานข้อมูล ในแง่ของประสิทธิภาพ เมื่อ SQL Server สแกนดิสก์เพื่ออ่านข้อมูล มันจะอ่านข้อมูลในหน่วยของหน้าข้อมูล ดังนั้น หากหน้าข้อมูลมีแถวข้อมูลมากขึ้น SQL Server ก็จะรับข้อมูลมากขึ้นใน IO หน้าข้อมูลเดียว มากขึ้นซึ่งจะนำมาซึ่งการปรับปรุงประสิทธิภาพด้วย
เมื่อเปรียบเทียบกับข้อมูลที่ถูกบีบอัดแบบ vardecimal ใน SQL Server2005SP2 ข้อมูลทดสอบที่เผยแพร่โดย SQLServer2008 ในปัจจุบันใช้เทคโนโลยีการบีบอัดข้อมูลใหม่เพื่อให้ได้อัตราการจัดเก็บข้อมูลที่สูงขึ้น ควบคู่ไปกับพื้นที่จัดเก็บข้อมูลที่เพิ่มขึ้นสำหรับการกู้คืนความเสียหายโดยองค์กร ทั้งหมดนี้คือ SQLServer2008 มีข้อดีคือ คุณสมบัติใหม่นี้
หน้า 2: สองโหมดการบีบอัด
หลังจากเข้าใจถึงประโยชน์ที่แท้จริงของการบีบอัดข้อมูลแล้ว คุณจะสัมผัสได้ถึงการแทรกซึมของแนวคิดนี้ ด้วยความช่วยเหลือของการบีบอัดข้อมูล ต้นทุนการจัดเก็บข้อมูลลดลง ประสิทธิภาพการสืบค้นดีขึ้น I/O ลดลง และอัตราการคลิกบัฟเฟอร์เพิ่มขึ้น จะเห็นได้ว่าฟังก์ชันนี้ยังคงมีประสิทธิภาพมากในกระบวนการแอปพลิเคชัน มีสองวิธีในการบีบอัดข้อมูลใน SQL Server 2008 ได้แก่ การบีบอัดแถวและการบีบอัดหน้า ต่อไปนี้เป็นการเปรียบเทียบโดยย่อของการบีบอัดข้อมูลทั้งสองประเภทนี้
การเลือกประเภทการบีบอัดระหว่าง Data Compression Wizard
การบีบอัดแถว การบีบอัดแถวสามารถจัดเก็บประเภทที่มีความยาวคงที่เป็นประเภทการจัดเก็บที่มีความยาวผันแปรได้ ตัวอย่างเช่น คอลัมน์อักขระ (100) ที่จัดเก็บไว้ในรูปแบบหน่วยเก็บข้อมูลที่มีความยาวผันแปรได้จะใช้เฉพาะข้อมูลที่กำหนดโดยจำนวนหน่วยเก็บข้อมูลเท่านั้น "SQLServer2008" ที่เก็บไว้ต้องการจัดเก็บเพียง 15 อักขระหลังจากการบีบอัด แทนที่จะเป็น 100 อักขระทั้งหมด จึงช่วยประหยัดพื้นที่จัดเก็บข้อมูลได้ 85% นี่เป็นส่วนขยายของแนวคิดเกี่ยวกับรูปแบบการจัดเก็บข้อมูล vardecimal ที่ให้ไว้ใน SQLServer2005ServicePack2 ควรสังเกตว่าโหมดการบีบอัดนี้จะปรับค่า NULL และ 0 ให้เหมาะสมของประเภทข้อมูลทั้งหมดเพื่อไม่ให้ใช้ไบต์ใด ๆ
แม้ว่าการบีบอัดข้อมูล SQLServer2008 จะขยายฟังก์ชันการทำงานนี้ แต่ชนิดข้อมูลที่มีความยาวคงที่ทั้งหมดจะได้รับการประมวลผล รวมถึงจำนวนเต็ม อักขระ และจำนวนทศนิยม ขณะนี้ข้อมูลไม่ได้จัดเก็บไว้ในไบต์ที่มีขนาดคงที่ แต่จะเป็นไบต์ขั้นต่ำที่ต้องการ ซึ่งสามารถทำได้ง่ายๆ โดยการเปิดใช้งานการบีบอัดแถว อย่างไรก็ตาม การบีบอัดแถวไม่สามารถจัดการชนิดข้อมูล XML, BLOB และ MAX ได้
โหมดการบีบอัดหน้า คุณลักษณะการบีบอัดนี้สร้างขึ้นจากการบีบอัดแถว ช่วยลดข้อมูลที่ซ้ำซ้อนที่เก็บไว้โดยการจัดเก็บไบต์เหตุการณ์เดียวกันบนเพจเพียงครั้งเดียว ตารางและดัชนีถูกบีบอัดโดยใช้การบีบอัดหน้า นอกจากการบีบอัดแถวแล้ว ยังใช้การบีบอัดคำนำหน้าและการบีบอัดพจนานุกรมอีกด้วย
การบีบอัดข้อมูลจะลดขนาดของตารางหรือตัวชี้วัดดัชนีของคุณ วิธีที่ดีที่สุดคือประเมินการประหยัดพื้นที่ก่อนหลังการบีบอัด แต่ละหน้าจะถูกบีบอัดแยกกัน และคำนำหน้าและพจนานุกรมจะถูกจัดเก็บไว้ในหน้าด้วย เนื่องจากเพจเป็นหน่วยอะตอมมิกของการจัดสรรพื้นที่เก็บข้อมูล จึงไม่สมเหตุสมผลที่จะบีบอัดครึ่งเพจให้เหลือหนึ่งในสี่เพจ ดังนั้น กระบวนการบีบอัดจะเริ่มเมื่อเนื้อหาเพจใกล้เต็มเท่านั้น
นอกจากนี้ยังมีการเสียประสิทธิภาพเมื่อใช้การบีบอัดแถวและเพจ เนื่องจากการใช้งาน CPU จะเพิ่มขึ้น แต่การใช้งาน I/O และขนาดหน่วยความจำจะลดลง แต่ตัวเลือกการบีบอัดทั้งหมดอาจกลายเป็นตัวเลือกพิเศษสำหรับ SQLServer2008 Enterprise Edition
หน้า 3: วิธีใช้การบีบอัดข้อมูล
ภาคผนวก (วิธีใช้การบีบอัดข้อมูล):
(1) เปิดใช้งานการบีบอัดแถว
หากเราต้องการเปิดใช้งานการบีบอัดแถวบนตารางที่ระบุ เราสามารถดำเนินการคำสั่งต่อไปนี้:
สร้างตารางอัลฟ่า (col1 int, col2 char (1,000))
ด้วย (DATA_COMPRESSION = แถว)
(2) เปิดใช้งานการบีบอัดหน้า
หากเราต้องการเปิดใช้งานการบีบอัดบนพาร์ติชันที่ระบุ เราสามารถดำเนินการคำสั่งต่อไปนี้:
สร้างตาราง Alpha_Partition (col1 int, col2 char (1,000))
ONPartitionScheme (คอลัมน์ 1)
กับ
(DATA_COMPRESSION = เปิดหน้า)
ฉากกั้น(1-3)
(3) แก้ไขการบีบอัด
หากคุณต้องการแก้ไขดัชนีที่มีอยู่เพื่อใช้การบีบอัด ให้ดำเนินการคำสั่งต่อไปนี้:
แก้ไขดัชนี Collndx บนอัลฟ่าสร้างใหม่
ด้วย (DATA_C0MPRESSION=หน้า)
แก้ไขดัชนี Collndx บนอัลฟ่าสร้างใหม่
พาร์ติชัน=2
ด้วย (DATA_COMPRESSION=หน้า)
ตัวเลือกการบีบอัดใน SQL Server 2008 สามารถตั้งค่าผ่านตัวเลือกเมื่อสร้างตารางหรือดัชนี ตัวอย่างเช่น:
สร้างตาราง TestTable (col1 int,col2varchar(200))WITH(DATA_COMPRESSION = ROW);
หากคุณต้องการเปลี่ยนตัวเลือกการบีบอัดของพาร์ติชัน คุณสามารถใช้คำสั่งต่อไปนี้:
แก้ไขตาราง TestTable สร้างพาร์ติชันใหม่ = 1 ด้วย (DATACOMPRESSION = PAGE);
หากคุณต้องการตั้งค่าตัวเลือกการบีบอัดที่แตกต่างกันสำหรับแต่ละพาร์ติชันของตารางที่แบ่งพาร์ติชัน คุณสามารถใช้คำสั่งต่อไปนี้: (SQLServer2008 สามารถใช้ตัวเลือกการบีบอัดที่แตกต่างกันสำหรับพาร์ติชันที่แตกต่างกันได้ สิ่งนี้สำคัญมากสำหรับแอปพลิเคชันคลังข้อมูลเนื่องจากตารางข้อเท็จจริงของคลังข้อมูล โดยปกติแล้วจะมีพาร์ติชั่นฮอตหนึ่งหรือหลายพาร์ติชั่น และข้อมูลในพาร์ติชั่นเหล่านี้มักจะจำเป็นต้องได้รับการอัปเดต เพื่อหลีกเลี่ยงการบีบอัดข้อมูลที่ทำให้เกิดภาระการประมวลผลเพิ่มเติมในการอัพเดตข้อมูลบนพาร์ติชั่นเหล่านี้ คุณสามารถปิดตัวเลือกการบีบอัดสำหรับพาร์ติชั่นเหล่านี้ได้)
สร้างตาราง PartitionedTable (col1 int, col2varchar(200))
บน PS1 (col1)
ด้วย (DATA_COMPRESSION = แถวบนพาร์ติชัน (1)
DATA_COMPRESSION = หน้าบนพาร์ติชัน (2 ถึง 4));
หากคุณกำลังตั้งค่าตัวเลือกการบีบอัดสำหรับดัชนี คุณสามารถใช้:
สร้างดัชนี IX_TestTable_Col1 ONTestTable (Col1) ด้วย (DATA_COMPRESSION = ROW);
หากคุณต้องการแก้ไขตัวเลือกการบีบอัดของดัชนี คุณสามารถใช้:
แก้ไขดัชนี IX_TestTable_Col1 ONTestTableREBUILDWITH (DATA_COMPRESSION = ROW);