Thứ Tư, 28 tháng 9, 2022

[VIP5] Tổng hợp Các câu hỏi hay gặp về Tối ưu Cơ sở dữ liệu Oracle (Tunning Q&A)

Mục đích: Trả lời những câu hỏi thay gặp khi bạn bắt đầu tối ưu Cơ sở dữ liệu Oracle, từ đó bạn có tư duy để có thể tối ưu mọi Cơ sở dữ liệu 

1. Tối ưu cơ sở dữ liệu oracle là gì?

Tối ưu cơ sở dữ liệu Oracle là quá trình tối ưu hóa hiệu suất và khả năng mở rộng của cơ sở dữ liệu Oracle để đáp ứng yêu cầu của ứng dụng và người dùng. Quá trình này bao gồm:
  1. Thiết kế cơ sở dữ liệu: Cấu trúc cơ sở dữ liệu nên được thiết kế sao cho phù hợp với nhu cầu và mục đích sử dụng. Tham khảo thêm (Những sai lầm trong thiết kế cơ sở dữ liệu, Hướng dẫn thiết kế tối ưu object, tablespace)
  2. Tối ưu câu lệnh SQL: Các câu lệnh SQL cần được tối ưu để truy xuất dữ liệu nhanh chóng và hiệu quả. 85-95% vấn đề tối ưu Oracle Database sau này nằm ở đây. Tham khảo thêm Hướng dẫn thiết kế tối ưu object, tablespace
  3. Tối ưu bộ nhớ: Bộ nhớ là vùng nhớ được sử dụng để lưu trữ tạm thời các dữ liệu truy xuất từ cơ sở dữ liệu. Chúng ta cần đọc kỹ AWR để tối ưu SGA, PGA hợp lý, đọc thêm (Cách đọc, phân tích Báo cáo AWR để tối ưu hiệu năng Oracle Database)
  4. Tối ưu ổ đĩa: Các ổ đĩa lưu trữ cơ sở dữ liệu cần được tối ưu để giảm thời gian truy xuất dữ liệu. Với ASM Diskgroup tối thiểu 04 disk, mỗi tablespace tối thiểu 02 datafile, tốt nhất 04 file để đảm bảo hiệu năng IO tốt nhất.
  5. Tối ưu bảo mật: Tối ưu bảo mật cơ sở dữ liệu giúp giảm rủi ro về an ninh thông tin.
  6. Tối ưu mạng: Tối ưu mạng giúp cải thiện hiệu suất truyền tải dữ liệu giữa các máy chủ và người dùng. Giao tiếp giữa  App (Web, xử lý Business) - DB nhiều thì nên cùng dải mạng
  7. Tối ưu hóa thiết bị phần cứng: Thiết bị phần cứng như ổ đĩa, bộ nhớ và CPU cần được tối ưu để đáp ứng nhu cầu của cơ sở dữ liệu.
  8. Tối ưu hóa quản trị cơ sở dữ liệu: Quản trị viên cần tối ưu hoạt động của cơ sở dữ liệu, bao gồm các tác vụ như sao lưu, khôi phục, tối ưu và bảo trì.
==> Với DBA chia thành 2 mảng là Instance Tunning và SQL Tunning, ngoài ra phải chú ý tối ưu thiết kế, ứng dụng, mạng, SAN... khi đó hệ thống mới chạy an toàn, ổn định trong thời gian dài được.

2. Tại sao phải tối ưu cơ sở dữ liệu oracle?

Việc tối ưu cơ sở dữ liệu Oracle là rất quan trọng để đảm bảo hiệu suất tốt và tránh tình trạng chậm hoặc treo của hệ thống. Khi cơ sở dữ liệu trở nên quá lớn hoặc có quá nhiều người dùng truy cập đồng thời, hệ thống có thể trở nên chậm hoặc không ổn định. Tối ưu cơ sở dữ liệu Oracle có thể giúp tăng tốc độ truy xuất dữ liệu, giảm thời gian phản hồi và tăng hiệu suất của hệ thống, đồng thời giúp tránh tình trạng gián đoạn trong hoạt động của hệ thống.

==> Việc tối ưu làm giảm thời gian phản hồi cho người dùng (Oracle có khái niệm DB Time (tổng thời gian xử lý) = CPU Time (thời gian xử lý chính) + Wait Time (thời gian chờ))


3.Tại sao phải tối ưu hệ thống công nghệ thông tin?

Tối ưu hệ thống công nghệ thông tin là quá trình tăng cường hiệu suất và hiệu quả của hệ thống để đảm bảo chất lượng dịch vụ tốt nhất cho người dùng và giảm thiểu chi phí vận hành hệ thống. Các lý do quan trọng để tối ưu hệ thống công nghệ thông tin bao gồm:
  1. Tăng hiệu suất: Tối ưu hệ thống giúp tăng cường hiệu suất hệ thống, giảm thiểu thời gian phản hồi và tăng tốc độ xử lý các tác vụ.
  2. Tiết kiệm chi phí: Tối ưu hệ thống giúp giảm thiểu chi phí vận hành hệ thống bằng cách tối đa hóa sử dụng tài nguyên và tối ưu hóa các quy trình làm việc.
  3. Nâng cao độ tin cậy: Tối ưu hệ thống giúp giảm thiểu các lỗi và sự cố hệ thống, nâng cao độ tin cậy và đảm bảo dịch vụ luôn sẵn sàng cho người dùng.
  4. Nâng cao trải nghiệm người dùng: Tối ưu hệ thống giúp nâng cao trải nghiệm người dùng bằng cách cải thiện tốc độ và hiệu suất của các ứng dụng, giảm thiểu thời gian chờ đợi và đảm bảo tính khả dụng của hệ thống.
  5. Đáp ứng nhu cầu kinh doanh: Tối ưu hệ thống giúp đáp ứng nhu cầu kinh doanh của tổ chức, đảm bảo tính linh hoạt và đáp ứng các thay đổi nhanh chóng.
==> Việc tối ưu làm giảm thời gian phản hồi (respone time) cho người dùng

4. Phân biệt khái niệm Database Time, CPU Time, Wait Time?

Tổng thời gian của một truy vấn SQL/PL-SQL có thể được phân tích thành các thành phần Database Time, CPU Time và Wait Time để giúp phân tích và tối ưu hiệu suất hệ thống. Việc tối ưu Wait Time là rất quan trọng để cải thiện hiệu suất hệ thống:
  • Database Time: Tổng thời gian mà hệ thống cơ sở dữ liệu đã sử dụng để thực hiện các thao tác truy vấn và xử lý dữ liệu.
  • CPU Time: Tổng thời gian mà CPU đã sử dụng để thực hiện các tác vụ tính toán. Để giảm CPU Time cần tối ưu câu lệnh SQL, chú ý Plan có Cost thấp nhất, partition, index, bảng tinh gọn phải chú ý.
  • Wait Time: Thời gian mà một tiến trình phải chờ đợi để thực hiện các tác vụ như I/O, locking, hoặc kết nối mạng.
5. Phương pháp Tunning Top-Down là như thế nào?

Server Tunning: 
  1. Đĩa cho máy chủ Database và storage nên là SSD, hoặc dữ liệu online phải là SSD (đó là nguyên tắc), còn nhà nghèo thì chịu có gì dùng đấy vậy
  2. RAM, CPU sizing dựa trên TPS hoặc dựa trên 1 hệ thống tương đương để tính toán cho phù hợp và cộng thêm % dự phòng
  3. Không để tình trạng thiếu RAM gây swap là database rất chậm
  4. Khi CPU cao cần tối ưu ngay câu lệnh SQL: Thường do không có index, partition thiếu.
Instance Workload Tunning:

1. Tham số OPTIMIZER_MODE=ALL_ROWS là mặc định, báo Oracle dùng phương pháp dựa vào cost cho mọi câu lệnh SQL và tối ưu với mục tiêu tài nguyên tốt nhất (best throughput ~ minimum resource), tham khảo thêm tại đây 

2. Chú ý statistic object đầy đủ, định kỳ 3-6 tháng, tham khảo thủ tục Gather, Analyze Cơ sở dữ liệu Oracle_FULL

3. cursor_sharing = extract là mặc định không cần thay đổi, chú ý bắt ứng dụng dùng bind biến (variable bind) để dùng soft parse, tham khảo thêm "Hiểu về tham số cursor_sharing trong Oracle Database"

Instance Object Tunning:

PCEFREE và PCEUSED có thể sử dụng nếu cần, nhưng ít khi dùng, chưa quen có thẻ bỏ qua, tham khảo thêm tại đây

Đọc thêm:

SQL Tunning:

Mục tiêu để câu lệnh SQL  để cost thấp nhất: 

  • Tạo partiton bảng, đánh lại partition
  • Tạo index bổ sung hoặc sửa lại index
  • Có thể dùng hint, chi tiết tại đây 
  • Sử dụng SQL Tunnig Advisor để sử dụng SQL Profile
6. Vai trò của Oracle Optimizer?

Trình tối ưu hóa truy vấn Oracle (Optimizer) xác định kế hoạch thực thi hiệu quả nhất và là bước quan trọng nhất trong quá trình xử lý bất kỳ câu lệnh SQL nào.

Oracle Optimizer là một thành phần quan trọng của Oracle Database, có vai trò quyết định cách thức truy xuất dữ liệu từ cơ sở dữ liệu. Nó được sử dụng để tối ưu hóa các câu lệnh SQL và lập kế hoạch truy xuất dữ liệu, nhằm đảm bảo hiệu suất và khả năng phục vụ của hệ thống cơ sở dữ liệu.

Cụ thể, Oracle Optimizer sẽ phân tích câu lệnh SQL, tìm kiếm các phương án thực hiện và chọn ra phương án tối ưu nhất dựa trên các thống kê về cấu trúc cơ sở dữ liệu, kích thước dữ liệu, mật độ dữ liệu và các yêu cầu truy xuất từ người dùng. Việc sử dụng Oracle Optimizer giúp tăng cường hiệu suất và khả năng phục vụ của hệ thống cơ sở dữ liệu, đồng thời giảm thiểu thời gian phản hồi của các truy vấn và tối ưu hóa tài nguyên hệ thống

Trình tối ưu hóa thực hiện:
- Đánh giá các biểu thức và điều kiện
- Sử dụng thống kê đối tượng (số row, index,..) và hệ thống (I/O, CPU, RAM…)
- Quyết định cách truy cập dữ liệu
- Quyết định cách join các bảng
- Quyết định đường dẫn truy cập (access path) nào hiệu quả nhất

7. Các bước xử lý câu lệnh SQL trong Oracle Database?

  • Parse: Phân tích câu lệnh để xác định Plan tốt nhất, có thể dùng Soft parse (nếu câu lệnh đã sử dụng) hoặc Hard parse (nếu chưa có)
  • Bind: Gán giá trị vào
  • Thực thi (Execution): Câu lệnh SQL được thực thi bằng cách truy cập dữ liệu trong bộ nhớ hoặc truy cập vào ổ đĩa, thực thi được thực hiện theo kế hoạch đã được trình tối ưu hóa xác định từ trước.
  • Fetch: lấy các row cho 1 lần truy vấn, sử dụng cơ chế fetch mảng (SQL*Plus xử lý 15 row 1 lần, TOAD 500 row 1 lần)
8. Câu lệnh SQL kém là như thế nào?

* SQL kém thường dùng nhiều tài nguyên hơn mức cần thiết
* SQL kém có những đặc điểm sau: 
- Thời gian parse dài
- I/O quá nhiều (physical reads và writes)
- CPU time quá lâu
- Waits quá lâu

9. Lấy những câu lệnh SQL kém ở đâu?

Chúng ta lấy ở AWR, ADDM, ASH hoặc script, ví dụ:

SQL sắp xếp theo CPU Time


SQL sắp xếp theo lượng lấy dữ liệu


10. Explain Plan là gì?

Kế hoạch thực thi là một tập hợp các bước mà trình tối ưu hóa thực hiện khi thực thi một câu lệnh SQL và thực hiện một hoạt động nào đó, chúng ta có thể tưởng tượng như đường đi đến đích khi chúng ta dùng Google Map để định vị.

Cách tạo Explain Plan như thế nào?

EXPLAIN PLAN
SET STATEMENT_ID = 'demo01' FOR
SELECT e.last_name, d.department_name FROM hr.employees e, hr.departments d 
WHERE e.department_id = d.department_id;

Explained.

Note: Lệnh EXPLAIN PLAN không đúng 100% với plan thực tế (tức là thực tế có thể chạy với plan khác, bước này chỉ là estimate)

SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY()); 


11. Cách đọc Plan?

Nguyên tác đọc: Thụt vào sâu nhất từ trên xuống

Với Plan ở trên đọc: 3 --> 2 --> 5 --> 4 --> 1 --> 0


Hy vọng hữu ích cho bạn.
=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
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/DBAVietNam
👨 Website: https://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

=============================
Tổng hợp Các câu hỏi hay gặp về Tối ưu Cơ sở dữ liệu Oracle, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

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