Oracle เป็นฐานข้อมูลขนาดใหญ่มาก มีการใช้กันอย่างแพร่หลายในองค์กรหลักๆ ที่มีปริมาณข้อมูลมหาศาลและเครือข่ายคอมพิวเตอร์ที่กว้างขวาง เช่น การเงิน ไปรษณีย์และโทรคมนาคม พลังงานไฟฟ้า และการบินพลเรือน สำหรับผู้ดูแลระบบ สิ่งสำคัญอย่างยิ่งคือต้องรับประกันการทำงานที่เสถียรของเครือข่าย และเพื่อปรับปรุงประสิทธิภาพของฐานข้อมูลเพื่อให้มีความปลอดภัยและมีประสิทธิภาพมากขึ้น เนื่องจากปัจจัยสำคัญที่ส่งผลต่อประสิทธิภาพของฐานข้อมูล การกระจายตัวของฐานข้อมูลควรกระตุ้นความสนใจอย่างเพียงพอของ DBA การค้นพบและการล้างข้อมูลแฟรกเมนต์ในเวลาที่เหมาะสมจึงเป็นเนื้อหาการบำรุงรักษาพื้นฐานของ DBA
1. เหตุใดจึงมีเศษชิ้นส่วนเกิดขึ้น?
เมื่อฐานข้อมูลถูกสร้างขึ้น มันจะถูกแบ่งออกเป็นหลายส่วนเชิงตรรกะ (เซ็กเมนต์) ที่เรียกว่าพื้นที่ตาราง (Tablespace) เช่น พื้นที่ตารางของระบบ (ระบบ) พื้นที่ตารางชั่วคราว (ชั่วคราว) เป็นต้น พื้นที่ตารางสามารถประกอบด้วยช่วงข้อมูลหลายช่วง (ขอบเขต) และบล็อกช่วงว่างตั้งแต่หนึ่งบล็อกขึ้นไป นั่นคือ พื้นที่ว่าง (พื้นที่ว่าง)
ความสัมพันธ์เชิงตรรกะระหว่างพื้นที่ตาราง เซ็กเมนต์ ประเภท และพื้นที่ว่างมีดังนี้:
เมื่อสร้างเซ็กเมนต์ในพื้นที่ตาราง พื้นที่จะถูกจัดสรรสำหรับขอบเขตเริ่มต้นของเซ็กเมนต์จากพื้นที่ว่างที่มีประสิทธิภาพของพื้นที่ตาราง เมื่อช่วงเริ่มต้นเหล่านี้เต็มไปด้วยข้อมูล เซ็กเมนต์จะขอเพิ่มช่วงอื่น กระบวนการขยายนี้จะดำเนินต่อไปจนกว่าจะถึงค่าช่วงสูงสุด และอาจไม่มีพื้นที่ว่างในพื้นที่ตารางสำหรับช่วงถัดไป สถานการณ์ที่เหมาะสมที่สุดคือข้อมูลของกลุ่มสามารถจัดเก็บไว้ในหมวดหมู่เดียวได้ ด้วยวิธีนี้ ข้อมูลทั้งหมดจะถูกเก็บไว้ใกล้กับข้อมูลอื่นๆ ในกลุ่ม และจำเป็นต้องใช้ตัวชี้น้อยลงในการค้นหาข้อมูล อย่างไรก็ตาม มีหลายกรณีที่กลุ่มประกอบด้วยหลายช่อง และไม่มีวิธีใดที่จะพิสูจน์ได้ว่าช่องเหล่านี้ถูกจัดเก็บไว้ใกล้เคียง เมื่อต้องเป็นไปตามข้อกำหนดด้านพื้นที่ ฐานข้อมูลจะไม่ปิดช่วงว่างที่อยู่ติดกันอีกต่อไป (เว้นแต่ไม่มีทางใดเลย) แต่จะค้นหาช่วงว่างที่ใหญ่ที่สุดในพื้นที่ตารางที่จะใช้ สิ่งนี้จะค่อย ๆ ก่อตัวเป็นพื้นที่ว่างที่แยกจากกันและเล็กลงมากขึ้นเรื่อย ๆ ซึ่งก็คือชิ้นส่วน
2. ผลกระทบของการกระจายตัวบนระบบ
เมื่อเวลาผ่านไป การใช้งานระบบแอปพลิเคชันบนฐานข้อมูลอย่างแพร่หลายจะสร้างแฟรกเมนต์มากขึ้นเรื่อยๆ ซึ่งจะมีผลกระทบสำคัญสองประการต่อฐานข้อมูลดังต่อไปนี้:
1) การลดประสิทธิภาพของระบบที่เกิดขึ้น
โดยทั่วไป เมื่อต้องเป็นไปตามข้อกำหนดด้านพื้นที่ ฐานข้อมูลจะค้นหาช่วงว่างที่ใหญ่ที่สุดในปัจจุบัน และช่วงอิสระที่ "ใหญ่ที่สุด" จะค่อยๆ เล็กลง และการค้นหาช่วงว่างที่ใหญ่เพียงพอจะยากขึ้นเรื่อยๆ เป็นเรื่องยาก ดังนั้นอุปสรรคด้านความเร็วในพื้นที่ตารางทำให้การจัดสรรพื้นที่ของฐานข้อมูลยิ่งห่างไกลจากสถานะในอุดมคติ
2) กระจายพื้นที่โต๊ะเป็นจำนวนมาก
แม้ว่าพื้นที่ว่างบางส่วน (เช่น pctincrease ของพื้นที่ตารางไม่เป็นศูนย์) จะถูกรวมเข้าด้วยกันเป็นระยะโดยกระบวนการบอสพื้นหลัง SMON (การตรวจสอบระบบ) แต่ก็ยังมีพื้นที่ว่างบางส่วนที่ไม่สามารถปิดได้โดยอัตโนมัติ ส่งผลให้สิ้นเปลืองตารางมาก ช่องว่าง. .
3. การคำนวณส่วนของหมวดหมู่ฟรี
เนื่องจากการกระจายตัวของพื้นที่ว่างประกอบด้วยหลายส่วน เช่น จำนวนหมวดหมู่ ขนาดช่วงสูงสุด ฯลฯ เราจึงสามารถใช้ค่า FSFI - Free Space Fragmentation Index (Free Space Fragmentation Index) เพื่อสะท้อนให้เห็นโดยสัญชาตญาณ:
FSFI=100*SQRT(สูงสุด(ขอบเขต)/ผลรวม(ขอบเขต))*one/SQRT(SQRT(จำนวน(ขอบเขต)))
ดังที่เห็น ค่าสูงสุดของ FSFI คือ 100 (พื้นที่ตารางเดียวในอุดมคติ) เมื่อขอบเขตเพิ่มขึ้น ค่า FSFI จะลดลงอย่างช้าๆ และเมื่อขนาดขอบเขตสูงสุดลดลง ค่า FSFI จะลดลงอย่างรวดเร็ว
สคริปต์ต่อไปนี้สามารถใช้เพื่อคำนวณค่า FSFI:
rem การคำนวณค่า FSFI
rem fsfi.sql
คอลัมน์ FSFI รูปแบบ 999,99
เลือก tablespace_name,sqrt(สูงสุด(บล็อก)/ผลรวม(บล็อก))*
(100/sqrt(sqrt(นับ(บล็อก)))) FSFI
จาก dba_free_space
จัดกลุ่มตาม tablespace_name ตามลำดับหนึ่ง;
สปูล fsfi.rep;
-
ม้วนออก;
ตัวอย่างเช่น เมื่อรันสคริปต์ fsfi.sql ในฐานข้อมูลบางฐานข้อมูล ค่า FSFI ต่อไปนี้จะหายไป:
TABLESPACE_NAME FSFI
-
อาร์บีเอส 74.06
ระบบ 100.00
อุณหภูมิ 22.82
เครื่องมือ 75.79
ผู้ใช้ 100.00
USER_TOOLS 100.00
YDCX_DATA 47.34
YDCX_IDX 57.19
YDJF_DATA 33.80
YDJF_IDX 75.55
---- เมื่อคำนวณค่า FSFI ของฐานข้อมูลแล้ว จะสามารถใช้เป็นพารามิเตอร์ที่เปรียบเทียบได้ ในพื้นที่ตารางที่มีพื้นที่ว่างที่มีประสิทธิผลเพียงพอและค่า FSFI สูงกว่า 30 ปัญหาพื้นที่ว่างที่มีประสิทธิผลมักไม่ค่อยพบ เมื่อช่องว่างใกล้กับพารามิเตอร์ที่เทียบเคียงได้ จะต้องมีการจัดเรียงข้อมูล
4. การแยกส่วนของหมวดหมู่ฟรี
ค่าpctincreaseของพื้นที่ตารางไม่เป็นศูนย์
คุณสามารถเปลี่ยนพารามิเตอร์หน่วยเก็บข้อมูลเริ่มต้น pctincrease ของพื้นที่ตารางเป็นค่าที่ไม่ใช่ศูนย์ได้ โดยปกติจะตั้งค่าเป็นหนึ่ง เช่น:
เปลี่ยนอุณหภูมิพื้นที่โต๊ะ
ที่เก็บข้อมูลเริ่มต้น (pctincrease 1);
ด้วยวิธีนี้ SMON จะจัดกลุ่มหมวดหมู่ฟรีโดยอัตโนมัติ คุณยังสามารถจัดกลุ่มหมวดหมู่ฟรีได้ด้วยตนเอง:
เปลี่ยนอุณหภูมิของพื้นที่ตารางรวมกัน
5. หยิบส่วนของย่อหน้าขึ้นมา
เรารู้ว่ากลุ่มประกอบด้วยหมวดหมู่ ในบางกรณี จำเป็นต้องทำความสะอาดชิ้นส่วนของเซ็กเมนต์ หากต้องการดูข้อมูลที่เกี่ยวข้องกับเซ็กเมนต์ ให้ดูพจนานุกรมข้อมูล dba_segments และสำหรับข้อมูลหมวดหมู่ ให้ดูพจนานุกรมข้อมูล dba_extents
ส่วนข้อมูลแบบสอบถาม
เลือกเซ็กเมนต์_ชื่อ, tablespace_name, ไบต์, บล็อกจาก USER_EXTENTS;
ส่วนไดเรกทอรีแบบสอบถาม
เลือกindex_name,table_owner,table_name,tablespace_nameจาก USER_EXTENTS;
ดูข้อมูลเซ็กเมนต์ผ่าน dba_segments
เลือก tablespacee_name,count(*) nobjects,round(sum(bytes)/1024/1204/1024.2) GB,sum(blocks),sum(extents) จาก
กลุ่ม dba_segments ตามค่าสะสม (tablespace_name);
หากเซ็กเมนต์มีการแยกส่วนมากเกินไป วิธีที่ง่ายที่สุดในการบีบอัดข้อมูลลงในช่วงคือการสร้างเซ็กเมนต์ใหม่ด้วยพารามิเตอร์การจัดเก็บข้อมูลที่ถูกต้อง จากนั้นแทรกข้อมูลจากตารางเก่าลงในตารางใหม่ และในเวลาเดียวกันก็ลบตารางเก่า . กระบวนการนี้สามารถทำได้โดยใช้เครื่องมือนำเข้า/ส่งออก (อินพุต/เอาต์พุต)
คำสั่ง Export () มีแฟล็ก (บีบอัด) ซึ่งเมื่ออ่านตารางจะทำให้ Export กำหนดจำนวนพื้นที่ทางกายภาพที่จัดสรรให้กับตาราง และจะเขียนพารามิเตอร์หน่วยเก็บข้อมูลการเริ่มต้นใหม่ไปยังข้อมูลดัมพ์เอาต์พุต นั่นคือ ทั้งหมด จัดสรรพื้นที่ หากตารางนี้ปิดอยู่ ให้ใช้เครื่องมือนำเข้า () เพื่อสร้างตารางใหม่ ด้วยวิธีนี้ ข้อมูลจะถูกวางลงในส่วนเริ่มต้นใหม่ที่ใหญ่ขึ้น ตัวอย่างเช่น:
ไฟล์ผู้ใช้ / รหัสผ่าน exp=exp.dmp การบีบอัด=Y ให้สิทธิ์=ดัชนี Y=Y
ตาราง=(ตารางที่หนึ่ง, ตารางที่สอง);
หากผลลัพธ์ดำเนินไปอย่างราบรื่น ให้ลบตารางที่ส่งออกออกจากไลบรารี จากนั้นนำเข้าตารางจากข้อมูลการถ่ายโอนข้อมูลเอาต์พุต:
ไฟล์ผู้ใช้ / รหัสผ่าน imp = exp.dmp กระทำ = Y buffer = 64000 เต็ม = Y