บทนำ
ทุกครั้งที่ Oracle Database Read/Write ข้อมูล Disk จะสร้าง Disk I/O Operations หลาย Application จำกัด Performance โดย Disk I/O Application ที่ใช้ CPU Time ส่วนใหญ่รอ I/O เรียกว่า I/O Bound I/O Calibration ช่วยแก้ปัญหานี้
ความสำคัญของ I/O Subsystem
สร้าง I/O Subsystem ที่แข็งแกร่งเป็นสิ่งจำเป็นสำหรับ Infrastructure หาก Component ใดใน I/O Stack มี Throughput จำกัด จะกลายเป็น Weakest Link การ Validate I/O Subsystem ด้วย Real-world Workloads ยากเสมอ
I/O Calibration Feature ของ Oracle Database ช่วย:
- ประเมิน Performance ของ Storage Subsystem
- กำหนดว่า I/O Performance Problems มาจาก Database หรือ Storage Subsystem
ต่างจาก External Tools ที่ Issue I/O แบบ Sequential Oracle I/O Calibration Issue I/O แบบ Random ใช้ Oracle Data Files เข้าถึง Storage Media ผลลัพธ์ใกล้เคียง Actual Database Performance มากกว่า
Calibrate I/O 基于 PL/SQL Function: DBMS_RESOURCE_MANAGER.CALIBRATE_IO() สร้าง Workloads:
- I/O Intensive, Read-only, Random I/O (db_block_size)
- Large-block (1 MB) Sequential I/O Workloads
ผลลัพธ์ควรเปรียบเทียบกับ Expected Throughput Rate (Max Overall Throughput ของ I/O Subsystem)
Prerequisites สำหรับ I/O Calibration
- User ต้องมี
SYSDBAPrivilege TIMED_STATISTICS=TRUE- Asynchronous I/O ต้อง Enabled
File Systems: Enable Async I/O ด้วย FILESYSTEMIO_OPTIONS = SETALL
Sync I/O: Process Block จน Operation เสร็จ Async I/O: Calling Process ทำงานต่อไม่ Block Requests อื่น
ตรวจสอบ Async I/O สำหรับ Data Files:
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';
หมายเหตุ: รัน Calibration ได้เพียงครั้งเดียวต่อ Database Instance ในเวลาเดียวกัน
การรัน I/O Calibration
ใช้ Procedure DBMS_RESOURCE_MANAGER.CALIBRATE_IO Issue I/O Intensive Read-only Workload (1 MB Random I/O) ไป Database Files หา Max IOPS และ MBPS ที่ Storage Subsystem รองรับได้
ขั้นตอน Calibration:
- Issue Random Database-block-sized Reads (Default 8 KB) ไปทุก Data Files จากทุก Instances → Output
max_iops(Max IOPS ที่ Database รองรับได้) สำคัญสำหรับ OLTP Databases Outputactual_latency= Average Latency สำหรับ Workload นี้ Inputmax_latency= Max Tolerable Latency (ms) สำหรับ Database-block-sized I/O - Issue Random 1 MB Reads ไปทุก Data Files จากทุก Instances → Output
max_mbps(Max MBPS ที่ Database รองรับได้) สำคัญสำหรับ Data Warehouses
Calibration เร็วและแม่นยำขึ้นหากระบุ num_physical_disks (จำนวน Physical Disks ประมาณการ)
ควรรันเมื่อ Database Idle หรือ Off-peak Hours เพื่อลด Impact ต่อ Normal Workload
ตัวอย่าง Output จาก CALIBRATE_IO:
| Columns | Value |
|---|---|
| START_TIME | 31-AUG-17 04.40.09.920679 AM |
| END_TIME | 31-AUG-17 04.47.41.210939 AM |
| MAX_IOPS | 39 |
| MAX_MBPS | 60 |
| MAX_PMBPS | 69 |
| LATENCY | 24 |
| NUM_PHYSICAL_DISKS | 1 |
Calibration Considerations
- รัน Calibration ครั้งเดียวต่อครั้งบน Databases ที่ใช้ Storage Subsystem เดียวกัน (รันพร้อมกัน = Fail)
- Quiesce Database เพื่อลด I/O บน Instance
- Oracle RAC: ต้อง Open ทุก Instances เพื่อ Calibrate ทุก Nodes
- RAC Database: Workload Generate จากทุก Instances พร้อมกัน
num_physical_disksOptional ระบุ = Calibration เร็วและแม่นยำกว่า
ระหว่าง Calibration สามารถ Query Status ใน V$IO_CALIBRATION_STATUS หลังเสร็จ ดูผลใน DBA_RSRC_IO_CALIBRATE
สรุป
I/O Resource Management (IORM) และ Calibrate I/O มีค่าสำหรับเข้าใจขีดจำกัด I/O Architecture หลัง Calibration ใช้ข้อมูลทำ I/O Design และ Sizing ให้เหมาะสม