- Liệt kê các thành phần quan trọng trong Oracle Database.
- Mô tả thành phần memory (memory structure).
- Mô tả các tiến trình background processes.
- Cấu trúc lưu trữ logic và vật lý.
- Mô tả tổng quan các thành phần ASM.
1. Oracle database gồm 3 thành phần chính
- Memory structure
- Process structure
- Storage structure
Kiến trúc tổng quan Oracle Database |
Mô hình quan hệ giữa Instance - Database |
- 1 instance kết nối đến 1 và chỉ 1 database duy nhất.
- Trên 1 server có thể có nhiều database, mỗi database có 1 instance riêng (như mô hình Nonclustered System ở hình trên).
- 1 database có thể có nhiều instance (mô hình Real Applications Cluster (RAC) như hình trên).
Mô hình kết nối user đến database instance |
- User process:"When a user runs an application program (such as a Pro*C program) or an Oracle tool (such as Oracle Enterprise Manager or SQL*Plus), Oracle Database creates a user process to run the user's application"
- Server process: Oracle database tạo ra server process để xử lý những request của user process khi kết nối đến instance. Nếu user process và server process là cùng 1 máy, thì có thể gọp chung thành 1 process để giảm tải cho server. Nếu user process đến từ 1 máy khác server, thì Oracle database sẽ luôn luôn tạo ra 1 server process để phục vụ cho 1 user process khi kết nối đến.
- Connection: là kết nối thực sự từ user process đến instance (thông qua giao thức tcp/ip).
- Session: là trạng thái hiện tại của user khi kết nối vào server, do server tạo ra (có thể là process hoặc thread), dựa trên connection kết nối tới. 1 session kéo dài từ lúc user đăng nhập đến khi log out khỏi hệ thống hoặc thời gian của session tồn tại đạt đến giá trị expire (hết hạn).
- 1 user oracle có thể tạo ra nhiều session kết nối đến database từ nhiều máy khác nhau.
Mô hình memory structure |
Mô hình memory structure |
- Chứa dữ liệu (data) và thông tin điều khiển (control information) của 1 instance.
- 1 SGA + n Processes = 1 Instance. Mỗi instance có phần SGA riêng.
- Chứa dữ liệu và thông tin điều khiển cho từng server process hoặc background process - không chia sẻ giữa các server process hay background process với nhau.
- 1 server process sẽ phục vụ cho những request từ 1 client. Khi start 1 server process sẽ cấp phát vùng nhớ PGA cho riêng server process đó.
Gồm các thành phần chính như shared pool, data buffer cache, redo log buffer, large pool...
1.1. Shared pool:
Là một thành phần quan trọng trong SGA, bao gồm những thành phần chính như Library Cache, Dictionary Cache, Result Cache.
Mô hình shared pool |
1.1.1. Library cache
Bao gồm các thành phần như: private SQL areas, shared SQL areas, PL/SQL procedures và packages...
Thành phần private SQL areas và shared SQL areas:
- Oracle ghi nhận việc thực hiện 1 câu lệnh SQL ở 2 thành phần: Shared SQL areas và private SQL areas (nằm trong vùng PGA - đến đây có thể đặt ra câu hỏi: shared pool thuộc SGA, library cache thuộc shared pool, trong library cache bao gồm shared và private SQL areas, vậy tại sao private SQL areas lại nằm trong PGA ? Câu trả lời được oracle giải thích tại đây, mình trích dẫn "The location of a private SQL area depends on the type of connection established for a session. If a session is connected through a dedicated server, private SQL areas are located in the server process's PGA. However, if a session is connected through a shared server, part of the private SQL area is kept in the SGA.").
- Khi 1 user thực hiện 1 câu lệnh Oracle sẽ cấp phát vùng nhớ từ vùng shared pool. Nếu vùng shared pool đầy và không tìm thấy những vùng nhớ còn trống. Thì lúc này, oracle sẽ sử dụng thuộc toán LRU để loại bỏ những thành phần ít được dùng nhất trong shared pool. Quá trình thực hiện 1 câu lệnh được lưu trữ trong cả private và shared SQL areas. Lưu vào vùng priavate SQL areas là đương nhiên rồi. Còn lưu vào shared SQL areas là để khi 2 users cùng thực hiện 1 câu lệnh, Oracle sẽ không chạy lại quá trình thực hiện câu lệnh đó nữa, mà vào thẳng vùng shared SQL areas để lấy luôn, giúp tiếc kiệm time & resource hệ thống.
- Đối với PL/SQL procedures hay packages: Quá trình quản lý, cấp phát vùng nhớ cũng tương tự như khi thực hiện 1 câu lệnh statement.
Một tính năng mới trong Oracle 11g. Result cache giúp lưu lại kết quả thực hiện của câu lệnh hoặc procedures/packages, nhằm tăng tốc độ cho câu truy vấn.
1.1.3. Data dictionary
Một trong những thành phần quan trọng nhất trong Oracle database. Được sở hữu bởi user SYS trong hệ thống. Data dictionary bao gồm:
- Định nghĩa tất cả các đối tượng scheme trong database như: views, tables, indexes, clusters, sequences, procedures, triggers, packages v.v...
- Thông tin bộ nhớ chiếm dụng, đang sử dụng của các đối tượng shema.
- Default value trong các cột.
- Thông tin các ràng buộc (constraints).
- Tên các users trong database.
- Phân quyền và vai trò của các users trong database.
- Thông tin về auditing như ai truy cập hay cập nhật các đối tượng schema.
- Basic tables: lưu trữ các thông tin liên quan về database. Những thông tin này được mã hóa và chỉ có Oracle mới được quyền thao tác dữ liệu trên đây.
- User-Accessible views: những views chưa các thông tin từ basic table, nhưng được giải mã ra và đưa ra những thông tin cần thiết cho người dùng như các thông tin về table hay user trong hệ thống.
User bình thường, sử dụng các thông tin trong data dictionary thông qua các views. Một số prefix views chính trong data dictionary:
- USER: chứa các thông tin về user. Ví dụ:
# SELECT object_name, object_type FROM USER_OBJECTS;
- ALL: các thông tin khác mà user có thể truy xuất. Ví dụ:
# SELECT owner, object_name, object_type FROM ALL_OBJECTS;
- DBA: view dành cho quản trị database. Đối với prefix là DBA, muốn truy xuất cần chỉ định owners, ở đây chính là SYS. Ví dụ:
# SELECT owner, object_name, object_type FROM SYS.DBA_OBJECTS;
1.2. Data buffer cache
Cũng là 1 thành phần trong SGA như shared pool. Data buffer cache lưu trữ dữ liệu lấy từ datafile dưới database lên. Những dữ liệu này được lưu theo dạng block. Khái niệm buffer có thể được hiểu là 1 vùng trống trong data buffer cache có thể chứa hoặc không chứa dữ liệu.
Mô hình data buffer cache |
- Tổ chức thành 2 list: write list và the least recently used (LRU) list.
- Write list: chứa những dirty buffers, tức là bao gồm những dữ liệu đã bị thay đổi (modified) nhưng chưa được lưu xuống database.
- LRU list chứa free buffers (những vùng còn trống có thể lưu dữ liệu được), pinned buffers (những dữ liệu đang được truy xuất) và những dirty buffers chưa được đưa xuống write list.
- Khi có 1 process nào đó truy cập vào 1 buffer, buffer đó sẽ được đưa vào cuối LRU list. Mục đích là khi dọn dẹp data buffer cache theo thuật toán LRU, những buffer nằm ở top trên cùng của LRU list (tức là ít dùng đến nhất) sẽ bị bỏ đi.
- Khi user process yêu cầu dữ liệu, đầu tiên hệ thống sẽ tìm kiếm trong data buffer cache, nếu tìm thấy (gọi là cache hit) sẽ gửi dữ liệu về cho user, nếu không tìm thấy (cache miss), hệ thống phải xuống dưới database, lấy dữ liệu từ datafile để đổ vào data buffer cache. Và tất nhiên là truy xuất dữ liệu từ cache hit nhanh hơn cache miss nhiều.
- Trong trường hợp cache miss, trước khi đổ data block vào cache, process cần tìm ra free buffer trong cache. Quá trình tìm kiếm bắt đầu từ phía dưới LRU list tìm lên. Tìm kiếm kết thúc khi tìm thấy free buffer hoặc đạt tới ngưỡng tìm kiếm (không thể tìm thêm được nữa).
- Nếu process tìm được dirty buffer trong LRU list, dirty buffer này sẽ được chuyển xuống write list, process tiếp tục tìm kiếm. Nếu process tìm được free buffer, thì data block sẽ được đưa vào đây, và buffer này được chuyển xuống cuối của LRU list.
- Nếu process đạt tới ngưỡng tìm kiếm mà vẫn chưa tìm ra được free buffer. Thì lúc này, process sẽ ra hiệu cho DBW0 background process, là tiến trình giúp đưa những dirty buffer xuống đĩa cứng.
- Chú ý: Nếu thực hiện full scan bảng, thì dữ liệu đọc từ datafile lên cache sẽ được đổ lên đầu (thay vì cuối) LRU list. Lý do là thèn Oracle nói rằng, full scan bảng là không nên, và nếu có dùng thì cũng chỉ trong 1 khoảng thời gian ngắn thôi. Nên dữ liệu của nó nên để lên đầu LRU list để được dọn dẹp sớm nhất có thể.
- Là một dạng circular buffer (hình dung nó là dạng vòng tròn, lưu trữ xoay vòng), lưu trữ tất cả những thông tin về việc tác động tới database. Những thông tin này lưu trữ trong redo entries.
Mô hình lưu trữ của redo log buffer |
INSERT
, UPDATE
, DELETE
, CREATE
, ALTER
, hay DROP.
Mục đích nhằm phục hồi dữ liệu sau này (nếu cần).1.4. Large pool
Theo mình tự hiểu thì cái này do dba cấu hình memory cấp phát cho large pool. Mục đích dùng để chia sẽ memory cho phần shared pool khi thực hiện chạy các câu query yêu cầu memory lớn, hay dùng trong backup hệ thống. Tóm lại, như là một dạng memory dự trữ cho các phần khác khi cần.
2. PGA
Là vùng nhớ được cấp phát cho mỗi server process hoặc background process. PGA dùng để thực hiện những câu truy vấn, hoặc lưu trữ session. Tập hợp các PGAs gọi là 1 instance PGA. Kích thước của PGA instance này, thèn DBA có thể cấu hình để dễ quản lý. Cấu trúc PGA gồm 2 phần chính: Stack space và User Global Area (UGA).
Mô hình PGA |
- Stack space: chứa các thông tin lưu trữ của session.
- UGA: với loại dedicated server, mỗi user connect vào database sẽ tạo ra 1 server process. Với loại này, PGA sẽ cấp phát 1 vùng nhớ gọi là UGA. Với loại shared server, nhiều client users chia sẻ chung server process. Trong loại này, UGA sẽ được chuyển vào trong SGA, lúc này vùng PGA chỉ còn stack space.
Thành phần thứ 2 cần tìm hiểu sau memory structure là process trong Oracle database.
Cấu trúc process |
Process trong oracle chia làm 2 thành phần chính:
- User process.
- Oracle database process bao gồm server process và background process.
Mô hình instance, trong đó có mối liên hệ user processes và Oracle processes |
Khi người dùng sử dụng ứng dụng để kết nối đến Oracle database thì lúc này sẽ tạo ra 1 user process.
2. Server processes
- Sinh ra là để phục vụ các request từ user process:
- Parse và thực hiện các câu truy vấn SQL nhận được từ ứng dụng.
- Đọc các blocks dữ liệu từ ổ đĩa vào data buffer cache nếu như không tìm thấy dữ liệu cần tìm kiếm trên data buffer cache.
- Trả kết quả về cho ứng dụng thực hiện truy vấn tương ứng.
3. Background processes
Thành phần giúp Oracle database quản lý bộ nhớ, đồng bộ dữ liệu xuống ổ cứng v.v..
Mô hình tổng quan hoạt động các process trong Oracle database |
3.1. Database Writer Process (DBWn)
- Tiến trình thực hiện việc ghi những dirty buffers trong data buffer cache xuống ổ đĩa. Có thể cấu hình số lượng DBWn (DBW0, DBW1, DBW2 ...) để tăng performance hệ thống thông qua tham số DB_WRITER_PROCESSES (tối đa 20 processes).
- Khi 1 buffer trong data buffer cache bị chỉnh sửa (modified), nó được đánh dấu là dirty buffer. Cold buffer là khái niệm chỉ những buffer ít được dùng tới trong LRU list. DBWn sẽ ghi những dirty và cold buffer xuống đĩa cứng, nhờ đó user process có thể tìm thấy những clean và cold buffer để lưu những blocks dữ liệu mới vào trong data buffer cache. Nhờ có DBWn mà user processes luôn tìm được những buffer trống để lưu blocks dữ liệu mới.
3.2. Log Writer Process (LGWR)
- Thực hiện ghi tất cả các redo entries trong redo log buffer xuống redo log file (kể từ lần ghi gần nhất).
- Do redo log buffer là dạng circular buffer, cho nên, những redo entries nào đã được ghi xuống redo log file có thể được ghi đè lên bởi server process. Tốc độ LGWR đủ nhanh để đam bảo server process luôn ghi được vào redo entries.
- LGWR thực hiện việc ghi redo log buffer xuống redo log file trong các trường hợp:
- Khi 1 user process commit 1 transaction.
- Khi redo log buffer đầy 1/3.
- Trước khi 1 DBWn thực hiện ghi buffer xuống ổ đĩa.
- 3 giây thì ghi 1 lần.
- Trong trường hợp hệ thống cao tải, LGWR có thể ghi xuống redo log bằng hình thức group commits. Cụ thể, khi user commit 1 transaction, LGWR phải ghi redo entries của transaction đó xuống redo log file, trong thời gian đó, có thể có 1 user khác thực hiện commit 1 transaction khác. Bình thường, tại 1 thời điểm, LGWR chỉ có thể ghi xuống redo entries của 1 transaction. Muốn ghi redo entries của transaction kế tiếp phải chờ việc ghi redo entries transaction này kết thúc. Tuy nhiên, nếu số lượng commit tăng cao, thì tại 1 thời điểm, LGWR có thể ghi xuống nhiều redo entries của nhiều transactions.
3.3. Check point process (CKPT)
- 1 checkpoint là một cấu trúc dữ liệu dùng để định nghĩa chỉ số SCN dùng trong quá trình recovery của database. Checkpoint được lưu trong control file và header của data file.
- Khi xảy ra 1 check point, CKPT có nhiệm vụ cập nhật tất cả header của các data files.
3.4. Archiver Processes (ARCn)
- Khi 1 log switch xảy ra, ARCn tiến hành sao chép redo log file đến thiết bị lưu trữ (tạm gọi là quá trình archiving).
- ARCn chỉ chạy khi database bật chế độ ARCHIVELOG mode và thiết lập chế độ tự động thực hiện archiving.
IV - Database Storage Architecture
1. Các thành phần trong database storage
- Control files: chứa dữ liệu của database. Files này cực kỳ quan trọng đối với database. Không có control file, không thể truy xuất vào dữ liệu trong data files.
- Data files: chứa dữ liệu của user và của ứng dụng, cũng như dữ liệu metadata và data dictionary.
- Online redo log files: lưu trữ thông tin giúp việc recovery database. Cụ thể, nếu database bị crashes và không mất data files, thì instance có thể được recovery từ những thông tin lưu trữ trong files này.
- Parameter file: file cấu hình instance.
- Password file: cho phép user sử dụng quyền sysdba, sysoper và sysasm kết nối từ xa (remote) vào instance để thực hiện công việc quản trị hệ thống.
- Backup files: dùng cho recovery database.
- Archied redo log files: chứa tất cả dữ liệu mang tính lịch sử về những thay đổi đối với database. Từ files này cộng thêm một bản backup của database, chúng ta có thể lấy lại những dữ liệu bị mất của database.
- Trace files: Mỗi server và background process đều ghi nhận quá trình hoạt động vào trong trace files tương ứng, để khi lỗi phát sinh, sẽ được lưu trữ vào trace files.
- Alert log file: Là một dạng đặc biệt của trace file. Tóm lại là, khi databse bị lỗi, việc đầu tiên là chui vào đây xem có đứa nào (process) méc lại cho mình biết vì sao lỗi hay không.
Mối quan hệ giữa Logical và Physical Storage |
- 1 extent gồm nhiều Oracle data block.
- 1 segment gồm nhiều extent.
- 1 tablespace gồm nhiều segment và có thể được lưu trữ trên nhiều data file.
V. Giới thiệu tổng quan về ASM (Automatic Storage Management)
ASM là một tính năng của Oracle, giúp cho việc quản lý, lưu trữ thông tin xuống disks dễ dàng. ASM và file system hoàn toàn có thể chạy song song với nhau. Khi ta tạo một database, có thể chỉ định hoặc trên ASM hoặc trên file system đều được.
1. Các thành phần trong ASM
Các thành phần trong ASM |
- 1 ASM disk group gồm nhiều ASM disk.
- 1 ASM disk gồm nhiều ASM allocation unit (AU), đơn vị nhỏ nhất mà ASM dùng để lưu trữ. Kích thước của AU có thể được cấu hình khi tạo ASM disk group.
- 1 ASM extent gồm nhiều ASM AU.
- 1 ASM file gồm nhiều ASM extent.
2. Tóm tắt lại luồng hoạt động tổng quan Oracle database
- Start instance.
- Người dùng mở ứng dụng để kết nối đến Oracle database (tạo ra user process).
- Listener trên server có nhiệm vụ tạo cầu nối để user process kết nối được với server thông qua server process.
- Người dùng thực hiện các câu lệnh SQL, sau đó commit transactions.
- Server process tiếp nhận các câu lệnh từ user process, tiếp theo kiểm tra xem trong vùng shared SQL area đã có câu lệnh này chưa, nếu có sẽ kiểm tra quyền truy xuất dữ liệu của user truy xuất và thực hiện truy xuất dữ liệu. Nếu chưa có, cấp phát 1 shared SQL area để câu lệnh có chỗ được parse và thực hiện.
- Server process sẽ lấy dữ liệu từ data buffer cache hoặc từ data file nếu không tìm thấy trong data buffer cache.
- Khi user commit transaction, tiến trình Log Writer (LGWR) ngay lập tức ghi dòng dữ liệu lưu trữ thông tin transaction đó trong redo entries xuống redo log file. Khi server process thay đổi (modified) dữ liệu trong data buffer cache thì tiến trình Database Writer (DBWn) sẽ ghi dirty buffers xuống data file trong trường hợp cần thiết.
- Transaction thực hiện thành công hay không, server process đều sẽ thông báo về ứng dụng truy cập vào database.
- Trong suốt luồng thực hiện này, những background process sẽ chạy để tiến hành hỗ trợ quá trình hoạt động của hệ thống.
Link tham khảo:
- http://docs.oracle.com/cd/B28359_01/server.111/b28318/process.htm
- http://docs.oracle.com/cd/B28359_01/server.111/b28318/memory.htm
- http://docs.oracle.com/cd/E11882_01/server.112/e40540/logical.htm
bài viết hay
Trả lờiXóa