Thứ Sáu, 4 tháng 12, 2020

[VIP5] Tối ưu hóa cấu trúc Cơ sở dữ liệu Oracle

Mục đích

- Tối ưu cấu trúc bảng, index, partition.

- Tối ưu câu lệnh truy vấn và tác động của Database

- Tối ưu việc xử dụng tài nguyên của Database

- Đảm bảo database hoạt động ổn định

- Thống nhất phương án thiết kế Database và tác động Database

Bảng tạo mới: 


Khi tạo 1 bảng mới cần áp dụng các phương án như sau

·    Với bảng có dữ liệu lớn (2G trở lên) phải đánh partition theo dữ liệu:

·    Với dữ liệu lịch sử thì đánh theo By Range (ví dụ partition theo ngày, tháng, năm; dữ liệu cũ sẽ chuyển phân vùng SATA hoặc cất lên Tape, với DB "siêu to khổng lồ" nếu không làm tốt phần này sẽ TOANG).
·    Với dữ liệu xác định trước được giá trị thì đánh theo By list (ví dụ theo status=-1, 0, 1, 2, nhưng nếu thường xuyên truy cập vào bảng có status=1 chiếm > 90% thì việc đánh index không hiệu quả)
·    Với dữ liệu không có quy luật thì đánh theo By Hash (băm ra thành 8, 16, 32, 64 mảnh hash)

·    Với các bảng có đánh partition thì index phải đánh theo Local vì nếu index global khi drop/move 1 partition sẽ làm index global phải rebuild lại (bản chất của drop/move partition update global index cũng là rebuild lại index) --> Duy trì sẽ rất khó

·    Hạn chế sử dụng trigger trên bảng vì trigger là thêm 1 bước nữa trước khi thực hiện DML dữ liệu làm chậm đi.

·    Đánh giá trong câu lệnh select có trường nào xác định được đối tượng tìm kiếm chính xác nhất và có độ dài trường ngắn nhất(ưu tiên trường number) thì đánh index theo trường đó, index theo number hoặc  PK luôn là nhanh nhất rồi.

·    Hạn chế dùng foreign key vì làm chậm quá trình DML.

·    Đánh index của trường foreign key để tránh quét full khi update bảng cha

 

Câu lệnh SQL: Khi viết câu lệnh tác động vào bảng cần chú ý:

·    Tất cả các câu lệnh đều phải có index, không câu lệnh nào được quét full bảng (bảng nhỏ có thể châm trước)

·    Nếu bảng có partition thì trong câu lệnh phải có thêm trường partition, ngoại trừ 1 số trường hợp đặc biệt

·    Khi join 2 bảng với nhau thì bảng có dữ liệu lớn hơn phải có index thì sẽ join nhanh hơn

·    Trong câu lệnh không dùng điều kiện is null, cần chuyển sang phương án dùng các toán tử : >, < = ….

·    Hạn chế sử dụng câu lệnh delete, cần chuyển sang câu lệnh truncate

·    Hạn chế sử dụng câu lệnh update, cần chuyển sang câu lệnh inert và select (insert có thể đặt nologging append và parallel 8,16)

·    Với các bảng tmp có dữ liệu trong quá trình chạy và xóa dữ liệu sau khi chạy(không cần backup dữ liệu) cần chuyển bảng sang nologging và câu lệnh insert cần có thêm append

 

Câu lệnh tạo View


Các lưu ý khi tạo view

·    Hạn chế sử dụng view lồng nhau


Tạo tablespace: 


Với mỗi Database thường tạo các loại tablespace như sau

·    Loại tablespace cố định : để lưu defaule các user ứng dụng, các bảng không có partition, VD : DATA. Tương ứng là INDX

·    Loại tablespace không cố định : lưu các bảng có partition, vd DATAYYYYMM, DATAYYYY tương ứng là INDXYYYMM, INDXYYYY

·    Loại tablespace cho người dùng: lưu các bảng của người dùng trực tiếp CSDL tạo ra, vd DATA_NGHIEPVU1, INDX_NGHIEPVU1, DATA_NGHIEPVU2, INDX_NGHIEPVU2

·    Loại dữ liệu user thường: Lưu cả data và index  trong USERS

·    Loại dữ liệu LOB: Lưu cả data và index trong LOB, lớn thì thêm LOBYYYY

·    Loại tablespace tmp : lưu cả data và index tmp, các bảng không cần backup (exclude tablespace trong RMAN), vd TMP

 

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