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

เพิ่มประสิทธิภาพหน่วยความจำ Oracle Database: กลยุทธ์ปรับแต่งที่พิสูจน์แล้ว

Database Memory Tuning

Memory tuning แจกจ่ายหรือจัดสรรหน่วยความจำว่างให้กับ Oracle memory components ใช้หลักสำหรับ performance tuning บน Oracle queries

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

Database Memory Tuning:

Memory Tuning สำหรับฐานข้อมูลคือการปรับ System Global Area (SGA) ต่อไปนี้คือรายการ major components เกี่ยวกับ SGA tuning มาดูแต่ละ component ในรายละเอียด:

  1. Keep Pool
  2. Default Pool, Recycle Pool, Stream Pool
  3. DB Buffer Cache: Free buffers, modified buffers, pinned buffers
  4. Shared pool

Keep Pool:

มีบาง packages ที่ใช้ทุกวัน เพื่อเพิ่มประสิทธิภาพ คุณต้องเก็บ packages เหล่านั้นไว้ใน SGA ด้วยความช่วยเหลือของ procedure คุณสามารถเก็บ package นั้นไว้ใน keep pool หากพื้นที่ที่จัดสรรให้ SGA ถูก shutdown แล้ว SGA ต้อง reallocated ไปที่ RAM ในขณะนั้น แม้จะเก็บ package ไว้ใน keep pool มันจะถูก flushed off ครั้งต่อไปเมื่อคุณ restart และรัน package นั้น package จะคงอยู่ใน keep pool จนกว่าคุณจะปิดฐานข้อมูล ด้วยการทำเช่นนี้ เราลด I/O's

ด้วยความช่วยเหลือของ hit ratios คุณสามารถมั่นใจได้ว่า parse code execution plans ถูก flush จาก library cache Hit ratio สำหรับ library cache ควรเป็น > 85%

Stream Pool ใช้สร้าง buffer สำหรับ data pump ทุกวัน บางตาราง (ตารางเล็ก) ถูกใช้เพื่อเพิ่มประสิทธิภาพ ดีกว่าที่จะเก็บตารางเหล่านั้นไว้ใน SGA (Keep pool) นี่จะเพิ่มประสิทธิภาพที่คุณไม่ได้ดึงข้อมูลจากดิสก์ แต่จากหน่วยความจำเอง สำหรับตารางใหญ่ เรามี recycle pool

โดย default ทุกครั้งที่เรา select ตารางเหล่านั้น (ตารางเล็ก) ในรูปแบบ blocks จะถูก fetch ใน data buffer cache และจะเก็บใน default pool Default pool นี้จะถูก flushed off เมื่อคุณ select ตารางอื่นๆ หากคุณมีพื้นที่ใน buffer แล้ว ठीक แต่ถ้าไม่มี มันจะ flush ตารางก่อนหน้าเพื่อทำที่ให้ตารางใหม่ เพื่อเพิ่มประสิทธิภาพ ให้เก็บตารางเล็กไว้ใน keep pool แทน default pool Hit ratio สำหรับ data buffer cache ควรเป็น > 95% หากน้อยกว่า 95% เราต้อง resize database buffer cache

ส่วนหลักใน memory tuning คือ Database buffer cache และ shared pool ซึ่งมีประโยชน์สำหรับการรักษาข้อมูลเพียงพอในหน่วยความจำ ทุกคนต้องรู้ basic operations ใน Database buffer cache สำหรับ SGA tuning ที่ท้ายของบล็อก ผมจะแชร์ตัวอย่าง SQL queries เพื่อคำนวณ hit ratio เพื่อปรับแต่งหน่วยความจำ

Free Buffers

Modified data ใช้ fetched blocks และคัดลอกไปยัง data buffer cache ก่อนเปลี่ยน image(data) Buffers นี้เรียกว่า Free Buffers จากภาพด้านล่าง disk ที่มีค่า 1000 หรือ memory ที่มีค่า 1000 คือเหมือนกัน ภาพด้านล่างแสดง Free buffer:

Modified Buffers

Modified buffers เรียกอีกอย่างว่า Dirty Buffers รูปภาพในดิสก์และรูปภาพใน data buffer cache ของข้อมูลถูกเปลี่ยนแล้ว แต่ buffers หรือข้อมูลเหล่านี้ยังไม่ได้ถูกเขียนไปยังดิสก์ Buffers นี้เรียกว่า Dirty Buffers

ภาพต่อไปนี้แสดง modified buffer:

Pinned Buffers

ข้อมูลใน DB buffer cache จะเปลี่ยนแปลงทุกครั้ง Server process จะ select modified data เหล่านี้สำหรับ transactions ต่อไป ข้อมูลที่เลือกนี้คือ pinned data หรือ buffer

Physical reads: Oracle data blocks ที่ oracle อ่านจากดิสก์โดยทำ I/O

Logical reads: หาก Oracle ตอบสนองคำขอโดยอ่านข้อมูลจาก database buffer cache เอง แล้วจะอยู่ภายใต้ logical reads

DB block Gets: เมื่อ Oracle พบข้อมูลที่ต้องการใน database buffer cache Oracle จะตรวจสอบว่าข้อมูล committed หรือไม่ หาก committed แล้วจะ fetch จาก buffers Buffers นี้รู้จักกันในชื่อ DB buffer gets

Consistent Reads: ใน database buffer cache blocks ที่มีอยู่ ถูกแก้ไขแต่ยังไม่ committed ดังนั้นข้อมูลควรดึงจาก undo datafile

เป้าหมายของ db_buffer_cache คือการเพิ่ม logical reads

Soft Parsing: หากเรามี execution plan อยู่ใน Library Cache แล้ว มันจะไม่ไปที่ดิสก์ จะสร้าง parse plan (parse code) จาก execution plan ที่มีอยู่ เรียกว่า Soft Parse

Hard Parsing: เพื่อสร้าง parse code จะตรวจสอบว่ามี execution plan หรือไม่ หากมี execution plan จะไปกับ soft parse หากไม่มี execution plan จะทำ hard parse หมายถึงไปที่ดิสก์

Shared Pool: Shared Pool เป็นการรวมของ Library Cache และ Data Dictionary Cache

Library Cache: เป้าหมายของ Library Cache คือเพิ่ม soft parsing

Methods to achieve goal:

  1. ใช้ bind variables

  2. ด้วยการเขียน stored procedures

  3. Hit ratio (ควร > 85% หากไม่เพิ่ม shared pool size)

  4. DBMS_Shared_pool (package) Hit ratio เล่นบทบาทสำคัญในการปรับแต่งหน่วยความจำด้วย SQL queries

Data Dictionary Cache: เรียกอีกอย่างว่า row cache Data Dictionary Cache hit ratio ต้อง >85% หากไม่เพิ่ม shared pool size

ตัวอย่างคิวรีสำหรับคำนวณ hit ratio

select (sum(pinhits)/sum(pins))*100 as lchitratio from v$librarycache;
select namespace, pins, pinhits, reloads from v$librarycache order by namespace;

เพื่อได้ package ของ dbms_Shared_pool โปรดรัน @$ORACLE_HOME/rdbms/admin/dbmspool.sql

select namespace, kept, locks, executions from v$db_object_cache where type like '%PROC%';

Data Dictionary Cache hit ratio:

select (sum(gets-getmisses-fixed))/sum(gets) as "ddchitratio" from v$rowcache;

Redo log Buffer Cache:

select name, value from v$sysstat where name like 'redo%';

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

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