Rebuild Index Oracle Database
1. Mở đầu
Việc tái xây dựng chỉ mục (rebuild index) là một quy trình thiết yếu giúp cải thiện hiệu suất của cơ sở dữ liệu, đồng thời giảm thiểu độ trễ và tối ưu hóa không gian lưu trữ. Khi dữ liệu bị phân mảnh hoặc thay đổi thường xuyên, chỉ mục cần được "làm mới" để đảm bảo các truy vấn diễn ra nhanh chóng và hiệu quả.
2. Fast Index Rebuilding
Tùy chọn REBUILD của câu lệnh ALTER INDEX được thực hiện để tái tạo một chỉ mục nhanh chóng bằng cách sử dụng chỉ mục hiện có thay vì bảng:
Mệnh đề STORAGE
Khi tái tạo chỉ mục (rebuild), chúng có thể thay đổi các tham số STORAGE để điều chỉnh cách chỉ mục mới quản lý không gian (space allocation). Ví dụ, chúng có thể tăng hoặc giảm kích thước của các block hoặc phân bổ lại cách không gian được sử dụng nếu nhận thấy chỉ mục cũ không hiệu quả về việc sử dụng tài nguyên.
Một số tham số phổ biến trong mệnh đề STORAGE bao gồm:
- INITIAL: Quy định dung lượng bộ nhớ ban đầu cần được cấp phát cho chỉ mục.
- NEXT: Quy định dung lượng bộ nhớ cần cấp phát cho chỉ mục khi không gian hiện tại đầy.
- PCTINCREASE: Xác định phần trăm tăng trưởng không gian khi cần thêm bộ nhớ cho các cấp phát tiếp theo.
- FREELISTS/FREELIST GROUPS: Quy định danh sách các block rảnh có thể sử dụng cho các hoạt động DML.
PARALLEL
Tùy chọn PARALLEL rất hữu ích khi chúng làm việc với các chỉ mục lớn hoặc hệ thống cơ sở dữ liệu có workload nặng. Bằng cách tận dụng sức mạnh của đa luồng các CPU, chúng có thể rút ngắn thời gian cần thiết để tái tạo chỉ mục.
Cách hoạt động:
- Oracle sẽ chia công việc tái tạo chỉ mục thành nhiều phần nhỏ và phân bổ chúng cho các tiến trình song song (parallel processes) để xử lý đồng thời. Mỗi tiến trình có thể xử lý một tập hợp các leaf blocks khác nhau, tăng tốc độ hoàn tất công việc.
- Số lượng song song (degree of parallelism) có thể được quy định thủ công, hoặc Oracle có thể tự động điều chỉnh dựa trên tài nguyên hệ thống sẵn có.
TIP
Khi chúng sử dụng tùy chọn REBUILD trong câu lệnh ALTER INDEX, hệ thống sẽ tái tạo lại chỉ mục (index) một cách nhanh chóng mà không cần phải đọc toàn bộ dữ liệu từ bảng cơ sở dữ liệu. Thay vào đó, chỉ mục hiện có sẽ được sử dụng để tái tạo chỉ mục mới. Điều này giúp cải thiện tốc độ thực hiện vì bạn không cần phải truy cập dữ liệu từ bảng.
Tuy nhiên, trong suốt quá trình tái tạo, hệ thống cần lưu trữ cả chỉ mục cũ và chỉ mục mới, do đó, bạn phải đảm bảo rằng có đủ không gian lưu trữ để chứa cả hai chỉ mục đồng thời.
3. Rebuilding Indexes Online
Rebuild hoặc Create Index trong khi thực hiện các câu lệnh DML:
- Chúng ta có thể rebuild hoặc create index ngay cả khi bảng gốc đang được sử dụng để thực hiện các hoạt động DML như chèn dữ liệu (INSERT), cập nhật (UPDATE), hoặc xóa (DELETE).
- Điều này có nghĩa là chúng không phải chờ hoạt động DML dừng lại để thực hiện việc rebuild index, điều này đặc biệt hữu ích khi hệ thống đang xử lý một lượng lớn giao dịch mà không có khoảng thời gian "rảnh rỗi".
Rebuild ở thời điểm khi hoạt động DML thấp vẫn tốt hơn:
- Mặc dù bạn có thể rebuild index khi có các hoạt động DML, nhưng việc này vẫn hoạt động hiệu quả hơn khi khối lượng công việc DML thấp. Điều này là vì hoạt động rebuild sẽ ít bị ảnh hưởng bởi các thao tác ghi và truy cập dữ liệu diễn ra đồng thời.
Trước Oracle 11g: Khóa độc quyền (exclusive lock):
- Trước phiên bản Oracle 11g, quá trình rebuild index yêu cầu một khóa độc quyền ở đầu và cuối của quá trình. Khóa này buộc các hoạt động DML phải chờ đợi (delay) cho đến khi việc rebuild hoàn tất, gây ra hiện tượng chậm trễ và làm giảm hiệu suất.
Sau Oracle 11g: Không cần khóa độc quyền:
- Từ Oracle 11g trở đi, việc rebuild index không cần khóa độc quyền nữa. Điều này giúp cho quá trình rebuild trở nên nhanh chóng và ít ảnh hưởng hơn đến các hoạt động DML khác đang diễn ra.
- Oracle đã cải tiến quy trình này để cho phép chỉ mục được rebuild trong khi các thao tác ghi/xóa/cập nhật vẫn có thể diễn ra, điều này giúp tối ưu hóa hiệu suất hệ thống.
Rebuild Index Online:
- Việc rebuild index online hiện tại nhanh hơn rất nhiều so với các phiên bản Oracle cũ. Tính năng này cho phép hệ thống không cần phải ngừng các hoạt động DML, đồng thời vẫn có thể hoàn tất việc tái tạo chỉ mục nhanh chóng.
Rebuild nhanh hơn so với xoá và tạo lại chỉ mục:
- Việc rebuild nhanh hơn so với việc xoá (DROP) chỉ mục cũ và tạo lại (CREATE) từ đầu. Điều này là vì quá trình rebuild index sử dụng các cấu trúc hiện có của chỉ mục cũ, tiết kiệm tài nguyên và thời gian hơn so với việc bắt đầu từ đầu.
4. So sánh Rebuild và Coalesce
Việc so sánh giữa Rebuild (Tái tạo) và Coalesce (Tập hợp) trong Oracle Index Management có thể được phân tích kỹ hơn dựa trên các khía cạnh sau:
Mục đích và cách thức hoạt động
- Rebuild (Tái tạo): Tái tạo chỉ mục được thực hiện để xây dựng lại toàn bộ cấu trúc của chỉ mục từ đầu. Việc này sẽ tạo ra một cây chỉ mục hoàn toàn mới, có thể tối ưu hơn so với cây cũ. Khi thực hiện tái tạo, chỉ mục sẽ được di chuyển sang một tablespace khác nếu cần, và toàn bộ cấu trúc dữ liệu sẽ được tối ưu hóa lại, bao gồm cả việc thu nhỏ chiều cao của cây chỉ mục (BLEVEL).
- Coalesce (Tập hợp): Tập hợp chỉ mục chỉ tái tổ chức lại các leaf block trong cùng một nhánh, tức là các khối lá đã bị phân mảnh sẽ được hợp nhất nhưng không tạo ra một cây chỉ mục mới. Coalesce giúp giải phóng các leaf block không sử dụng, tuy nhiên không ảnh hưởng đến cấu trúc của cây chỉ mục và không thể di chuyển chỉ mục sang một tablespace khác.
Dung lượng đĩa
- Rebuild (Tái tạo): Tái tạo chỉ mục đòi hỏi nhiều dung lượng đĩa hơn, vì trong suốt quá trình tái tạo, cần phải có không gian đủ để lưu trữ cả chỉ mục cũ và chỉ mục mới. Điều này có thể làm tăng chi phí tài nguyên, đặc biệt là trong các hệ thống lớn hoặc khi có nhiều chỉ mục cần tái tạo.
- Coalesce (Tập hợp): Yêu cầu ít dung lượng đĩa hơn, vì nó chỉ đơn thuần là hợp nhất các leaf block mà không cần tạo ra một bản sao mới của toàn bộ chỉ mục. Quá trình này sử dụng ít tài nguyên hơn so với tái tạo và thích hợp cho các hoạt động duy trì chỉ mục thường xuyên, nơi không có sự phân mảnh nghiêm trọng.
Tối ưu hóa cấu trúc
- Rebuild (Tái tạo): Do toàn bộ chỉ mục được tái tạo từ đầu, cấu trúc chỉ mục sau khi tái tạo sẽ được tối ưu hơn. Chiều cao của cây chỉ mục (BLEVEL) có thể được giảm, giúp cải thiện hiệu suất truy vấn. Điều này hữu ích khi chỉ mục đã bị phân mảnh nặng, hoặc khi có nhiều thay đổi đối với dữ liệu trong bảng liên kết.
- Coalesce (Tập hợp): Chỉ tập trung vào việc hợp nhất các leaf block, coalesce không thay đổi được chiều cao của cây chỉ mục. Đây là một giải pháp nhanh gọn để tối ưu lại các leaf block mà không đòi hỏi nhiều tài nguyên, nhưng không giải quyết được các vấn đề liên quan đến cấu trúc tổng thể của chỉ mục.
Di chuyển tablespace
- Rebuild (Tái tạo): Có thể di chuyển chỉ mục sang một tablespace khác trong quá trình tái tạo mà không cần xóa chỉ mục cũ. Điều này có lợi khi quản lý không gian lưu trữ và muốn tổ chức lại các tablespace.
- Coalesce (Tập hợp): Không hỗ trợ di chuyển chỉ mục sang tablespace khác. Chức năng coalesce chỉ tái tổ chức lại các khối dữ liệu trong cùng tablespace hiện tại.
Tình huống sử dụng
- Rebuild (Tái tạo): Thích hợp khi chỉ mục đã bị phân mảnh nghiêm trọng, khi có sự thay đổi lớn về dữ liệu hoặc khi có nhu cầu tối ưu hóa mạnh mẽ cho hệ thống. Tái tạo chỉ mục cũng là lựa chọn tốt khi cần di chuyển chỉ mục sang một tablespace mới.
- Coalesce (Tập hợp): Phù hợp với các kịch bản mà phân mảnh chỉ mục không quá nghiêm trọng, hoặc khi cần nhanh chóng giải phóng các leaf block mà không muốn tốn quá nhiều tài nguyên. Coalesce thường được sử dụng trong bảo trì định kỳ, để giữ cho chỉ mục ở trạng thái ổn định mà không cần thiết phải tái tạo hoàn toàn.
Hiệu suất
- Rebuild (Tái tạo): Do phải tạo lại toàn bộ cây chỉ mục, việc tái tạo có thể tốn thời gian và tài nguyên, nhưng mang lại hiệu quả cao sau khi thực hiện, vì cấu trúc chỉ mục sẽ trở nên tối ưu hơn và truy vấn có thể được tăng tốc đáng kể.
- Coalesce (Tập hợp): Hiệu quả hơn về mặt thời gian so với tái tạo, nhưng chỉ tập trung vào việc giải phóng và hợp nhất các leaf block. Coalesce không thay đổi được cấu trúc tổng thể của cây chỉ mục, do đó hiệu suất cải thiện không rõ rệt bằng tái tạo.
5. Kết luận
Tùy chọn REBUILD ONLINE trong Oracle cho phép chúng ta tái tạo chỉ mục mà không làm gián đoạn các thao tác DML (INSERT, UPDATE, DELETE) đang thực hiện trên bảng hoặc phân vùng chứa chỉ mục đó. Điều này có nghĩa là trong quá trình tái tạo chỉ mục, các hoạt động cập nhật dữ liệu trên bảng vẫn có thể tiếp tục mà không bị khóa bảng hoặc làm chậm hệ thống, giúp duy trì hiệu suất của ứng dụng khi cần tối ưu hóa chỉ mục.
Tuy nhiên, REBUILD ONLINE không thể áp dụng cho hai loại chỉ mục:
- Chỉ mục bitmap: Chỉ mục bitmap có cấu trúc khác với chỉ mục thông thường và được tối ưu cho các bảng có nhiều giá trị lặp lại trong cột, chẳng hạn như các giá trị phân loại. Quá trình rebuild của loại chỉ mục này phức tạp hơn, nên không hỗ trợ tính năng REBUILD ONLINE.
- Chỉ mục có ràng buộc toàn vẹn tham chiếu: Các chỉ mục này bảo đảm rằng dữ liệu giữa các bảng liên quan không bị sai lệch (ví dụ: ràng buộc khóa ngoại). Việc tái tạo chỉ mục khi có ràng buộc toàn vẹn cần phải đảm bảo tính nhất quán của dữ liệu, và việc cho phép DML trong quá trình này có thể gây ra sự không đồng bộ.
Tóm lại, REBUILD ONLINE giúp duy trì sự linh hoạt khi tái tạo chỉ mục mà vẫn cho phép các hoạt động DML tiếp diễn, nhưng không áp dụng cho chỉ mục bitmap và chỉ mục có ràng buộc toàn vẹn tham chiếu vì những yêu cầu kỹ thuật đặc biệt của chúng.
6. 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:
- LinkedIn: https://www.linkedin.com/in/nguyentrungnam/
- Facebook: https://www.facebook.com/trungnam.nguyen.395/
Rất mong được kết nối và cùng thảo luận!
All rights reserved