Thứ Năm, 10 tháng 12, 2020

Cơ chế làm việc của Index trong Oracle Database

B-Tree indexes (sau đây gọi là index) là một object có cấu trúc, chúng ta có thể coi nó như là 1 table cũng được. Tuy nhiên chúng được sắp xếp theo dạng B-Tree (cây nhị phân) để phục vụ cho việc tìm kiếm nhanh. Nó bao gồm các thông tin sau: 

- Index key: chứa các trường dữ liệu làm key khi tạo index 

- RowID: là ROWID tương ứng với dòng dữ liệu chứa index key. 

Trong qúa trình hoạt động của Oracle DB, index được ứng xử như thế nào, chúng ta sẽ bàn từng trường hợp cụ thể sau: 

- Khi select: giả sử, ta cần select 1 dòng dữ liệu mà trong điều kiện lọc (where) có sử dụng các trường trong index thì oracle server sẽ load index đó lên và tìm đến dòng chứa index key đó, lấy ra rowid tương ứng. Sau đó từ thông tin rowid này oracle server sẽ đọc chính xác block chứa dòng dữ liệu cần lấy ra lên buffer cache và trả kết quả về cho người dùng. 

- Khi insert: thêm 1 dòng mới vào table thì oracle cũng sẽ insert thêm 1 dòng vào các indexes của table đó (bao gồm index key và rowid). 

- Khi delete: cái này có thể coi là một điểm đáng lưu ý khi quản lý DB oracle. Đó là khi ta xóa một dòng trên table thì dòng index tương ứng với nó trên các indexes có bị xóa hay không? Xin trả lời là Oracle sẽ không xóa, mà chỉ đánh dấu là không còn sử dụng và nó vẫn tồn tại trong index đó. Cứ như vậy, qua thời gian nó sẽ ngày càng có nhiều dòng (hay còn gọi là lá - leaves) không dùng đến (dead leaves). 

- Khi update: chúng ta chỉ bàn đến trường hợp update các trường nằm trong index key. Khi đó Oracle sẽ làm như sau: 

+ Đánh dấu dòng cũ trên index là không còn sử dụng (dead leaf) 

+ Tạo thêm 1 dòng mới với index key mới và rowid tương ứng. 

Như vậy, với 2 trường hợp delete và update (index key) sẽ đều sinh ra các dead leaves và càng ngày index càng phình to và chứa nhiều lá chết. Do vậy sẽ ảnh hưởng đến tốc độ truy xuất dữ liệu của table tương ứng. 

Khi rebuild lại index, oracle sẽ thực hiện tương tự việc drop index và create lại (với online thì  Trong quá trình xây dựng lại Index không gian cần thiết là không gian cho cả index cũ và index mới khi được tạo thành. Các truy vấn có thể tiếp tục sử dụng các index đang tồn tại trong khi các index mới đang được xây dựng) , do vậy sẽ loại bỏ được toàn bộ các lá chết ra khỏi index đó. 

Qua đó, ta có thể thấy việc rebuild là cần thiết, nhưng thời điểm và tần xuất thực hiện nó thì tùy thuộc vào từng database. 

Tổ chức lại (rebuild) index nếu nó có tỷ lệ các hàng bị xoá cao, ví dụ khi tỷ lệ DEL_LF_ROWS với LF_ROWS vượt quá 20%  || the index depth is more then 4 levels. Check như sau:

ANALYZE INDEX [schema.]index VALIDATE STRUCTURE
 
Sau khi thực hiện câu lệnh ANALYZE INDEX truy vấn view INDEX_STATS để lấy thông tin về index như trong ví dụ dưới đây:

SVRMGR>  BLOCKS     PCT_USED     LF_ROWS     DEL_LF_ROWS
25                11                 14                    0
1 row selected.

Và qua phân tích ở trên, thì chỉ những indexes thuộc các tables mà thường xuyên có delete và update thì mới cần phải rebuild. Còn nếu Database của bạn là 1 data warehouse thì hầu như không bao giờ phải rebuild lại index. 

Thông thường, để đảm bảo sau khi rebuild index, các thông tin statistics và plan execution được cập nhật thì ta nên chạy thêm lệnh ANALYZE TABLE <TBL_NAME> COMPUTE STATISTICS. 

---------------------------
* Dữ liệu trong thời đại 4.0 là "TRÁI TIM" của doanh nghiệp. Quản trị cơ sở dữ liệu (Database Administration - DBA) là ngành có lương cao nhất trong ngành IT và đầy tiềm năng trong thời đại 4.0. Oracle là cơ sở dữ liệu hàng đầu trên thế giới và được rất nhiều doanh nghiệp lớn trên thế giới và Việt Nam sử dụng.

* Bạn có mong muốn từng bước trở thành chuyên gia DBA không? Nếu câu trả lời là CÓ thì hãy nhanh chóng đăng ký sở hữu trọn đời khóa học online "Quản trị cơ sở dữ liệu cơ bản" của tôi tại Unica (bạn có thể xem trên điện thoại, máy tính bảng, PC vào bất kỳ lúc nào chỉ cần có mạng Internet). Hiện tại tôi đang khuyến mại cho 100 bạn đăng ký đầu tiên giảm giá từ 2400K còn 799K, CAM KẾT HOÀN TIỀN 100% nếu học xong không có kết quả:

- Môn 1: Quản trị Oracle 12 cơ bản, giảm giá 70% HÔM NAY cho 100 bạn đầu tiên từ 2tr4 còn 799K theo link:  https://bit.ly/3d2ofqZ (khoá này học ở Oracle hãng là 1.500$), chuyển khoản còn 699K

- Môn 2: Quản trị Linux trong 21h, cũng giảm giá 70% HÔM NAY  cho 100 bạn đầu tiên từ 2tr4 còn 799K theo link: https://bit.ly/3e7gwJw, chuyển khoản còn 699K


KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH: 📧 Mail: binhoracle@gmail.com ☎️ Mobile: 0902912888 ⚡️ Skype: tranbinh48ca 👨 Facebook: https://www.facebook.com/BinhOracleMaster 👨 Inbox Messenger: https://m.me/101036604657441 (profile) 👨 Fanpage: https://www.facebook.com/tranvanbinh.vn 👨 Inbox Fanpage: https://m.me/tranvanbinh.vn 👨👩 Group FB: https://www.facebook.com/groups/OracleDBAVietNam 👨 Website: http://www.tranvanbinh.vn 👨 Blogger: https://tranvanbinhmaster.blogspot.com 🎬 Youtube: http://bit.ly/ytb_binhoraclemaster 👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi 👨 Linkin: https://www.linkedin.com/in/binhoracle 👨 Twitter: https://twitter.com/binhoracle 👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội #OracleTutorial #OracleDBA #OracleDatabaseAdministration #học oracle database #oca #ocp #oce #ocm

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master