Mục lục
1. Giới thiệu
Tối ưu database bằng cách điều chỉnh các tham số cấp phát Memory trong Oracle là cách thức đơn giản mà khá hiệu quả. Nhất là với các hệ thống mà người quản trị có ít kinh nghiệm, thường cài đặt theo mặc định.
Trong bài viết này tôi sẽ hướng dẫn các bạn cách thay đổi các tham số liên quan đến cấp phát Memory trong Oracle database nhé.
2. Các tham số quy định Memory trong Oracle Database
1. Các tham số Memory
Đầu tiên, bạn cần phải biết, kích thước Memory được cấp phát cho Oracle Database được quy định bởi các tham số sau:
- memory_target: Quy định lượng Memory được cấp phát cho Database
- sga_target: Quy định kích thước phân vùng SGA
- pga_aggregate_target: Quy định tổng kích thước của các phân vùng PGA
- db_cache_size: Quy định kích thước của Database Buffer Cache
- log_buffer: Quy định kích thước của Redo log buffer
- shared_pool_size: Quy định kích thước của Shared Pool
2. Giải thích ý nghĩa:
Như tôi đã nói ở bài viết trước, Memory = SGA + PGA. Bên trong SGA hoặc PGA lại có những thành phần khác nhỏ hơn như Buffer Cache, Library Cache, … Do đó, có một nguyên tắc, tôi phát biểu như thế này cho các bạn dễ nhớ:
Ý nghĩa của phát biểu trên cụ thể như sau:
Giả sử bạn đã đặt giá trị cho tham số Memory_target, tức là đã xác định kích thước Memory được cấp phát cho toàn bộ Database rồi. Mà trong Memory lại có SGA và PGA là những thành phần con, thế thì SGA và PGA sẽ tự động được Oracle cân nhắc điều chỉnh tùy vào nhu cầu của database, và không vượt quá kích thước đã được cấp phát cho thành phần Cha, tức là Memory
(cơ chế này gọi là Automatic Memory Management – AMM).
Cũng tương tự như vậy, nếu bạn đã đặt tham số Sga_target cho SGA thì các thành phần con của SGA như Buffer Cache, Redo Log Buffer, Share Pool cũng sẽ tự điều chỉnh kích thước. (cơ chế này gọi là Automatic Shared Memory Management – ASMM).
Bây giờ tôi sẽ hướng dẫn các bạn chỉnh sửa giá trị cho các tham số này
3. Đặt giá trị Memory cấp phát cho Oracle Database
Đầu tiên bạn phải kết nối vào database bằng sqlplus
$ sqlplus / as sysdba SQL*Plus: Release 12.2.0.1.0 Production on Tue Jun 15 23:35:04 2021 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL>
Bây giờ, tôi kiểm tra xem dung lượng hiện đang cấp phát cho Database là bao nhiêu, bằng cách
SQL> show parameter memory_max_target; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ memory_max_target big integer 0 SQL> show parameter memory_target; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ memory_target big integer 0
Như các bạn thấy đó, hiện tại các giá trị này chưa được thiết lập. Điều đó không có nghĩa là không có tý Memory nào được cấp phát cho Database nhé. Nó cho thấy có thể là các giá trị SGA và PGA đã được thiết lập sẵn.
Để thay đổi lượng Memory cấp phát cho Oracle Database bạn cần điều chỉnh 2 tham số Memory_max_target và Memory_max_size
SQL> alter system set memory_max_target=20G scope=spfile; System altered. SQL> alter system set memory_target=20G scope=spfile; System altered.
Ở ví dụ trên, tôi đã thay đổi giá trị của Memory cấp phát cho Database là 20G
Sau khi đã thay đổi xong, bạn cần restart lại database để giá trị mới có hiệu lực
SQL> shutdown immediate SQL> startup
4. Đặt giá trị cấp phát cho SGA và PGA
Trước tiên tôi cũng cần kiểm tra xem hiện tại các tham số cho SGA và PGA đang có giá trị là bao nhiêu
SQL> show parameter sga_target NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sga_target big integer 2400M SQL> show parameter sga_max_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sga_max_size big integer 2400M
Để thay đổi lượng Memory cấp phát cho SGA và PGA tôi thực hiện như sau:
SQL> alter system set sga_max_size=15G scope=spfile; System altered. SQL> alter system set sga_target=15G scope=spfile; System altered. SQL> alter system set pga_aggregate_target=5G;
Ở ví dụ trên, tôi đã thay đổi giá trị của SGA được cấp phát cho Database là 15G và PGA là 5G.
Và cuối cùng cũng như ví dụ trên, tôi sẽ cần phải restart database để các giá trị mới có hiệu lực.
PS: Nếu bạn muốn tham khảo chi tiết hơn về cách dùng các tham số này, bạn có thể xem tại trang documentation chính thức của Oracle nhé
https://docs.oracle.com/database/121/ADMIN/memory.htm
Nguồn: https://dangxuanduy.com/
Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.
KHOÁ DÀNH CHO NGƯỜI MỚI
KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)
CÁC KHOÁ NÂNG CAO:
KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c
KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD
CÁC KHOÁ COMBO:
COMBO 1: ADMIN 1 + MULTITENANT 12c
COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD
LỊCH HỌC:
Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE
ĐĂNG KÝ:
https://forms.gle/MtCAoRQFenP886y79
Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.
cho em hỏi vì sao scope=spfile ạ
Bởi vì đó là tham số static nên phải dùng scope=spfile bạn nhé.
Cho em hỏi. Nếu mình cài đặt theo thông số Ram 32G, mai mốt mình có thể nâng cấp lên đc không ạ
Được bạn nhé 😀