1. Mục đích
Khung nhìn V$ASM_DISK_IOSTAT_SPARSE theo dõi thống kê I/O cho đĩa mỏng (Thin-Provisioned Disks) trong Oracle ASM. Nó cung cấp chỉ số chi tiết về độ trễ đọc/ghi, số lượng thao tác và lưu lượng, giúp chẩn đoán điểm nghẽn hiệu năng ở tầng lưu trữ.
2. Tình huống ứng dụng
- Phân tích nguyên nhân chậm trễ I/O từ hệ thống lưu trữ
- Nhận diện đĩa tải cao để tối ưu phân bố dữ liệu
- Giám sát áp lực I/O thực tế trên đĩa mỏng
- Đánh giá hiệu năng lưu trữ ảo hóa (AWS EBS, VMware VMDK)
- Theo dõi tác động của thao tác cân bằng lại ASM
3. Ý nghĩa trường dữ liệu (Oracle 19c)
| Tên trường | Kiểu dữ liệu | Mô tả |
|---|---|---|
GROUP_NUMBER | NUMBER | Mã nhóm đĩa ASM |
DISK_NUMBER | NUMBER | Mã đĩa trong nhóm |
INST_ID | NUMBER | ID instance (hiệu lực trong RAC) |
READ_TIME | NUMBER | Tổng thời gian đọc (ms) |
WRITE_TIME | NUMBER | Tổng thời gian ghi (ms) |
BYTES_READ | NUMBER | Tổng byte đọc |
LARGE_WRITE_REQS | NUMBER | Số yêu cầu ghi lớn (>64KB) |
READ_REQS | NUMBER | Tổng yêu cầu đọc |
4. Công thức tính toán chính
- Độ trễ đọc trung bình:
READ_TIME / NULLIF(READ_REQS,0) - Băng thông đọc (MB/s):
BYTES_READ / (1048576 * thời_gian)
5. Khung nhìn liên quan và bảng cơ sở
- Khung nhìn liên quan:
V$ASM_DISK: Thông tin cơ bản đĩaV$ASM_DISK_IOSTAT: Thống kê I/O cho mọi đĩa
- Dữ liệu nguồn: Cấu trúc bộ nhớ ASM (không lưu trữ vĩnh viễn)
6. Nguyên lý hoạt động
- ASM thu thập metadata I/O theo thời gian thực
- Chỉ áp dụng cho đĩa có
IS_THIN='Y' - Thống kê được thiết lập lại khi khởi động lại ASM
- Hỗ trợ môi trường RAC qua
INST_ID
7. Truy vấn SQL thực tế
-- Phân tích đĩa có độ trễ cao
SELECT
disk.NAME,
stats.TB_DOC,
stats.SO_LAN_DOC
FROM (
SELECT
NUM_NHOM,
SO_DIA,
DOC_TIME / NULLIF(SO_DOC,0) * 1000 AS TB_DOC,
SO_DOC
FROM V$ASM_DISK_IOSTAT_SPARSE
) stats
JOIN V$ASM_DISK disk
ON stats.NUM_NHOM = disk.GROUP_NUMBER
AND stats.SO_DIA = disk.DISK_NUMBER
WHERE
stats.TB_DOC > 20
AND disk.IS_THIN = 'Y';
-- Tính toán băng thông theo thời gian
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE snapshot_iostat';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE TABLE snapshot_iostat AS SELECT * FROM V$ASM_DISK_IOSTAT_SPARSE;
EXEC DBMS_LOCK.SLEEP(300); -- Chờ 5 phút
WITH current_data AS (
SELECT * FROM V$ASM_DISK_IOSTAT_SPARSE
),
delta AS (
SELECT
c.NUM_NHOM,
c.SO_DIA,
(c.BYTES_READ - s.BYTES_READ)/1048576 AS DOC_MB,
(c.LAST_STAT - s.LAST_STAT)*86400 AS THOI_GIAN
FROM current_data c
JOIN snapshot_iostat s
ON c.NUM_NHOM = s.NUM_NHOM
AND c.SO_DIA = s.SO_DIA
)
SELECT
d.NAME,
ROUND(delta.DOC_MB / delta.THOI_GIAN, 2) AS DOC_MB_s
FROM delta
JOIN V$ASM_DISK d USING (NUM_NHOM, SO_DIA);
8. Lưu ý quan trọng
- Thống kê thiết lập lại khi: Khởi động ASM, thay đổi trạng thái đĩa
- Dữ liệu có độ trễ cập nhật vài giây
- Trong RAC: Tổng hợp dữ liệu từ mọi instance
- Khác biệt với
V$ASM_DISK_IOSTAT: Chỉ xử lý đĩa mỏng