การปรับหน่วยความจำจะแจกจ่ายหรือจัดสรรหน่วยความจำที่ว่างใหม่ให้กับส่วนประกอบหน่วยความจำของ Oracle ส่วนใหญ่จะใช้สำหรับการปรับแต่งประสิทธิภาพในการสืบค้นของ Oracle
ทุกวันนี้ ปัญหาสำคัญสำหรับลูกค้าทุกรายเกี่ยวข้องกับประสิทธิภาพของฐานข้อมูล บล็อกนี้อธิบายวิธีการปรับแต่งหน่วยความจำในฐานข้อมูลซึ่งส่งผลให้ฐานข้อมูลมีประสิทธิภาพสูง ต่อไปนี้เป็นวิธีการปรับแต่งหน่วยความจำประเภทต่างๆ ที่มีอยู่:การปรับกระบวนการระดับ OS, การปรับ CPU, การปรับ RAM, การปรับฐานข้อมูล ฯลฯ ในบล็อกนี้ ผม จะหารือเกี่ยวกับการปรับหน่วยความจำในฐานข้อมูล
การปรับแต่งหน่วยความจำฐานข้อมูล:
การปรับแต่งหน่วยความจำสำหรับฐานข้อมูลไม่ใช่แค่การปรับแต่ง System Global Area (SGA) ต่อไปนี้เป็นรายการส่วนประกอบหลักที่มีการปรับ SGA มาดูรายละเอียดแต่ละองค์ประกอบเหล่านี้กัน:
- เก็บสระ
- พูลเริ่มต้น พูลรีไซเคิล สตรีมพูล
- DB Buffer Cache:บัฟเฟอร์ว่าง บัฟเฟอร์ที่แก้ไข บัฟเฟอร์ที่ปักหมุด
- สระที่ใช้ร่วมกัน
เก็บพูล:
มีบางแพ็คเกจที่ใช้ทุกวัน เพื่อเพิ่มประสิทธิภาพ คุณต้องเก็บแพ็คเกจเหล่านั้นไว้ใน SGA ด้วยความช่วยเหลือของขั้นตอน คุณสามารถเก็บแพ็คเกจนั้นไว้ใน Keep Pool หากพื้นที่ที่จัดสรรให้กับ SGA ถูกปิดลง SGA จะต้องจัดสรรใหม่ให้กับ RAM ในขณะนั้นแม้จะเก็บแพ็คเกจไว้ใน Keep Pool ก็ตาม ล้างออก ครั้งถัดไปเมื่อคุณรีสตาร์ทและเรียกใช้งานแพ็คเกจนั้น แพ็คเกจจะยังคงอยู่ในพูล Keep จนกว่าคุณจะปิดฐานข้อมูล การทำเช่นนี้จะทำให้ I/O ลดลง
ด้วยความช่วยเหลือของ Hit rations คุณสามารถมั่นใจได้ว่าแผนการรันโค้ดแยกวิเคราะห์จะล้างออกจากแคชของไลบรารี อัตราส่วน Hit สำหรับแคชของไลบรารีควรเป็น> 85%
สตรีมพูล ใช้สร้างบัฟเฟอร์สำหรับ data pump ในแต่ละวัน ตารางบางตาราง (ตารางขนาดเล็ก) ใช้เพื่อเพิ่มประสิทธิภาพ เป็นการดีกว่าที่จะเก็บตารางเหล่านั้นไว้ใน SGA (Keep pool) ซึ่งจะเพิ่มประสิทธิภาพโดยที่คุณไม่ได้ดึงข้อมูลจากดิสก์ แต่มาจากหน่วยความจำเอง สำหรับโต๊ะขนาดใหญ่ เรามี สระรีไซเคิล
โดยค่าเริ่มต้น เมื่อใดก็ตามที่เราเลือกตารางเหล่านั้น (ตารางขนาดเล็ก) ในรูปแบบของบล็อกจะถูกดึงข้อมูลในแคชบัฟเฟอร์ข้อมูล และจะเก็บไว้ใน พูลเริ่มต้น . พูลเริ่มต้นนี้จะถูกล้างออกเมื่อคุณเลือกตารางอื่น หากคุณมีที่ว่างในบัฟเฟอร์ ก็ไม่เป็นไร ถ้าไม่เช่นนั้น จะล้างตารางก่อนหน้าเพื่อรองรับตารางใหม่ ในการเพิ่มประสิทธิภาพ ให้เก็บตารางขนาดเล็กไว้ในพูล แทนที่จะเป็น พูลเริ่มต้น . อัตราส่วน Hit สำหรับแคชบัฟเฟอร์ข้อมูลควรเป็น> 95% หากน้อยกว่า 95% เราจำเป็นต้องปรับขนาดบัฟเฟอร์แคชของฐานข้อมูล
ส่วนหลักในการปรับแต่งหน่วยความจำคือแคชบัฟเฟอร์ของฐานข้อมูลและพูลแบบแบ่งใช้ ซึ่งมีประโยชน์สำหรับการรักษาข้อมูลที่เพียงพอในหน่วยความจำ ทุกคนจำเป็นต้องทราบการดำเนินการพื้นฐานในฐานข้อมูลบัฟเฟอร์แคชสำหรับการปรับ SGA ที่ส่วนท้ายของบล็อก ฉันจะแชร์ตัวอย่างการสืบค้น SQL ตัวอย่างเพื่อคำนวณอัตรา Hit เพื่อปรับแต่งหน่วยความจำ
บัฟเฟอร์ฟรี
ข้อมูลที่แก้ไขจะใช้บล็อกที่ดึงมาและคัดลอกไปยังแคชบัฟเฟอร์ข้อมูลก่อนที่จะเปลี่ยนรูปภาพ (ข้อมูล) บัฟเฟอร์เหล่านี้เรียกว่า Free Buffers จากภาพด้านล่าง ดิสก์ที่มีค่า 1,000 หรือหน่วยความจำที่มีค่า 1,000 จะเหมือนกัน รูปภาพด้านล่างแสดงบัฟเฟอร์ว่าง:
แก้ไขบัฟเฟอร์
บัฟเฟอร์ดัดแปลงเรียกอีกอย่างว่า Dirty Buffers อิมเมจในดิสก์และอิมเมจในแคชบัฟเฟอร์ข้อมูลของข้อมูลมีการเปลี่ยนแปลง แต่บัฟเฟอร์หรือข้อมูลเหล่านี้ยังไม่ได้เขียนลงในดิสก์ บัฟเฟอร์เหล่านี้เรียกว่า Dirty Buffers
รูปภาพต่อไปนี้แสดงบัฟเฟอร์ที่แก้ไข:
บัฟเฟอร์ที่ตรึงไว้
ข้อมูลในแคชบัฟเฟอร์ DB จะมีการเปลี่ยนแปลงทุกครั้ง กระบวนการของเซิร์ฟเวอร์จะเลือกข้อมูลที่แก้ไขเหล่านี้สำหรับธุรกรรมเพิ่มเติม ข้อมูลที่เลือกเหล่านี้เป็นเพียงข้อมูลที่ถูกตรึงหรือบัฟเฟอร์
การอ่านกายภาพ :ข้อมูล Oracle บล็อกที่ oracle อ่านจากดิสก์โดยดำเนินการ I/O
การอ่านเชิงตรรกะ :หาก Oracle สามารถตอบสนองคำขอโดยการอ่านข้อมูลจากบัฟเฟอร์แคชของฐานข้อมูลเอง คำขอนั้นจะอยู่ภายใต้การอ่านเชิงตรรกะ
บล็อกฐานข้อมูลได้รับ :เมื่อ Oracle พบข้อมูลที่ต้องการในแคชบัฟเฟอร์ฐานข้อมูล จากนั้น Oracle จะตรวจสอบว่าข้อมูลมีความมุ่งมั่นหรือไม่ หากคอมมิตแล้วจะดึงข้อมูลจากบัฟเฟอร์ บัฟเฟอร์เหล่านี้เรียกอีกอย่างว่า DB buffer gets.
อ่านสม่ำเสมอ :ในแคชบัฟเฟอร์ฐานข้อมูล บล็อกที่มีอยู่ ถูกแก้ไขแต่ไม่ได้คอมมิต ดังนั้นควรดึงข้อมูลจาก undo datafile
เป้าหมายของ db_buffer_cache คือการเพิ่มการอ่านเชิงตรรกะ
การแยกวิเคราะห์อย่างนุ่มนวล :ถ้าเรามีแผนปฏิบัติการอยู่แล้วใน Library Cache มันจะไม่ไปที่ดิสก์ มันจะสร้างแผนการแยกวิเคราะห์ (รหัสแยกวิเคราะห์) จากแผนปฏิบัติการที่มีอยู่ สิ่งนี้เรียกว่า Soft Parse
แยกวิเคราะห์ยาก :ในการสร้างรหัสแยกวิเคราะห์ มันจะตรวจสอบแผนการดำเนินการใด ๆ ที่พร้อมใช้งาน หากแผนการดำเนินการพร้อมใช้งาน แผนจะดำเนินการกับการวิเคราะห์แบบซอฟต์ หากไม่มีแผนปฏิบัติการ ก็จะทำการแยกวิเคราะห์อย่างหนักซึ่งหมายความว่าจะถูกส่งไปยังดิสก์
พูลที่ใช้ร่วมกัน :Shared Pool คือการรวมกันของ Library Cache และ Data Dictionary Cache
แคชไลบรารี: เป้าหมายของ Library Cache คือการเพิ่มการแยกวิเคราะห์แบบซอฟต์
วิธีการบรรลุเป้าหมาย:
-
การใช้ตัวแปรผูก
-
โดยการเขียนขั้นตอนการจัดเก็บ
-
อัตราส่วนการตี (ควรเป็น> 85% หากไม่เพิ่มขนาดพูลที่ใช้ร่วมกัน)
-
DBMS_Shared_pool (แพ็คเกจ)อัตรา Hit มีบทบาทสำคัญในการปรับหน่วยความจำโดยใช้การสืบค้น SQL
แคชพจนานุกรมข้อมูล :เรียกอีกอย่างว่าแคชแถว อัตราส่วน Hit ของ Data Dictionary Cache ต้องเป็น>85% หากไม่เพิ่มขนาดพูลที่ใช้ร่วมกัน
ต่อไปนี้คือข้อความค้นหาตัวอย่างเพื่อคำนวณอัตราส่วนการเข้าชม
select (sum(pinhits)/sum(pins))*100 as lchitratio from v$librarycache;
select namespace, pins, pinhits, reloads from v$librarycache order by namespace;
ในการรับแพ็คเกจของ dbms_Shared_pool โปรดเรียกใช้ @$ORACLE_HOME/rdbms/admin/dbmspool.sql
select namespace, kept, locks, executions from v$db_object_cache where type like '%PROC%';
อัตราส่วนการเข้าถึงแคชพจนานุกรมข้อมูล:
select (sum(gets-getmisses-fixed))/sun(gets) as "ddchitratio" from v$rowcache;
ทำซ้ำบันทึกบัฟเฟอร์แคช:
เลือกชื่อค่าจาก v$sysstat
โดยที่ชื่อเหมือน 'redo%';
เราหวังว่าคุณจะพบว่าประเด็นที่กล่าวถึงข้างต้นมีประโยชน์ และตอนนี้คุณสามารถปรับแต่งหน่วยความจำในฐานข้อมูลได้อย่างง่ายดาย
ใช้แท็บคำติชมเพื่อแสดงความคิดเห็นหรือถามคำถาม คุณสามารถเริ่มการสนทนากับเราได้เช่นกัน