KIẾN TRÚC ORACLE DATABASE SERVER

Để làm việc với Oracle database thì việc nắm vững kiến trúc của nó cũng khá quan trọng. Oracle đã tạo ra 1 RDBMS thuộc hàng top trên thế giới. Do đó kiến trúc của Oracle database nhìn vào đơn giản nhưng rất phức tạp, nhưng nếu nắm vững lý thuyết thì sẽ cảm thấy rất đơn giản

Xét 1 server Oracle database cơ bản, chúng ta sẽ có 3 kiến trúc:

  • Kiến trúc bộ nhớ (memory structure)
  • Kiến trúc process (process structure)
  • Kiến trúc về lưu trữ (storage structure)

Trong đó, bộ nhớ và các process sẽ tạo thành instance, phần lưu trữ là database.

Instance + database = 1 Oracle database system.

Với nonclustered database system, mỗi database sẽ chạy trên 1 instance. Trên 1 server, bạn tạo ra 3 database, thì sẽ có 3 instance, mỗi instance chạy cho 1 database.

Với clustered database system, mỗi database sẽ chạy trên nhiều instance. VD bạn có thể có 3 server cùng chạy 1 database, mỗi server là 1 instance.

Oracle_architect_overview

1. Kiến trúc bộ nhớ

Trong phần 1 này chúng ta sẽ tìm hiểu về kiến trúc bộ nhớ, là kiến trúc cực kỳ quan trọng trong hoạt động của Oracle database.

Kiến trúc bộ nhớ của Oracle gồm 2 phần:

System Global Area (SGA): phần bộ nhớ chia sẻ, bao gồm nhiều phần bộ nhớ nhỏ bên trong, chứa thông tin về hoạt động database, thông tin về các session, process, code thực thi, dữ liệu đọc từ phần lưu trữ lên…

Program Global Area (PGA): phần bộ nhớ riêng cho mỗi server process (user session) hay background process.

System Global Area (SGA)

sga_1

SGA là phần bộ nhớ cực kỳ quan trọng trong Oracle instance. SGA chứa các dữ liệu, thông tin hoạt động của database, và được dùng chung cho các server/background processes.

Trong SGA chia ra làm nhiều phần bộ nhớ nhỏ hơn, bao gồm:

Shared Pool

Shared pool

Shared pool bao gồm 1 số phần bộ nhớ nhỏ như sau:

Library cache: chứa những câu lệnh SQL, PL/SQL của các user, cũng như parse tree, execution plan của các câu lệnh đ. Do là bộ nhớ chia sẻ, nên có thể chứa các câu lệnh giống nhau của các session, cũng như khi đã có execution plan cho 1 câu lệnh, lần tiếp theo câu lệnh đó được chạy sẽ có execution plan để chạy luôn, tiết kiệm thời gian phân tích.

Data dictionary: chứa các database table của user SYS và SYSTEM, là các table chứa các thông tin về database, cấu trúc database, thông tin về user… để hỗ trợ trong việc thực thi các câu lệnh. Nếu phần này nhỏ, việc đọc thông tin từ data dictionary sẽ tốn thêm I/O, gọi là recursive calls

Server Result Cache: gồm SQL query result cache và PL/SQL function result cache, chứa 1 số kết quả thực thi để có thể dùng lại cho các câu lệnh tương tự.

Database Buffer Cache

sga_2

Database buffer cache là phần bộ nhớ để chứa các block dữ liệu đọc từ đĩa lưu trữ lên. Khi 1 session cần dữ liệu, Oracle sẽ kiểm tra có trong Database buffer cache chưa. Nếu có rồi (cache hit), thì đọc luôn trong buffer cache. Nếu chưa có (cache miss), Oracle sẽ phải đọc từ thiết bị lưu trữ lên.

Buffer trong Database buffer cache được quản lý theo thuật toán LRU (Least Recently Used). Những buffer cũ ít xài sẽ được xóa dữ liệu đi để lấy chỗ cho dữ liệu mới cần thiết.

Ngoài Database buffer cache, phần KEEP buffer pool được dùng để chứa những dữ liệu cần sử dụng lâu hơn, phần RECYCLE buffer pool được dùng để chứa những dữ liệu cần xóa nhanh hơn, phần nK buffer cache sẽ dùng để chứa dữ liệu từ những block khác size mặc định (vd 16k, 32k).

Redo Log Buffer

Redo Log Buffer

Redo log buffer là phần bộ nhớ chứa những thay đổi trên database, do các câu lệnh DML, DDL hay do các hoạt động nội bộ trong database. Khi Redo log buffer đầy 1/3 hoặc cứ sau mỗi 3 giây, Log writer process sẽ ghi vào Redo log files, để lấy chỗ cho những nội dung thay đổi mới.

Do Redo log buffer chứa những thay đổi trên database, nên để đảm bảo toàn vẹn dữ liệu, 1 transaction chỉ được coi là đã commit khi đã ghi những thay đổi trong Redo log buffer vào Redo log files, đảm bảo nếu có sự cố có thể recover được những thay đổi gần nhất.

Large Pool

Large Pool

Large pool có khả năng cấp phát 1 lượng lớn block buffer, dùng cho các hoạt động lớn trong database, như các transaction liên quan tới nhiều database, các parallel query, backup/restore, các hoạt động I/O của server process, Advanced Queuing memory table…

Large pool không dùng thuật toán LRU để quản lý.

Java Pool

Phần bộ nhớ này được dùng để lưu tất cả những code và data Java trong session của user, cũng như của máy ảo Java (JVM). Khi chạy export/import chẳng hạn, phần bộ nhớ này sẽ được sử dụng.

Streams Pool

Streams Pool phục vụ cho Oracle Streams. Nếu cấu hình Streams Pool bằng 0, phần bộ nhớ cho các hoạt động Streams set được cấp phát từ Shared pool và tối đa là 10% Shared pool.

Program Global Area (PGA)

Có 1 phần bộ nhớ trong hệ thống chứa thông tin về session, gọi là User Global Area (UGA).

Trong trường hợp instance dùng cấu hình shared server, UGA sẽ nằm trong SGA luôn.

Còn trường hợp instance cấu hình dedicated server, UGA sẽ nằm trong PGA.

PGA là phần bộ nhớ riêng cho mỗi server process. Ngoài UGA, PGA còn chứa Private SQL Area và SQL Work Areas.

Private SQL Area: chứa các bind variables, thông tin về câu query (ví dụ như số dòng khi thực hiện full table scan)…

SQL Work Areas: vùng bộ nhớ này dùng cho các hoạt động khác liên quan đến câu query như:

  • sort area dùng cho việc sắp xếp
  • hash area dùng cho thao tác hash join
  • bitmap merge area cho thao tác merge bitmap từ bitmap index scan…

Ngoài SGA và PGA, Oracle instance còn sử dụng Software code area, là 1 phần bộ nhớ riêng biệt, chứa code thực thi của Oracle. Phần bộ nhớ này là read-only, thường cố định và chỉ thay đổi khi update/reinstall software.

2. Kiến trúc process

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

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.

3. Kiến trúc lưu trữ

Sau phần 1 – tìm hiểu về kiến trúc bộ nhớ và phần 2 – tìm hiểu về kiến trúc process, phần này chúng ta sẽ tìm hiểu về kiến trúc lưu trữ trong Oracle Database. Có thể coi nó chính là … Oracle database. Do memory + process = instance, instance để vận hành database, vậy database là gì? Chính là những gì lưu trữ ở dưới hệ thống đĩa.

Kiến trúc lưu trữ bao gồm kiến trúc luận lý (logical structure)kiến trúc vật lý (physical structure), có mối quan hệ mật thiết với nhau.

Physical Structure

physical structure

Phyical structure – kiến trúc vật lý – chính là các tập tin, là những gì chúng ta có thể thấy được trực tiếp trên hệ điều hành, được lưu trữ trên hệ thống lưu trữ (có thể là local disk, SAN, NAS…, disk có thể format theo file system như ext3, hay format thành ASM disk…), bao gồm:

Data files

Đúng như tên gọi, data files là các tập tin chứa dữ liệu của database, bao gồm cả dữ liệu của user hay ứng dụng, data dictionary của Oracle database.

Mỗi data file chỉ thuộc về 1 tablespace, có thể tự tăng kích thước (AUTOEXTEND) và tối đa đến 1 giới hạn (MAXSIZE) nếu ta cấu hình khi tạo.

Data file có thể là:

  • Datafile: các tập tin chứa dữ liệu
  • Tempfile: các tập tin chứa dữ liệu tạm thời phục vụ cho hoạt động của database
  • Undo datafile: các tập tin chứa dữ liệu undo phục vụ cho hoạt động của database

Các tập tin này hay có đuôi là .dbf

Control files

Đây là tập tin hết sức quan trọng với database, nếu không có nó sẽ không open được database. Tập tin này chứa metadata về database, như tên database, vị trí các data files, redo log files, thông tin về backup,…

Do là tập tin quan trọng, nên chúng ta cần nhân bản (multiplex) file này ra làm 2, 3 bản ở các vị trí lưu trữ khác nhau, để trong trường hợp 1 file bị hư vẫn còn các file còn lại, đảm bảo hệ thống hoạt động.

Các tập tin này hay có đuôi là .ctl

Online redo log files

Đây chính là các tập tin mà process LGWR ghi dữ liệu ra từ Redo log buffer. Các tập tin này cần thiết trong trường hợp instance crash, phải recover lại.

Các redo log files được chia vào các log group. Mỗi log group cũng nên có 2 redo log files trở lên (cũng multiplex như control file), để đảm bảo khi có 1 file hư thì vẫn còn file còn lại để hệ thống hoạt động.

Do được sử dụng xoay vòng, cần ít nhất 2 log group trong database.

Khi hoạt động, log group có thể có các trạng thái sau:

  • UNUSED: log group mới tạo, chưa sử dụng bao giờ
  • CURRENT: log group đang được ghi dữ liệu
  • ACTIVE: log group đang không ghi dữ liệu, nhưng đang cần phòng trường hợp instance crash
  • INACTIVE: log group đang không ghi dữ liệu, không cần trong trường hợp instance crash

Archived redo log files

Nếu database chạy trong chế độ ARCHIVELOG, các redo log file khi đầy / khi switch sẽ được ghi ra archived log files. Các archived redo log files này dùng với các bản backup để đảm bảo có thể restore hệ thống đến 1 thời điểm xác định. Ngoài ra, archived redo log files còn dùng cho các tính năng khác như Data Guard.

Initialization files

Đây là tập tin chứa các tham số cấu hình liên quan đến bộ nhớ, vị trí control files, vị trí các thư mục log, các tham số cấu hình hoạt động của database… được dùng khi startup instance. Có 2 loại file:

  • Pfile (parameter file): là dạng file text, thường có tên init.ora
  • Spfile (server parameter file): là dạng file binary, thường có tên spfile.ora

Các tập tin này thường nằm trong ORACLE_HOME/dbs. Nếu dùng ASM để lưu trữ thì spfile hay nằm trong ASM.

Spfile có nhiều ưu điểm hơn pfile và thường được dùng chính cho database. Tuy vậy pfile cũng cần thiết trong nhiều trường hợp. Việc nắm vững thao tác với 2 loại file này sẽ rất có ích.

Password files

Tập tin này chứa password của các user được cấp quyền SYSDBA hay SYSOPER, cho phép các user có quyền admin này kết nối từ xa để thực hiện các thao tác cần xác thực bên ngoài database, chẳng hạn như startup.

Tập tin này thường có tên orapw nằm trong ORACLE_HOME/dbs.

Alert log & Trace files

Alert log là tập tin ghi lại log các hoạt động chính của database (startup, shutdown, switch log…), các thao tác liên quan đến tablespace và datafile, ALTER DATABASE, ALTER SYSTEM, các lỗi liên quan đến hoạt động database…

Đây là tập tin cần thường xuyên theo dõi kiểm tra để đảm bảo hoạt động của database. Tập tin này thường có tên alert_.log

Trace files là các file log ghi lại các lỗi xảy ra trên các background process và server process. Ngoài ra cũng có lúc DBA chủ động ghi trace file để kiểm tra 1 số thông tin rõ ràng hơn.

Backup files

Backup files là các file sao lưu lại nội dung database, mục đích chính là phòng trường hợp có hư hỏng gì thì dùng để khôi phục database.

Backup files có thể là các file copy của các file khác (data file, control file, redo log, archived log…) nếu sử dụng “cold backup”, hoặc có thể là các tập tin do RMAN sinh ra nếu dùng RMAN để backup.

Do đây là các tập tin trên OS, nên nó cũng có các tính chất như các tập tin khác (lưu trữ theo kích thước OS block, có phân quyền owner, read/write…)

Logical Structure

Nếu như trên OS ta thấy các tập tin database đơn giản chỉ là … các tập tin, thì trong database, việc lưu trữ logic lại tổ chức phức tạp hơn, theo nhiều cấp.

Storage structure

Oracle data block

Data block là cấp độ lưu trữ logic nhỏ nhất trong Oracle database. Thường 1 Oracle data block sẽ gồm nhiều OS block để tăng I/O. Mặc định block size là 8KB. Tuy nhiên khi tạo tablespace, có thể đặt block size khác tùy theo nhu cầu.

 Extents

Extent là mức độ lưu trữ cao hơn, bao gồm nhiều data block liền kề (về mặt logical, còn về mặt physical có thể là các block rải rác trên disk). Khi 1 object cần tăng thêm kích thước, Oracle sẽ cấp phát thêm ở mức độ extent.

Segments

Segment là đơn vị lưu trữ logic bao gồm nhiều extent. Có 4 loại segment chính:

  • Data segment: là segment tạo nên table. Mỗi table được lưu hoàn toàn trong 1 segment (với partitioned table thì mỗi partition là 1 segment)
  • Index segment: là segment tạo nên index.  Mỗi index được lưu hoàn toàn trong 1 segment (với partitioned index thì mỗi partition là 1 segment)
  • Undo segment: các segment lưu trữ thông tin undo trong undo tablespace
  • Temporary segment: các segment lưu trữ thông tin tạm thời trong temporary tablespace

Tablespace

Việc lưu trữ nhìn từ trong database, ở mức độ cao nhất sẽ là các tablespace.

Tablespace là tập hợp các data files (quan hệ giữa physical và logical nhìn thấy rõ nhất là đây), mục đích tất nhiên là … để lưu trữ dữ liệu. Có 3 loại tablespace lưu trữ:

  • Data tablespace: tablespace chứa dữ liệu. Khi cài đặt thường có sẵn tablespace SYSTEM và SYSAUX, là các tablespace hệ thống chứa dữ liệu của Oracle (ta không nên lưu trữ dữ liệu khác vào đây), 1 tablespace USERS để chứa dữ liệu của user/ứng dụng. Thường ta sẽ tạo thêm các tablespace khác để quy hoạch việc lưu trữ
  • Undo tablespace: là các tablespace chứa dữ liệu undo, liên quan đến hoạt động của database, do Oracle quản lý. Chỉ có 1 undo tablespace trong database
  • Temporary tablespace: là các tablespace chứa dữ liệu tạm thời, liên quan đến hoạt động của database, cũng do Oracle quản lý. Có thể có nhiều temporary tablespace trong database

Về cách tổ chức, tablespace có thể được tổ chức theo 1 trong 2 kiểu:

  • Smallfile tablespace: tablespace gồm nhiều datafile, kích thước tối đa mỗi datafile phụ thuộc vào kích thước block (vd với block 8KB thì kích thước datafile tối đa là 32GB)
  • Bigfile tablespace: tablespace chỉ có 1 datafile duy nhất, tuy nhiên kích thước tối đa rất lớn (vd với block 8KB thì kích thước datafile tối đa là 32TB)

Chúng ta sẽ tìm hiểu chi tiết về tablespace ở trong các bài viết khác.

Tổng kết lại, ta thấy physical structure là các tập tin khác nhau, có mục đích khác nhau, lưu trữ trực tiếp trên hệ thống lưu trữ, nên phần lưu trữ này ta cần quan tâm tổ chức sắp xếp rõ ràng.

Còn ở logical structure, thường ta hay quan tâm quy hoạch việc lưu trữ ở mức độ tablespace, thỉnh thoảng cân nhắc block size cho phù hợp, và chống phân mảnh cho tablespace nếu dữ liệu quá rải rác, ảnh hưởng đến performance.

@ By tranbinh48ca

Advertisements

About tranbinh48ca - Sứ giả truyền "lửa" Oracle database

Oracle database from beginer to expert. Contact tel: 0902912888, skype: tranbinh48ca, email: tranbinh48ca@gmail.com
This entry was posted in 1.ORACLE DATABASE. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s