Giới Thiệu
Blog này đi sâu vào chi tiết tính năng Oracle® Exadata® Smart Scan, bao gồm giải thích về cách xử lý SQL khác nhau với Exadata và các ví dụ sử dụng.
Oracle thiết kế và giới thiệu Exadata vào năm 2008 như một trong những hệ thống engineered systems đầu tiên. Khác với các hệ thống cơ sở dữ liệu truyền thống, được cấu hình, cài đặt, tinh chỉnh, và quản lý bởi người dùng, một engineered system có tất cả các thành phần cần thiết như OS, cơ sở dữ liệu, bộ nhớ, và lưu trữ được cài đặt sẵn, cấu hình, tinh chỉnh, và tối ưu hóa bởi nhà cung cấp giải pháp, như Oracle.
Có nhiều thành phần của một máy Exadata. Các thành phần sau là những thành phần chính:
- Database servers: Các máy chủ cấp doanh nghiệp chạy phần mềm cơ sở dữ liệu, Automatic Storage Management (ASM), hoặc Oracle Grid Infrastructure.
- Storage servers: Các máy chủ lưu trữ, hoặc cells, chạy Exadata storage server software, quản lý các yêu cầu I/O đến từ database servers và yêu cầu dữ liệu trả về cho người dùng.
- InfiniBand network: Mạng nội bộ Exadata được xây dựng trên InfiniBand, được thiết kế chủ yếu cho môi trường điện toán hiệu suất cao.
Exadata đi kèm với phần mềm gọi là Exadata Storage Software (ESS), tăng cường hiệu suất cơ sở dữ liệu. ESS, máy chủ quản lý lưu trữ được cài đặt trên mỗi storage cell, quản lý các storage server và giao tiếp với database servers cho bất kỳ yêu cầu liên quan đến lưu trữ nào.
Các Tính Năng Chính Của ESS
Dưới đây là các tính năng chính của ESS:
- Flash cache: Flash cache là cache hiệu suất cao trên cell server lưu trữ các đối tượng được truy cập gần đây.
- Flash log: Flash log cung cấp kho lưu trữ tạm thời hiệu suất cao, độ trễ thấp, và tin cậy cho các ghi redo-log.
- EHCC: Exadata Hybrid Columnar Compression (EHCC) cho phép mức nén dữ liệu cao nhất. EHCC tổ chức dữ liệu thành các tập hợp hàng gọi là compression units. Trong một compression unit, EHCC tổ chức dữ liệu theo cột và sau đó nén dữ liệu.
- Storage indexes: Storage indexes là các cấu trúc trong bộ nhớ trên các storage server được thiết kế để giảm thời gian đọc dữ liệu từ đĩa trên các storage server.
- Cell offloading: Khác với thiết kế lưu trữ truyền thống, các storage cell Exadata được thiết kế để xử lý một số workload nội bộ để giảm gánh nặng tổng thể trên các nút compute hoặc database. Quy trình này được gọi là cell offloading.
- Smart Scan: Smart Scan cho phép hầu hết xử lý SQL xảy ra ở tầng lưu trữ thay vì tầng cơ sở dữ liệu, cải thiện đáng kể hiệu suất truy vấn. Smart Scan giảm thể tích dữ liệu gửi đến tầng cơ sở dữ liệu, từ đó giảm sử dụng CPU trên các nút database.
Xử Lý SQL
Truyền thống, xử lý SQL xảy ra chỉ trên database servers. Trong Exadata, xử lý SQL được chia và cũng diễn ra trên tầng lưu trữ.
Xử Lý SQL Truyền Thống
Các bước sau bao gồm xử lý SQL truyền thống, như hiển thị trong sơ đồ sau:

- Client gửi truy vấn.
- Hành động này kích hoạt full table scan.
- Database ánh xạ yêu cầu đến file và các extent tương ứng, chứa bảng đang được quét.
- Tương tự như full scan, database phát hành các thao tác I/O để đọc tất cả các block.
- Tất cả các block được truy vấn của bảng được đọc vào bộ nhớ.
- Quy trình tìm kiếm trong các block các hàng thỏa mãn predicate.
- Cuối cùng, các hàng được yêu cầu được trả về cho client.
Nếu là một bảng lớn, tất cả các block từ bảng đó được đọc, truyền qua mạng lưu trữ, và sao chép vào bộ nhớ. Quy trình đọc nhiều hàng không mong muốn được đọc vào bộ nhớ để hoàn thành thao tác SQL được yêu cầu. Thể tích lớn dữ liệu truyền tải tiêu thụ băng thông, ảnh hưởng thời gian phản hồi, và tạo gánh nặng không cần thiết cho tầng database.
Xử Lý SQL Máy Chủ Exadata
Với lưu trữ Exadata, xử lý SQL được xử lý hiệu quả hơn nhiều vì nó sử dụng Exadata storage software, có logic cơ sở dữ liệu được xây dựng bên trong. Các bước sau bao gồm xử lý SQL Exadata, như hiển thị trong sơ đồ sau:

- Client gửi truy vấn.
- Database server xây dựng thông điệp Intelligent Database (iDB), bao gồm tiêu chí truy vấn. Thông điệp iDB này đi đến tất cả storage servers trong một rack.
- Thành phần cellsrv của ESS quét các block dữ liệu để xác định các hàng và cột khớp thỏa mãn yêu cầu.
- Mỗi storage server thực thi tiêu chí truy vấn song song và chỉ gửi các hàng liên quan, hoặc kết quả ròng, đến database server bằng cách sử dụng interconnect.
- Database hợp nhất kết quả và trả về các hàng cho client.
Yêu Cầu Của Smart Scan
Dưới đây là các yêu cầu để sử dụng Smart Scan:
- Bạn chỉ có thể sử dụng Smart Scan cho full table scans hoặc full index scans.
- Truy vấn phải thực hiện direct-path reads.
- Bạn phải đặt tham số khởi tạo database
CELL_OFFLOAD_PROCESSINGthànhTRUE. - Bạn phải lưu các segment trong disk groups được lưu trữ hoàn toàn trên Exadata cells.
- Các ASM disk groups lưu trữ dữ liệu segment phải có các thiết lập thuộc tính sau:
–
compatible.rdbms=11.2.0.0.0(hoặc mới hơn) –compatible.asm=11.2.0.0.0(hoặc mới hơn) –cell.smart_scan_capable=TRUE
Ví Dụ Smart Scan
Thực thi các bước sau, trước với và sau đó không có Smart Scan được bật, để đo lường tác động của Smart Scan lên thống kê.
Bước 1: Kết nối với cơ sở dữ liệu
Chạy lệnh sau để kết nối với cơ sở dữ liệu của bạn bằng SQL*Plus:
[oracle@nd01db01 ~]$ sqlplus nd/nd
SQL*Plus: Release 11.2.0.3.0 Production...
Bước 2: Xác minh thống kê
Chạy truy vấn sau để xác minh thống kê ở mức hoặc gần bằng không:
SQL> select a.name, b.value/1024/1024 MB from v$sysstat a, v$mystat b where a.statistic# = b.statistic# and (a.name in ('physical read total bytes', 'physical write total bytes', 'cell IO uncompressed bytes') or a.name like 'cell phy%');
NAME MB
--------------------------------------------------------------- ---
physical read total bytes 0
physical write total bytes 0
cell physical IO interconnect bytes 0
cell physical IO bytes saved during optimized file creation 0
cell physical IO bytes saved during optimized RMAN file restore 0
cell physical IO bytes eligible for predicate offload 0
cell physical IO bytes saved by storage index 0
cell physical IO bytes sent directly to DB node to balance CPU 0
cell physical IO interconnect bytes returned by smart scan 0
cell IO uncompressed bytes 0
10 rows selected.
Bước 3: Thực thi truy vấn select với Smart Scan bị tắt
Chạy truy vấn select sau với optimizer hint tắt Smart Scan:
SQL> select /*+ OPT_PARAM('cell_offload_processing' 'false') */ count(*) from sales where time_id between '01-JUN-2017' and '30-OCT-2017' and amount_sold = 1;
COUNT(*)
----------
134055
Bước 4: Xác minh thống kê lại
Chạy lệnh sau để xác minh thống kê lại. Lưu ý rằng tất cả dữ liệu được xử lý bởi truy vấn ở bước 3 (physical read total bytes) được trả về cho database server qua mạng lưu trữ (cell physical IO interconnect bytes).
SQL> select a.name, b.value/1024/1024 MB from v$sysstat a, v$mystat b where a.statistic# = b.statistic# and (a.name in ('physical read total bytes', 'physical write total bytes', 'cell IO uncompressed bytes') or a.name like 'cell phy%');
NAME MB
--------------------------------------------------------------- -----------
physical read total bytes 759.429688
physical write total bytes 0
cell physical IO interconnect bytes 759.429688
cell physical IO bytes saved during optimized file creation 0
cell physical IO bytes saved during optimized RMAN file restore 0
cell physical IO bytes eligible for predicate offload 0
cell physical IO bytes saved by storage index 0
cell physical IO bytes sent directly to DB node to balance CPU 0
cell physical IO interconnect bytes returned by smart scan 0
cell IO uncompressed bytes 0
10 rows selected.
Bước 5: Reset thống kê
Chạy lệnh sau để kết nối lại phiên với cơ sở dữ liệu để reset thống kê cấp phiên:
[oracle@nd01db01 ~]$ sqlplus nd/nd
SQL*Plus: Release 11.2.0.3.0 Production...
Bước 6: Xác minh thống kê lại
Chạy truy vấn sau để xác minh thống kê ở mức hoặc gần bằng không:
SQL> select a.name, b.value/1024/1024 MB from v$sysstat a, v$mystat b where a.statistic# = b.statistic# and (a.name in ('physical read total bytes', 'physical write total bytes', 'cell IO uncompressed bytes') or a.name like 'cell phy%');
NAME MB
--------------------------------------------------------------- ---
physical read total bytes 0
physical write total bytes 0
cell physical IO interconnect bytes 0
cell physical IO bytes saved during optimized file creation 0
cell physical IO bytes saved during optimized RMAN file restore 0
cell physical IO bytes eligible for predicate offload 0
cell physical IO bytes saved by storage index 0
cell physical IO bytes sent directly to DB node to balance CPU 0
cell physical IO interconnect bytes returned by smart scan 0
cell IO uncompressed bytes 0
10 rows selected.
Bước 7: Thực thi truy vấn select không tắt Smart Scan
Chạy truy vấn select sau không có optimizer hint tắt Smart Scan:
SQL> select count(*) from sales where time_id between '01-JUN-2017' and '30-OCT-2017'and amount_sold = 1;
COUNT(*)
-------
134055
Bước 8: Xác minh thống kê
Chạy truy vấn sau để xác minh thống kê. Lưu ý rằng truy vấn vẫn thực hiện khoảng 759 MB I/O (physical read total bytes) như ở bước 4. Tuy nhiên, lần này chỉ 1.7 MB được trả về cho DB server (cell physical IO interconnect bytes). Đây là kết quả của Smart Scan đang hoạt động. Trong trường hợp này, Smart Scan đang tác động trên I/O liên quan đến truy vấn này vì cell physical IO bytes eligible for predicate offload bằng physical read total bytes, và cell physical IO interconnect bytes returned by smart scan bằng cell physical IO interconnect bytes.
SQL> select a.name, b.value/1024/1024 mb from v$sysstat a, v$mystat b where a.statistic# = b.statistic# and (a.name in ('physical read total bytes', 'physical write total bytes','cell IO uncompressed bytes') or a.name like 'cell phy%');
NAME MB
---------------------------------------------------------------- ---------
physical read total bytes 759.429688
physical write total bytes 0
cell physical IO interconnect bytes 1.71562805
cell physical IO bytes saved during optimized file creation 0
cell physical IO bytes saved during optimized RMAN file restore 0
cell physical IO bytes eligible for predicate offload 759.429688
cell physical IO bytes saved by storage index 0
cell physical IO bytes sent directly to DB node to balance CPU 0
cell physical IO interconnect bytes returned by smart scan 1.71562805
cell IO uncompressed bytes 759.429688
10 rows selected.
Kết Luận
Tính năng Smart Scan trong Exadata cho phép xử lý SQL xảy ra ở tầng lưu trữ, thay vì tầng cơ sở dữ liệu, để cải thiện hiệu suất truy vấn. Smart Scan giảm thể tích dữ liệu gửi đến tầng cơ sở dữ liệu từ đó giảm sử dụng CPU trên các nút database.
Sử dụng tab Phản hồi để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào.
Tìm hiểu thêm về các dịch vụ cơ sở dữ liệu và dịch vụ ứng dụng Rackspace của chúng tôi.