✅ 1. Mục tiêu tối ưu truy vấn
Mục tiêu | Lý do |
---|---|
Rút ngắn thời gian truy vấn | Tăng trải nghiệm người dùng |
Giảm tài nguyên tiêu thụ | Giảm CPU, RAM, Disk |
Tăng thông lượng | Phục vụ nhiều session hơn |
Tránh full scan | Tận dụng chỉ mục, cache |
🔍 2. Phát hiện truy vấn chậm
🔧 a. Bật log truy vấn chậm trong postgresql.conf
🔧 b. Kích hoạt pg_stat_statements
📊 c. Xem truy vấn chậm nhất
📌 3. Dùng EXPLAIN
để xem kế hoạch thực thi
🧪 Ví dụ:
Kết quả bạn cần lưu ý:
Chỉ số | Ý nghĩa |
---|---|
Seq Scan | Đọc toàn bộ bảng → cần index |
Index Scan | Dùng index hiệu quả |
Rows Removed by Filter | Hàng bị loại → chi phí |
Buffers | I/O sử dụng |
Actual time | Thời gian thực tế |
🛠️ 4. Kỹ thuật tối ưu truy vấn phổ biến
Kỹ thuật | Ví dụ | Lợi ích |
---|---|---|
Tạo Index phù hợp | CREATE INDEX idx_orders_cust ON orders(customer_id); | Tránh Seq Scan |
Partial Index | CREATE INDEX idx_active ON users(last_login) WHERE active=true; | Index nhỏ, phù hợp truy vấn |
Composite Index | CREATE INDEX idx_multi ON orders(cust_id, created_at); | Phù hợp WHERE nhiều cột |
Avoid SELECT * | SELECT id, name thay vì SELECT * | Giảm I/O |
LIMIT với offset nhỏ | LIMIT 100 vs OFFSET 100000 | OFFSET lớn chậm |
WITH (CTE) & subquery tối ưu | Tránh tính toán lại nhiều lần | Hiệu quả xử lý |
Avoid functions in WHERE | WHERE created_at::date = '2024-01-01' ❌ | Tránh cản index |
🧠 5. Cách kiểm tra hiệu quả của Index
Nếu
seq_scan
>>idx_scan
→ Cần xem lại indexing
🧾 6. Theo dõi truy vấn thường xuyên (bằng log hoặc dashboard)
Công cụ | Mô tả |
---|---|
pg_stat_statements | Tổng hợp truy vấn chậm |
pgBadger | Phân tích file log thành HTML |
EXPLAIN ANALYZE | Kế hoạch thực thi chi tiết |
pg_hint_plan | Gợi ý plan cụ thể (nâng cao) |
auto_explain | Ghi tự động truy vấn chạy lâu |
📋 7. Checklist tối ưu SQL định kỳ
✅ Hàng tuần
Công việc | Công cụ |
---|---|
Xem top 5 truy vấn chậm | pg_stat_statements |
EXPLAIN truy vấn bất thường | EXPLAIN ANALYZE |
Check log slow query | /var/lib/pgsql/.../log/ |
✅ Hàng tháng
Công việc | Công cụ |
---|---|
Review index không dùng | pg_stat_user_indexes |
Tuning query cho dashboard | pgBadger , Grafana |
Đề xuất thêm index | Theo seq_scan , rows removed by filter |
📌 8. Template tối ưu hóa truy vấn (SQL Checklist)
Hạng mục | Đã làm (✅/❌) |
---|---|
Có index cho cột WHERE, JOIN? | |
Truy vấn có cần tất cả các cột (SELECT * )? | |
Tránh dùng hàm trong WHERE? | |
Đã EXPLAIN truy vấn trước khi triển khai? | |
Đã so sánh các chỉ số seq_scan , idx_scan ? | |
Truy vấn có ORDER BY trên index đã có? |
✅ Kết luận
-
Tối ưu truy vấn là công việc liên tục
-
Dễ thực hiện nếu:
-
Hiểu
EXPLAIN
-
Biết chỉ mục đang dùng và không dùng
-
Theo dõi
pg_stat_statements
,log
-
-
Ưu tiên: Index đúng, cấu trúc SQL tốt, hạn chế thao tác trên bảng lớn không index
✅ 1. Mẫu báo cáo 10 truy vấn chậm nhất (từ pg_stat_statements
)
📋 Câu lệnh SQL báo cáo:
✅ Ý nghĩa:
-
total_time
: tổng thời gian hệ thống dành cho câu SQL đó -
mean_time
: thời gian trung bình/câu lệnh -
pct_load
: % tải CPU hệ thống do câu SQL đó gây ra
🔁 2. Script tự động phân tích top 10 truy vấn chậm hàng tuần
📜 File: report_top_query.sh
🧪 Cron job chạy mỗi tuần (vào Chủ Nhật 23:00)
📨 Tùy chọn gửi báo cáo qua Telegram:
Thêm cuối file report_top_query.sh
:
✅ Kết quả đầu ra:
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- 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
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 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: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Đị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
=============================
AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, 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,sql tutorial, khóa học pl/sql tutorial, 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 RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty