- vừa được xem lúc

Giải Mã Cluster Factor Trong Oracle Database

0 0 5

Người đăng: Nguyễn Trung Nam

Theo Viblo Asia

1. Mở đầu

Một vụ án âm thầm phá hoại hiệu suất hệ thống: Cluster Factor cao bất thường. Truy vấn từng mượt mà nay trở nên ì ạch, chỉ mục tưởng chừng như anh hùng giờ thành kẻ tình nghi chính. Nguyên nhân là gì? Dữ liệu đã xáo trộn hay điều gì đang ẩn mình trong bóng tối? Hãy cùng bước vào cuộc điều tra đầy gay cấn để khám phá bí mật ẩn sau vụ án này.

2. Giải mã

Clustering factor là một thước đo đánh giá mức độ sắp xếp của một index so với bảng mà nó dựa trên. Nó được sử dụng để xác định chi phí của việc tra cứu bảng sau khi truy cập index. Clustering factor ghi lại số lượng blocks cần đọc khi quét qua index. Nếu một index có yếu tố clustering factor lớn, sẽ cần phải truy cập nhiều blocks dữ liệu của bảng để lấy các hàng (row) từ mỗi block của index (vì các hàng liền kề nằm rải rác ở các block khác nhau). Khi clustering factor gần với số block của bảng, điều đó chỉ ra rằng index được sắp xếp tốt; ngược lại, nếu clustering factor gần với số lượng hàng trong bảng, index không được sắp xếp hiệu quả. Clustering factor được tính theo công thức sau (giải thích ngắn gọn):

  • Quét toàn bộ index theo thứ tự tăng dần của các giá trị trong index.
  • Lấy ROWID của mỗi giá trị trong index, và so sánh block mà ROWID này trỏ đến với block của ROWID trước đó trong index.
  • Mỗi khi ROWID trỏ đến một block khác với block của ROWID trước đó, clustering factor sẽ được tăng lên.

Cột CLUSTERING_FACTOR trong view USER_INDEXES cho biết mức độ tổ chức của dữ liệu so với các cột được index. Nếu giá trị của cột CLUSTERING_FACTOR gần bằng số lượng leaf block trong index, dữ liệu trong bảng được sắp xếp tốt. Ngược lại, nếu giá trị này không gần bằng số leaf block trong index, thì dữ liệu trong bảng không được sắp xếp tốt. Các leaf block của một index lưu trữ các giá trị được index cũng như các ROWID mà chúng trỏ đến.

Ví dụ, giả sử CUSTOMER_ID cho bảng CUSTOMERS được tạo ra từ một sequence generator, và CUSTOMER_ID là khóa chính của bảng. Index trên CUSTOMER_ID sẽ có clustering factor rất gần với số lượng leaf block (được sắp xếp tốt). Khi khách hàng được thêm vào cơ sở dữ liệu, họ sẽ được lưu trữ tuần tự trong bảng theo cách các số thứ tự được tạo ra từ sequence generator (được sắp xếp tốt). Tuy nhiên, một index trên cột CUSTOMER_NAME sẽ có clustering factor rất cao vì tên khách hàng được sắp xếp ngẫu nhiên trong bảng.

Clustering factor có thể ảnh hưởng đến các câu lệnh SQL thực hiện range scans. Với clustering factor thấp (so với số lượng leaf block), số lượng block cần để thực hiện truy vấn sẽ giảm. Điều này làm tăng khả năng các block dữ liệu đã được lưu sẵn trong bộ nhớ. Ngược lại, clustering factor cao so với số lượng leaf block có thể làm tăng số lượng block dữ liệu cần thiết để thực hiện range query dựa trên cột được lập chỉ mục.

TIP

Việc sắp xếp dữ liệu trong bảng có thể được tận dụng để cải thiện hiệu suất của các câu lệnh thực hiện các thao tác range scan. Bằng cách xác định cách cột được sử dụng trong các câu lệnh, việc lập index cho các cột này có thể mang lại lợi ích lớn.

3. Thông tin kết nối

Nếu anh em muốn trao đổi thêm về bài viết, hãy kết nối với mình qua LinkedIn và Facebook:

Rất mong được kết nối và cùng thảo luận!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Mysql index strategy

Trong Mysql, index hỗ trợ việc tìm kiếm các rows theo từng giá trị của các columns trong bảng trở nên nhanh chóng. Việc tìm kiếm sẽ phải scan toàn bộ table nếu các column trong câu query không được đánh index một cách thích hợp. . .

0 0 65

- vừa được xem lúc

Mẹo SEO Cơ Bản Giúp Website Của Bạn Được Lập Chỉ Mục Nhanh Hơn

Hướng dẫn 10 mẹo cơ bản giúp các bạn SEOer mới dễ dàng hơn trong việc lập chỉ mục nội dung của website mới. Khi bạn cập nhật những bài viết mới trong khoảng thời gian đầu tiền của trang web sẽ rất mất

0 0 50

- vừa được xem lúc

MySQL Performance Tuning With Index

Lâu rồi không viết bài trên viblo nên để cái tiêu đề hơi công nghiệp =)) Xin chào các bạn, đợt rồi mình mới được làm vài task cải thiện thiện tốc độ truy vấn mysql nên hôm nay xin phép chia sẻ lại chú

0 0 86

- vừa được xem lúc

Tăng tốc database phần 1 index - khái niệm cơ bản

Phần đầu tiên trong chuỗi bài là các phần liên quan tới database, nhiều bạn thích trình bày các vấn đề khác về database tuy nhiên theo kinh nghiệm cá nhân mình thấy hiểu về index trong db rất quan trọ

0 0 42

- vừa được xem lúc

Tăng tốc database index phần 2 - Leaf Nodes

Đầu tiên mình định dịch ra là nút lá, nhưng nghe nó không được hay cho lắm nên quyết định giữ nguyên tên của nó là Leaf Nodes. Giải pháp để khắc phục vấn đề này là mấy ông làm ra cơ sở dữ liệu sẽ khôn

0 0 35

- vừa được xem lúc

Tăng tốc database index phần 3 - B-Tree

Index leaf node được lưu trữ theo dạng Linked List về mặt logic, còn về cấu trúc lưu trữ vật lý, mỗi leaf node có thể lưu lung tung, không có thứ tự gì, nó giống một quyền từ điển mà các trang bị xáo

0 0 44