Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

เพิ่มประสิทธิภาพ Disk I/O ของ Oracle 11g: คู่มือ Calibration 實際

บทนำ

ทุกครั้งที่ 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 ต้องมี SYSDBA Privilege
  • 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:

  1. Issue Random Database-block-sized Reads (Default 8 KB) ไปทุก Data Files จากทุก Instances → Output max_iops (Max IOPS ที่ Database รองรับได้) สำคัญสำหรับ OLTP Databases Output actual_latency = Average Latency สำหรับ Workload นี้ Input max_latency = Max Tolerable Latency (ms) สำหรับ Database-block-sized I/O
  2. 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:

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

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_disks Optional ระบุ = 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 ให้เหมาะสม