SQL

8 bài viết

Nền tảng của mọi việc tối ưu: cách trình tối ưu (planner) chọn kế hoạch, đọc EXPLAIN / EXPLAIN ANALYZE, ý nghĩa các node (Seq Scan, Index Scan, Nested Loop, Hash Join, Sort), cost vs actual, và vai trò của thống kê (ANALYZE).

13 thg 7, 2026 2

Chỉ mục hoạt động ra sao và dùng đúng cách: B-tree, chỉ mục nhiều cột (thứ tự cột quan trọng), covering/INCLUDE cho index-only scan, partial index, expression index, GIN/GiST cho JSON/full-text, và cái giá của chỉ mục khi ghi.

13 thg 7, 2026 2

Kỹ thuật viết lại truy vấn để planner dùng được index và giảm dữ liệu quét: predicate sargable, tránh hàm trên cột, EXISTS vs IN, join vs subquery, phân trang keyset thay OFFSET, tránh SELECT *, và diệt N+1.

13 thg 7, 2026 2

Nhìn vào đâu để biết CSDL đang 'ốm': pg_stat_statements tìm truy vấn tốn nhất, pg_stat_activity xem phiên đang chạy, wait events, khóa & deadlock (pg_locks), idle-in-transaction, cache hit ratio, và bloat bảng/chỉ mục.

13 thg 7, 2026 2

Công việc DBA giữ CSDL khoẻ: MVCC & VACUUM/autovacuum chống bloat, ANALYZE cập nhật thống kê, reindex, các tham số bộ nhớ then chốt (shared_buffers, work_mem, effective_cache_size), connection pooling (PgBouncer), checkpoint/WAL và backup/PITR.

13 thg 7, 2026 2

Nhân bản dữ liệu để chịu tải và chịu lỗi: streaming replication dựa trên WAL (physical) vs logical replication (publication/subscription), đồng bộ vs bất đồng bộ, replication lag, và các mô hình HA/failover (Patroni, replication slot, quorum).

13 thg 7, 2026 2

Mở rộng khả năng đọc bằng cách dồn ghi về primary và phân tán đọc sang các replica: cách định tuyến (tầng ứng dụng vs proxy như PgBouncer/HAProxy/Pgpool), xử lý replication lag & read-your-writes, và khi nào buộc đọc từ primary.

13 thg 7, 2026 2

Khi một máy không đủ: table partitioning (range/list/hash) và partition pruning để quản lý bảng khổng lồ, sharding để scale ghi, so sánh scale-up vs scale-out, và cách ghép replica + partition + sharding thành kiến trúc dữ liệu chịu tải.

13 thg 7, 2026 2