หลายคนคงรู้อยู่แล้วว่า การทำงานของ Oracle Database ถูกออกแบบมาให้ทำงานบน Memory เพราะมันไวกว่าการไป Access Disk ซึ่งเราสามารถไปปรับค่า Parameter ต่าง ๆ บน Oracle Database ได้ ซึ่งของ Memory เองก็มี Parameter อยู่ 2 ตัวด้วยกัน
Memory Max Target vs Memory Target
การกำหนด Memory Max Target จะเป็นเหมือนกรอบของการกำหนด Memory Target เนื่องจากการ Start Database บน Oracle จะทำการจองพื้นที่บน Memory จากค่าที่เรากำหนดใน Memory Target ซึ่งการเปลี่ยนแปลงค่าบน Memory Target สามารถเปลี่ยนได้เลยโดยไม่ต้องทำการ Restart Database แต่จะไม่เกินค่าใน Memory Max Target ถ้าเราต้องการเปลี่ยนแปลงค่าบน Memory Max Target จะต้องทำการ Restart Database ซึ่งภายใน Memory Target จะถุกแบ่งเป็น SGA และ PGA
How to set Value
คำถามต่อมาคือ เราต้องกำหนดค่าเท่าไหร่ บน Oracle จะมีเครื่องมือที่จะอ่านการทำงานของเราเพื่อบอกว่าเราต้องกำหนดเท่าไหร่
- เรามีสูตรการคำนวณง่าย ๆ ในการหา Memory Target
memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)
- หาค่า sga_target และ pga_aggregate_target
SQL> show parameter target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 1648M
memory_target big integer 1648M
parallel_servers_target integer 16
pga_aggregate_target big integer 0
sga_target big integer 0
- หาค่า maximum PGA allocated
SQL> select value from v$pgastat where name='maximum PGA allocated';
VALUE
----------
123243520
- ทำการเปลี่ยนค่า
SQL> ALTER SYSTEM SET MEMORY_TARGET = nM;
SQL> ALTER SYSTEM SET SGA_TARGET = 0;
SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;
- หรือดูจาก Memory Advisor บน Enterprise Manager ( EM ) แล้วคลิก Advice
- จะแสดง Memory Size Advice
Monitoring Automatic Memory Management ( AMM )
SQL> V$MEMORY_DYNAMIC_COMPONENTS
SQL> V$MEMORY_RESIZE_OPS
SQL> V$MEMORY_TARGET_ADVICE
- has the current status of all memory components
- has a circular history buffer of the last 800 memory resize requests
- provides tuning advice for the MEMORY_TARGET initialization parameter
Question
ถ้าเครื่อง Oracle Server เรามี Memory 32 GB และมี 1 Instance เราจะกำหนด Memory Max Target ได้เท่าไหร่
answer> จะกำหนด Memory Max Target ได้ 28 GB เพราะต้องเหลือให้ OS 4 GB
โดยควรให้ Oracle ทำงานอยู่บน Memory เท่านั้น ไม่ควรให้มันล้นไปทำงานใน Swap
ถ้ามี 2 Instance ก็อย่าให้เกิน 28 GB
อ่านเพิ่มเติม : https://bit.ly/2FVl1KH
Leave a Reply