Kiến trúc thành phần đầu tiên mà tôi muốn nói đến trong Kiến trúc Oracle Datase: Đó là kiến trúc Memory.

Như bài trước, tôi đã có lấy một ví dụ: Kiến trúc Memory giống như khu vực phục vụ khách trong 1 nhà hàng vậy.

Đọc thêm  Tổng quan về kiến trúc Oracle Database

Ở bài này, tôi sẽ giới thiệu cho bạn biết một thông tin nữa:

Khi Database instance hoạt động, trên Memory (hay RAM) sẽ phân hoạch thành 2 khu vực: 

   Khu vực bộ nhớ chia sẻ (System Global Area – SGA)

   Khu vực bộ nhớ riêng tư (Program Global Area – PGA)

kien truc memory oracle

Kiến trúc Memory của Oracle Database

Ngay ở phần sau, tôi sẽ giải thích ý nghĩa và vai trò của các  khu vực này trong kiến trúc Memory nhé:


   Khu vực chia sẻ – System Global Area (SGA)

Khu vực chia sẻ trên Memory, hay tên đầy đủ là System Global Area (SGA), là 1 khu vực bộ nhớ cho phép nhiều session có thể chia sẻ dữ liệu trên đó. Để dễ nhớ vai trò của SGA, bạn hãy liên tưởng chữ S trong SGA nghĩa là Share (chia sẻ).

Bạn nhớ lại xem có gặp tình huống như thế này chưa: Bạn chạy 1 câu lệnh select dữ liệu từ 1 bảng A. Ví dụ lần đầu câu lệnh đó thực hiện mất 10 giây. Nhưng đến lần sau, cũng vẫn câu lệnh đó, lại chỉ mất có 1 giây. Rồi những lần chạy tiếp theo cũng như vậy.

Đó là bởi: Các dữ liệu cần thiết cho câu lệnh đó đã được đọc từ ổ đĩa lên và nạp vào SGA sau khi chạy câu lệnh lần đầu rồi. Và nó sẽ ở nguyên tại đó, để những lần sau bạn chạy lại, nó sẽ không cần phải đọc lại từ dưới đĩa lên nữa. Tuy nhiên, dữ liệu sẽ không được lưu trên SGA mãi mãi. Những dữ liệu lâu không được sử dụng, sẽ dần dần bị loại bỏ khỏi SGA. Cơ chế cụ thể thế nào, ở những bài sau chúng ta sẽ tiếp tục tìm hiểu nhé.

Cơ chế hoạt động cũng tương tự khi 2 session khác nhau có thể chia sẻ dữ liệu cho nhau trên SGA.

Một ví dụ liên tưởng khác để bạn dễ nhớ vai trò của SGA hơn nhé:

Lại nói ví dụ Oracle Database như 1 cái nhà hàng

SGA chính là các khu vực mà các thực khách đều có thể sử dụng: Quầy lễ tân, nhà vệ sinh.

Khu vực SGA

Chi tiết bên trong SGA còn nhiều phân vùng khác nữa, bạn có thể tìm hiểu trong bài viết tiếp theo của tôi tại đây

Đọc thêm  SGA trong Oracle là gì

   Khu vực riêng tư – Program Global Area (PGA)

Trên Memory còn có các khu vực riêng tư khác dành cho riêng từng process (không hẳn là cho từng người dùng, các bạn chú ý điều này). Nó gọi là Program Global Area (PGA). Chữ P trong PGA bạn cũng có thể ghi nhớ là Private (riêng tư) được nhé.

Khu vực này, như cái tên của nó, để chứa các dữ liệu độc quyền của các session người dùng, chỉ riêng session nào sinh ra dữ liệu mới đọc được dữ liệu riêng tư đó mà thôi. Ví dụ: thông tin cá nhân của session, hay giá trị cụ thể của các biến được session sử dụng,…

Vậy nếu Oracle Database là cái nhà hàng thì PGA là cái gì?

Câu trả lời là: Mỗi thực khách sẽ có 1 bàn ăn riêng, ngoại trừ các nhân viên phục vụ, không ai được phép động vào thức ăn trên đó ngoài bản thân thực khách sở hữu. Bàn ăn đó chính là PGA.

Khác với SGA là 1 khu vực lớn, nơi tất cả “thực khách” sẽ cùng sử dụng nó. PGA không chỉ có 1, mà là có nhiều PGA được cấp phát cho từng “thực khách” vào ăn, và PGA cũng sẽ được hủy ngay khi “thực khách” đã rời đi.

khu vuc pga

Như vậy là tôi đã đi tiếp một tầng của 1 kiến trúc thành phần trong kiến trúc Oracle Database rồi (Kiến trúc Oracle Database –> Kiến trúc Memory –> SGA / PGA).

Ở các bài viết tiếp, tôi sẽ chia sẻ tiếp cho các bạn các tầng tiếp theo trong kiến trúc Memory nhé.

Tham khảo tài liệu: https://docs.oracle.com/en/database/

 

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    7 Comments
    Oldest
    Newest Most Voted
    Inline Feedbacks
    View all comments
    Tuan Nguyen
    Tuan Nguyen
    2 months ago

    Thầy nói rất dễ hiểu, Mong Thầy tiếp tục các bài viết ạ. Em cám ơn Thầy

    Tuan Nguyen
    Tuan Nguyen
    2 months ago
    Reply to  mr.duydx

    Thầy cho em hỏi có cách nào lồng câu lệnh SQL vào lệnh alter không ạ. ví dụ: alter system kill session ‘sid, serial#’ immediate; em muốn thay sid và serial# bằng câu “select sid from v$session where blocking_session is not null” thì làm cách nào để gán giá trị sid trả ra từ câu select đó vào sid trong lệnh alter ạ. mong nhận được phản hồi từ Thầy. Em cám ơn Thầy nhiều ạ

    Tuan Nguyen
    Tuan Nguyen
    2 months ago
    Reply to  mr.duydx

    Em mới học nên vẫn chưa hiểu lắm. Như câu lệnh của Thầy select ‘alter system kill session ”’||sid || ‘,’|| serial#|| ”’;’ from v$session ; khi chạy sẽ ra kết quả là 1 câu alter system kill session ‘1,20742’; Nó không như ý em hỏi. Tức là em muốn chạy lệnh alter nhưng em muốn đưa trực tiếp số sid và serial từ 1 câu select.

    Tuan Nguyen
    Tuan Nguyen
    2 months ago
    Reply to  mr.duydx

    Hay dễ hiểu hơn là em muốn chạy 1 câu alter mà kill ngay session, chứ không phải làm các bước.
    bước 1 tìm ra session bị block.
    bước 2 tìm ra session giữ block.
    bước 3 kill session giữ block bằng việc chạy lệnh alter và đưa sid tìm được ở bước 2.
    giờ em muốn hỏi là chỉ cần 1 câu lệnh mà gộp luôn 3 bước trên không ạ
    chỉ cần altter system kill session ‘select sid…., select serial#….’ immediate;