1. Giới Thiệu Về Binary Height Trong Chỉ Mục
Binary Height (chiều cao nhị phân) của một chỉ mục đóng vai trò quan trọng trong việc xác định lượng I/O cần thiết để trả về ROWID cho tiến trình của người dùng. Mỗi cấp độ trong binary height sẽ yêu cầu một khối (block) được đọc riêng biệt. Điều này có nghĩa là nếu chỉ mục có binary height là ba, khi trả về một hàng cho người dùng, sẽ cần đọc tổng cộng bốn block: ba block từ chỉ mục và một block từ bảng dữ liệu. Khi binary height của chỉ mục tăng lên, lượng I/O và thời gian truy xuất dữ liệu cũng sẽ tăng theo.
Sau khi sử dụng lệnh ANALYZE cho chỉ mục, bạn có thể truy vấn cột BLEVEL từ view DBA_INDEXES để kiểm tra chiều cao nhị phân của nó:
Mẹo:
Phân tích chỉ mục hoặc bảng sẽ cung cấp binary height của chỉ mục. Sử dụng cột BLEVEL trong view USER_INDEXES để kiểm tra chiều cao nhị phân của các chỉ mục.
Binary height tăng chủ yếu do số lượng giá trị không NULL trong các cột được chỉ mục và phân bố giá trị trong bảng. Sự hiện hữu của nhiều hàng đã bị xóa trong chỉ mục cũng có thể làm tăng chiều cao này. Việc rebuild chỉ mục có thể giúp giảm chiều cao này. Tuy nhiên, lợi ích về hiệu suất không phải lúc nào cũng rõ ràng. Khi số lượng hàng đã xóa trong một chỉ mục đạt khoảng 20–25%, việc rebuild chỉ mục là cần thiết để giảm số lượng I/O.
Mẹo:
Sử dụng kích thước block lớn hơn trong database sẽ giúp giảm binary height của chỉ mục. Mỗi cấp độ bổ sung trong binary height (BLEVEL) làm tăng độ phức tạp và chi phí thực hiện trong các thao tác DML.
2. Thông Tin Thêm Về BLEVEL và Chiều Cao Chỉ Mục
Cấp độ B-tree (BLEVEL) phản ánh độ sâu của chỉ mục từ block root đến các leaf blocks. Cấp độ 0 có nghĩa là root block và leaf blocks là một. Trong quá trình thêm dữ liệu vào chỉ mục, Oracle sẽ đưa dữ liệu vào block/leaf. Khi block hiện tại đầy, hai block mới sẽ được tạo ra với hai cách xử lý hiệu quả: phân tách chỉ mục 90-10 hoặc 50-50.
- Nếu giá trị mới lớn hơn tất cả giá trị đã có, Oracle thực hiện phân tách 90-10.
- Nếu giá trị mới không phải là giá trị lớn nhất, phân tách 50-50 sẽ diễn ra, chia đều các giá trị đã chỉ mục.
Block hiện tại sẽ chỉ chứa con trỏ đến các leaf node mới, và Kết quả sẽ khiến chỉ mục có branch level tăng lên. Hệ thống sẽ tiếp tục tạo thêm block mới cho mỗi khi leaf node đầy. Các thao tác phân tách block sẽ không làm tăng chiều cao hoặc BLEVEL của chỉ mục trừ khi root branch block bị phân tách.
3. Ảnh Hưởng Của Thao Tác UPDATE Đến Chỉ Mục
Chỉ mục chỉ bị ảnh hưởng bởi thao tác UPDATE nếu các cột trong bảng được cập nhật. Các thao tác này thực tế chuyển thành thao tác DELETE và INSERT. Giá trị cũ được đánh dấu là xóa và giá trị mới sẽ được chèn vào. Do đó, không có thao tác cập nhật thực sự nào được thực hiện trong chỉ mục, vì cấu trúc chỉ mục vẫn giữ nguyên cho đến khi bị dọn dẹp. Chỉ mục có thể được dọn dẹp bởi tính năng dọn dẹp Oracle’s delayed block. Khi entry trong chỉ mục bị xóa và block được dọn dẹp, không gian có thể được sử dụng lại cho các entry mới.
4. Ảnh Hưởng Của Thao Tác DELETE Đến Chỉ Mục
Các thao tác DELETE trên chỉ mục không xóa các entry khỏi chỉ mục ngay lập tức. Khi một hàng bị xóa từ bảng, entry tương ứng trong chỉ mục sẽ được đánh dấu là đã xóa. Chỉ sau khi dọn dẹp, không gian trong chỉ mục mới có thể được tái sử dụng cho các entry mới. Các thao tác dọn dẹp này diễn ra tự động theo các thao tác INSERT trong tương lai.
5. Tác Động Của Các Thao Tác UPDATE và DELETE Tới Chỉ Mục
Các thao tác UPDATE và DELETE có khả năng làm tăng kích thước chỉ mục đáng kể, đặc biệt là khi nhiều thao tác diễn ra trong cùng một transaction. Mặc dù các thao tác DELETE không trực tiếp làm tăng chiều cao chỉ mục, nhưng sự hiện diện của nhiều entry đã bị xóa có thể ảnh hưởng đến chỉ mục. Giải pháp là chia nhỏ các transaction và thực hiện commit để tái sử dụng không gian hiệu quả hơn.
6. Ảnh Hưởng Của Kích Thước Block Đến Chỉ Mục
Chiều cao và branch level của chỉ mục chỉ tăng lên khi xảy ra tách block. Sử dụng kích thước block lớn hơn trong chỉ mục có thể giúp giảm thiểu tần suất tách block, giảm thiểu số lượng branch và leaf blocks. Tuy nhiên, việc chuyển đổi một chỉ mục sang tablespace có kích thước block lớn hơn sẽ yêu cầu rebuild chỉ mục, do đó cần cân nhắc kỹ.
source: viblo