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 to mi


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 liu:

·    Với dữ liệu lịch sử thì đánh theo By Range (ví d partition theo ngày, tháng, năm; d liu cũ s chuyn phân vùng SATA hoc ct lên Tape, vi DB "siêu to khng l" nếu không làm tt phn 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 cp vào bng có status=1 chiếm > 90% thì vic đánh index không hiu 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 mnh 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 phi rebuild li (bn cht ca drop/move partition update global index cũng là rebuild li index) --> Duy trì s rt khó

·    Hạn chế sử dụng trigger trên bảng vì trigger là thêm 1 bưc na trưc khi thc hin DML d liu làm chm đ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 hoc  PK luôn là nhanh nht ri.

·    Hạn chế dùng foreign key vì làm chm 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 (bng 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

·    Loi d liu user thưng: Lưu c data và index  trong USERS

·    Loi d liu LOB: Lưu c data và index trong LOB, ln 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

ĐỌC NHIỀU

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