Ở phần một, chúng ta đã tìm hiểu về kiến trúc bộ nhớ trong Oracle Database 11g. Ở phần này, chúng ta sẽ tiếp tục tìm hiểu về các process, chính là các tiến trình thực hiện các hoạt động trong hệ thống.

Khi user mở 1 tool ứng dụng lên, chẳng hạn như SQL*Plus, Toad… và kết nối đến database, ta gọi đó là user process. Mấy cái đó thì khỏi nói hen. Phần process chúng ta sẽ tìm hiểu ở đây là các process chạy trên instance, bao gồm server process và các background process.

 

Server process

Server process là các process được sinh ra để phục vụ request từ user process

Trường hợp cấu hình Dedicated server: mỗi user process sẽ được phục vụ bởi 1 server process.

Trường hợp cấu hình Shared server: các shared server process nằm chung trong 1 pool, dispatcher sẽ chuyển các request đến pool này, từ đó các server process chia nhau phục vụ client request, phục vụ xong lại quay về pool nằm chờ việc laugh

 

Vậy công việc của server process là gì? Cơ bản có 3 nhiệm vụ:

  • Phân tích (parse) và chạy các câu lệnh SQL từ client (user process)
  • Đọc dữ liệu cần thiết từ disk lên database buffer cache nếu chưa có
  • Trả kết quả về cho client

Background process

Cùng với các server process “chạy vòng ngoài”, Oracle Database còn có các background process, là các process thực hiện các công việc nội tại database: quản lý memory, process, quản lý I/O, giao tiếp giữa các thành phần…

 

Oracle Background Process

 

Database Writer Process (DBWn)

DBW có nhiệm vụ ghi những dữ liệu đã thay đổi (dirty buffer) xuống disk. Có thể cấu hình tối đa 20 process DBW (từ DBW0 -> DBW9 và DBWa -> DBWj).

Thường DBW sẽ ghi dữ liệu khi Database buffer cache gần đầy, thiếu chỗ trống, trong 1 số trường hợp như khi alter tablespace offline hoặc read only, hoặc ghi để gọi checkpoint.

DBW sẽ ghi dữ liệu theo batch (ghi multiblock) để tăng performance.

 

Log Writer Process (LGWR)

Log Writer Process chịu trách nhiệm ghi dữ liệu từ redo log buffer cache vào redo log file. LGWR là 1 trong những process hoạt động nhiều nhất, do phải ghi dữ liệu liên tục. LGWR ghi dữ liệu mỗi 3 giây, hoặc khi:

– Redo log buffer đầy 1/3

– User commit transaction, hoặc trước khi DBWn ghi dirty buffer vào disk (để đảm bảo không mất dữ liệu)

 

Archiver Process (ARCn)

Process này chỉ có nếu database chạy ở ARCHIVE LOG mode. Sau khi switch log, process này chịu trách nhiệm ghi redo log file ra file archive để lưu trữ. Ngoài ra process này còn thực hiện chuyển dữ liệu qua hệ thống standby nếu có cấu hình.

 

Checkpoint Process (CKPT)

Process này cập nhật checkpoint (thông tin về System Change Number (SCN)) trong control file và data header. CKPT cập nhật checkpoint khi redo log đầy, hoặc trước khi DBW ghi dữ liệu, để đánh dấu vị trí cần khôi phục khi instance crash (đảm bảo tất cả dữ liệu trước SCN đó đã ghi vào disk, đánh dấu điểm thực hiện quá trình instance recovery). Do đó giúp làm giảm thời gian chạy instance recovery (MTTR – Mean Time to Recovery).

 

System Monitor Process (SMON)

Khi hệ thống bị crash (vd cúp điện, 1 process khác chết làm instance crash) và được start lại, SMON sẽ thực hiện recovery, cập nhật dữ liệu từ redo log file vào datafile. Ngoài ra SMON còn dọn dẹp temporary segment trong các tablespace nếu không còn sử dụng nữa.

 

Process Monitor Process (PMON)

PMON làm nhiệm vụ theo dõi các user process. Nếu 1 user process không còn kết nối đến database nữa, nó sẽ rollback transaction của user nếu còn transaction dang dở, release lock của user nếu có, “thả” những block của user trong buffer cache ra, và xóa process ID khỏi danh sách active process.

PMON còn theo dõi dispatcher và server process, restart lại nếu chúng bị lỗi.

Ngoài ra, PMON đăng ký thông tin dispatcher, instance với listener để phục vụ cho việc nhận kết nối từ user.

 

Recoverer Process (RECO)

Process này theo dõi các transaction liên quan giữa database hiện tại với các database khác (distributed transaction). Trong trường hợp distributed transaction lỗi, RECO sẽ rollback transaction và dọn dẹp những thông tin liên quan đến  transaction đó trên các database.

 

Các process khác
Trên đây là các process cơ bản của instance database. Ngoài ra ta còn gặp 1 số background process khác trên hệ thống như:

CJQ0 – Job Queue Coordinator: lấy job từ data dictionary và tạo ra các Job slave process để chạy job

Jnnn – Job Slave process: các process con của CJQ0 thực hiện chạy job 

 QMNC – AQ Coordinator Process: quản lý các hoạt động liên quan đến Advanced Queue, Oracle Streams

Qnnn – AQ Slave process: các process con của QMNC thực hiện các công việc liên quan

SMCO – Space Management Coordinator Process: quản lý dung lượng

Wnnn – Space Management Slave process: các process con của SMCO thực hiện các công việc liên quan

PSP0 – Process Spawner Process: process này tạo ra các background process sau khi instance startup

MMAN – Memory Manager Process: quản lý instance memory

MMON – Manageability Monitor Process: thực hiện các công việc liên quan đến quản trị, như AWR, ADDM…

MMNL – Manageability Monitor Lite Process: thực hiện các công việc liên quan đến ASH, metrics…

VKTM – Virtual Keeper of Time Process: quản lý giờ giấc, thời gian của instance

DIAG – Diagnostic Capture Process: tạo ra các diagnostic dump

DBRM – Database Resource Manager Process: quản lý các công việc liên quan đến Resource plan

DIA0 – Diagnostic Process: xác định và giải quyết deadlock, sự cố treo trong hệ thống

Pnnn – Parallel Query Slave Process: các process thực hiện query, DML, DDL parallel

 

ASM Background process

Trong trường hợp sử dụng ASM cho hệ thống lưu trữ, sẽ có thêm 1 số background process như:

  • ASMB – ASM Background Process: quản lý ASM instance
  • RBAL – ASM Rebalance Master Process: quản ly hoạt động rebalance trên ASM instance, và quản lý diskgroup trên database instance
  • GMON – ASM Disk Group Monitor Process: monitor ASM diskgroup
  • Onnn – ASM Connection Pool Process: quản lý giao tiếp với ASM instance

Có những process ít quan trọng và có thể được tạo lại khi bị crash, như ARC, CJQ0, MMON… Có những process là quan trọng và bắt buộc phải có, nếu process bị crash thì instance sẽ bị crash ngay, chẳng hạn như SMON, PMON, DBWR, … 

Do đó, cần có các giải pháp monitor hệ thống, hoặc sử dụng Oracle Restart, để đảm bảo start lại ngay instance trong trường hợp bị crash, hạn chế downtime.