Mục lục
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.
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.
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.
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.
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.\
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é.
quá hay