Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

การปรับแต่งหน่วยความจำใน Oracle Database

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

ทุกวันนี้ ปัญหาสำคัญสำหรับลูกค้าทุกรายเกี่ยวข้องกับประสิทธิภาพของฐานข้อมูล บล็อกนี้อธิบายวิธีการปรับแต่งหน่วยความจำในฐานข้อมูลซึ่งส่งผลให้ฐานข้อมูลมีประสิทธิภาพสูง ต่อไปนี้เป็นวิธีการปรับแต่งหน่วยความจำประเภทต่างๆ ที่มีอยู่:การปรับกระบวนการระดับ OS, การปรับ CPU, การปรับ RAM, การปรับฐานข้อมูล ฯลฯ ในบล็อกนี้ ผม จะหารือเกี่ยวกับการปรับหน่วยความจำในฐานข้อมูล

การปรับแต่งหน่วยความจำฐานข้อมูล:

การปรับแต่งหน่วยความจำสำหรับฐานข้อมูลไม่ใช่แค่การปรับแต่ง System Global Area (SGA) ต่อไปนี้เป็นรายการส่วนประกอบหลักที่มีการปรับ SGA มาดูรายละเอียดแต่ละองค์ประกอบเหล่านี้กัน:

  1. เก็บสระ
  2. พูลเริ่มต้น พูลรีไซเคิล สตรีมพูล
  3. DB Buffer Cache:บัฟเฟอร์ว่าง บัฟเฟอร์ที่แก้ไข บัฟเฟอร์ที่ปักหมุด
  4. สระที่ใช้ร่วมกัน

เก็บพูล:

มีบางแพ็คเกจที่ใช้ทุกวัน เพื่อเพิ่มประสิทธิภาพ คุณต้องเก็บแพ็คเกจเหล่านั้นไว้ใน 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 คือการเพิ่มการแยกวิเคราะห์แบบซอฟต์

วิธีการบรรลุเป้าหมาย:

  1. การใช้ตัวแปรผูก

  2. โดยการเขียนขั้นตอนการจัดเก็บ

  3. อัตราส่วนการตี (ควรเป็น> 85% หากไม่เพิ่มขนาดพูลที่ใช้ร่วมกัน)

  4. 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%';

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

ใช้แท็บคำติชมเพื่อแสดงความคิดเห็นหรือถามคำถาม คุณสามารถเริ่มการสนทนากับเราได้เช่นกัน