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
Đọc thêm  Kiến trúc Memory Oracle Database – SGA và PGA

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ớ:

 

Khi bạn xác định kích thước của thành phần Cha, thì kích thước của thành phần Con sẽ tự động được điều chỉnh tùy vào nhu cầu của database.

 

Ý 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 2: ADMIN 1 + DATA GUARD

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é.

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
2 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
hanh
hanh
1 năm trước

cho em hỏi vì sao scope=spfile ạ

2
0
Rất thích suy nghĩ của bạn, hãy bình luận.x