Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Cơ Sở Dữ Liệu

Tối Ưu Hóa Disk I/O Oracle 11g: Hướng Dẫn Calibration Thực Tế

Giới thiệu

Mỗi khi Oracle Database đọc hoặc ghi dữ liệu vào disk, database tạo ra các hoạt động disk input/output (I/O). Hiệu suất của nhiều ứng dụng phần mềm bị giới hạn bởi disk I/O, và các ứng dụng dành phần lớn thời gian CPU chờ đợi hoạt động I/O hoàn tất bị I/O bound. Calibration I/O giúp giải quyết vấn đề này.

Giới thiệu

Thiết lập một I/O subsystem vững chắc là một phần thiết yếu của việc xây dựng hạ tầng cho một ứng dụng. Nếu bất kỳ thành phần nào trong I/O stack có throughput giới hạn, nó trở thành "điểm yếu nhất" (weakest link) trong luồng I/O. Vì workload thực tế không thể dễ dàng tái hiện, validation (xác thực) của I/O subsystem luôn là một nhiệm vụ đầy thách thức.

Tính năng I/O calibration của Oracle Database cho phép bạn đánh giá hiệu suất của storage subsystem và xác định xem vấn đề hiệu suất I/O do database hay do storage subsystem gây ra. Khác với các công cụ I/O calibration bên ngoài khác phát hành các hoạt động I/O tuần tự (sequentially), tính năng I/O calibration của Oracle Database phát hành các hoạt động I/O ngẫu nhiên (randomly) bằng cách sử dụng Oracle data files để truy cập storage media. Điều này tạo ra kết quả phù hợp hơn với hiệu suất thực tế của database.

Tính năng Calibrate I/O dựa trên hàm PL/SQL gọi là DBMS_RESOURCE_MANAGER.CALIBRATE_IO(). Khi Calibrate I/O được gọi, nó tạo workload với các đặc điểm sau:

  • I/O intensive, read-only, random I/O (db_block_size)
  • Large-block (1 MB) sequential I/O workloads

Kết quả từ Calibrate I/O nên được giám sát và so sánh với expected throughput rate (tỷ lệ throughput tối đa tổng thể của I/O subsystem). I/O calibration có thể được dùng để đánh giá hiệu suất storage subsystem và xác định xem vấn đề hiệu suất I/O xuất phát từ database host hay storage subsystem.

Blog này bao gồm các chủ đề sau:

  • Điều kiện tiên quyết cho I/O calibration
  • Chạy I/O calibration
  • Các cân nhắc về Calibration

Điều kiện tiên quyết cho I/O calibration

Trước khi chạy I/O calibration, đảm bảo các yêu cầu sau được đáp ứng:

  • User phải được cấp đặc quyền SYSDBA.
  • TIMED_STATISTICS phải được đặt thành TRUE.
  • Asynchronous I/O phải được bật.

Khi dùng file systems, asynchronous I/O có thể được bật bằng cách đặt tham số khởi tạo FILESYSTEMIO_OPTIONS thành SETALL.

Với synchronous I/O, khi một I/O request được submit đến hệ điều hành, quá trình ghi bị block cho đến khi hoạt động hoàn tất. Với asynchronous I/O, quá trình gọi tiếp tục công việc của nó mà không block các request khác vẫn đang thực thi.

Đảm bảo asynchronous I/O được bật cho data files bằng cách chạy truy vấn SQL sau:

COL NAME FORMAT A50
SELECT NAME, ASYNCH_IO FROM V$DATAFILE F, V$IOSTAT_FILE I
WHERE F.FILE#=I.FILE_NO AND FILETYPE_NAME='Data File';

Hình ảnh minh họa kết quả truy vấn

Lưu ý: Chỉ một calibration có thể được thực hiện trên một database instance tại một thời điểm.

Chạy I/O calibration

Tính năng I/O calibration của Oracle Database được truy cập bằng thủ tục DBMS_RESOURCE_MANAGER.CALIBRATE_IO. Thủ tục này phát hành một workload read-only I/O intensive (được tạo thành từ 1 MB random I/O operations) đến database files để xác định maximum IOPS (I/O requests per second) và MBPS (megabytes of I/O per second) có thể được duy trì bởi storage subsystem.

I/O calibration với thủ tục DBMS_RESOURCE_MANAGER.CALIBRATE_IO bao gồm các bước sau:

  1. Thủ tục phát hành random database-block-sized reads (mặc định 8 KB) đến tất cả data files từ tất cả database instances. Bước này cung cấp maximum I/O operations per second (IOPS) trong tham số đầu ra (max_iops) mà database có thể duy trì. Giá trị max_iops là metric quan trọng cho database online transaction processing (OLTP). Tham số đầu ra actual_latency cung cấp latency trung bình cho workload này. Bạn có thể chỉ định target latency cụ thể bạn cần với tham số đầu vào max_latency, chỉ định maximum tolerable latency (độ trễ chịu đựng tối đa) tính bằng milliseconds cho database-block-sized I/O requests.
  2. Thủ tục phát hành random 1 MB reads đến tất cả data files từ tất cả database instances. Bước này cho ra tham số đầu ra max_mbps, chỉ định maximum megabytes per second (MBPS) của I/O mà database có thể duy trì. Đây là metric quan trọng cho data warehouse.

Calibration chạy hiệu quả hơn nếu user cung cấp tham số đầu vào num_physical_disks, chỉ định số lượng vật lý disks xấp xỉ trong hệ thống lưu trữ database.

Do overhead từ việc chạy I/O workload, I/O calibration chỉ nên được thực hiện khi database đang idle (nhàn rỗi), hoặc trong off-peak hours (giờ thấp điểm), để giảm thiểu tác động của workload I/O calibration lên workload database bình thường.

Hình ảnh minh họa output từ thủ tục DBMS_RESOURCE_MANAGER.CALIBRATE_IO

Các cân nhắc về Calibration

Trước khi chạy I/O calibration, hãy suy nghĩ về các cân nhắc sau:

  • Chỉ chạy một calibration tại một thời điểm trên các database dùng cùng storage subsystem. Nếu bạn chạy calibration đồng thời trên các database riêng biệt dùng cùng storage subsystem, calibration sẽ thất bại.
  • Quiesce (làm yên tĩnh) database để giảm thiểu I/O trên instance.
  • Đối với cấu hình Oracle Real Application Clusters (RAC), đảm bảo tất cả instances đều mở (open) để calibrate storage subsystem trên các node.
  • Đối với Oracle RAC database, workload được tạo đồng thời từ tất cả instances.
  • Tham số đầu vào num_physical_disks là tùy chọn. Bằng cách đặt tham số này thành số lượng physical disks xấp xỉ trong hệ thống lưu trữ của database, calibration vừa nhanh hơn vừa chính xác hơn.

Bất kỳ lúc nào trong quá trình I/O calibration, bạn có thể truy vấn trạng thái calibration trong view V$IO_CALIBRATION_STATUS. Sau khi I/O calibration hoàn thành thành công, xem kết quả trong bảng DBA_RSRC_IO_CALIBRATE, tương tự ví dụ sau:

ColumnsValue
START_TIME31-AUG-17 04.40.09.920679 AM
END_TIME31-AUG-17 04.47.41.210939 AM
MAX_IOPS39
MAX_MBPS60
MAX_PMBPS69
LATENCY24
NUM_PHYSICAL_DISKS1

Kết luận

Tính năng I/O Resource Management (IORM) và Calibrate I/O có giá trị để hiểu giới hạn của kiến trúc I/O hiện tại. Sau khi calibration hoàn tất, thông tin có thể được dùng để thực hiện thiết kế và sizing I/O phù hợp. Sử dụng tab Feedback để đưa ra nhận xét hoặc đặt câu hỏi.