Kiến trúc Process trong Oracle

   Giới thiệu

Ở trong bài viết trước, tôi đã đề cập đến 1 loại process “không trực tiếp phục vụ cho User process, nhưng nó vẫn âm thầm đóng 1 vai trò quan trọng trong Oracle Database”. Đó là các Background Process.

Đọc thêm  Kiến trúc Process trong Oracle Database - phần 1

Trong bài viết này, chúng ta sẽ cùng tìm hiểu về vai trò của các Background process quan trọng bậc nhất trong Oracle nhé.

Đó là:

   Database Writer (DBWn)

   Log writer (LGWR)

   Checkpoint (CKPT)

   System Monitor (SMON)

   Program Monitor (PMON)


   Database Writer

Như tôi có nói ở bài “SGA trong Oracle là gì?“: Trên phân vùng SGA của Memory có 1 phân vùng con, sử dụng để lưu trữ các dữ liệu khi cần làm việc, đó là Database Buffer Cache.

Dữ liệu trên Database Buffer Cache sẽ được ghi xuống data file (nằm dưới đĩa cứng) định kỳ bởi 1 Process. Đó chính là Database Writer.

Database Buffer Cache
Database Buffer Cache

Trong hình bên trên, bạn còn thấy sự xuất hiện của 1 thành phần gọi là: Database Smart Flash Cache.

Đây là 1 tính năng để cấu hình 1 phân vùng đĩa có tốc độ đọc ghi cao, để lưu trữ các dữ liệu WARM (có tần suất sử dụng trung bình).

Quay lại với DBWn Process. Mỗi khi chúng ta thay đổi 1 dữ liệu nào đó, các block liên quan đến dữ liệu đó sẽ được thay đổi ở trên Database Buffer Cache trước. Đó gọi là các dirty buffer.

Các dirty buffer sẽ không được lưu trữ mãi mãi trên Database Buffer Cache.

Oracle sẽ sử dụng 1 thuật toán phức tạp để đánh giá: Dirty buffer nào có thể được DBWn ghi xuống đĩa. Thuật toán này dựa trên tần suất sử dụng của dữ liệu đó, nó có tên là Least Recent Used (hay LRU).

DBWn cũng không phải chỉ có 1 process duy nhất. Số lượng DBWn sẽ phụ thuộc vào số lượng CPU có trên máy chủ Database. Thông thường công thức sẽ là

Số DBWn = Số CPU / 8

 


   Log writer (LGWR)

Nếu như DBWn ghi dữ liệu ở Database Buffer Cache xuống datafile thì LGWR ghi dữ liệu từ Redo Log Buffer xuống Online Redo Log.

Log Writer Process
Log Writer Process

Redo Log Buffer là nơi lưu các change vector, mô tả sự thay đổi của các block.

Dung lượng của các change vector này nhỏ hơn rất nhiều so với bản thân các block. Do đó, Log Writer có thể ghi với tần suất lớn hơn rất nhiều Database Writer mà không sợ ảnh hưởng quá nhiều đến băng thông của đĩa.

LGWR sẽ được thực thi khi gặp các điều kiện dưới đây:

   Khi người dùng chạy lệnh commit

   Khi 1/3 Redo Log Buffer đầy

   Khi DBWn muốn thực thi, LGWR sẽ được gọi để thực thi trước.

   LGWR chạy 3 giây 1 lần

 


   Checkpoint (CKPT)

Checkpoint là 1 sự kiện trên Oracle Database, nhằm đảm bảo dữ liệu được an toàn và nhất quán.

Checkpoint Process
Checkpoint Process

Khi sự kiện Checkpoint xảy ra, tiến trình Checkpoint (CKPT) sẽ được thực thi. Tiến trình CKPT sẽ gọi cho DBWn để ghi dữ liệu trên Database Buffer Cache xuống. Mà như phần bên trên tôi có nói, DBWn muốn thực thi, LGWn cần phải thực thi trước.

CKPT LGWR  DBWn

 

Như vậy là khi checkpoint xảy ra, dữ liệu cần phải lưu trên Database Buffer Cache và Redo Log Buffer sẽ được ghi hết xuống đĩa.

Cuối cùng tiến trình CKPT sẽ ghi 1 con số đánh dấu (gọi là System Change Number hay SCN) vào controlfile và data file header.

Hay nói cách khác, tại thời điểm checkpoint, số SCN trong controlfile và data file header là giống nhau.

 

Khi bạn shutdown database đúng quy trình, trước khi shutdown, tiến trình CKPT sẽ được gọi để đồng bộ hết dữ liệu trên Memory xuống đĩa.

 

Khi khởi động lại, Oracle sẽ kiểm tra số SCN trong controlfile và data file header xem có giống nhau hay không.

Nếu không giống nhau, Oracle sẽ hiểu là lần shutdown trước đó có vấn đề gì đó (có thể shutdown không đúng quy trình, hoặc mất điện đột ngột), nó sẽ gọi tiến trình SMON để tiến hành khôi phục lại dữ liệu từ Redo Log.


   System Monitor (SMON)

System Monitor (SMON) là background process của Oracle được tạo ra ngay khi khởi động Oracle Database instance.

SMON có nhiệm vụ khôi phục dữ liệu khi khởi động (instance recovery) như đã nói bên trên.

Ngoài ra, nó còn dọn dẹp các dữ liệu tạm, gom các extend trống gần kề nhau thành 1 extend lớn hơn, nhằm tránh phân mảnh dữ liệu. Các công việc này, SMON sẽ thực hiện 5 phút 1 lần.

SMON phải luôn thường trực trong suốt quá trình instance hoạt động, nếu bạn thử kill tiến trình này, instance cũng chết luôn.


   Program Monitor (PMON)

Program Monitor (PMON) là một background process của Oracle cũng được tạo khi khởi động Oracle Database instance.

Nhiệm vụ của Pmon là giải phóng tài nguyên được cấp phát nếu user process bị lỗi.

 

Trên đây là các Background Process quan trọng nhất của Oracle Database. Ngoài ra chúng ta còn nhiều Background Process khác như: MMON, ARCn, Jnnn, …, tuy nhiên, khi mới tiếp cận với Oracle Database, bạn chỉ cần nắm thật chắc các Background Process tôi đã nêu ở trên. Sau này khi đã quen với Oracle, chúng ta sẽ dần tìm hiểu các Background Process khác.

Hi vọng bài viết này sẽ mang đến cho các bạn một cái nhìn toàn cảnh về kiến trúc Process trong Oracle Database. Hẹn gặp lại các bạn ở các bài viết sau.

 

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

   Tặng bạn khoá học “Linux thật là đơn giản” hoàn toàn miễn phí. Khoá học này sẽ giúp bạn nắm được các kiến thức quan trọng nhất để học tập các kỹ năng cao hơn về 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
    0 Comments
    Inline Feedbacks
    View all comments