Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

1741 bài viết · Website
Cơ sở dữ liệu 22/09/2026 8 phút

UPSERT trong PostgreSQL: ON CONFLICT làm chèn-hoặc-cập-nhật atomic, không dính race

INSERT ... ON CONFLICT gộp chèn và cập nhật vào một câu lệnh atomic — thay cho SELECT-rồi-ghi vừa chậm vừa dính race condition. Đo thật: UPSERT một câu nhanh 2,1 lần, mệnh đề WHERE xoá 50.000 dead tuple, và bẫy 'cannot affect row a second time'. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 6 phút

TRUNCATE vs DELETE trong PostgreSQL: nhanh hơn 34 lần, và những khác biệt dễ vấp

TRUNCATE vứt cả tệp dữ liệu nên gần như tức thời và trả chỗ ngay; DELETE quét từng dòng, để lại dead tuple và bảng không nhỏ lại. Đo thật: làm rỗng bảng 3 triệu dòng mất 678 ms với DELETE so với 20 ms với TRUNCATE. Cùng khác biệt về giao dịch, sequence và trigger. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 6 phút

Cần cảnh báo những gì trên PostgreSQL production: các chỉ số sống còn

Giám sát chỉ có ích khi cảnh báo đúng thứ, đúng lúc. Bài này đo thật trên một database các chỉ số cần đặt ngưỡng báo động: nguy cơ wraparound transaction ID (cảnh báo số một), kết nối gần cạn, giao dịch dài, replication lag, và cache hit ratio. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 5 phút

Tìm truy vấn chậm trong PostgreSQL: vì sao phải nhìn tổng thời gian, không phải mỗi lần

pg_stat_statements gom mọi lần chạy cùng dạng truy vấn. Bài này đo thật một nghịch lý: một point-lookup 0,008 mili giây chạy 427 nghìn lần chiếm 92,5 phần trăm tổng thời gian database, còn một full scan 94 mili giây chỉ chiếm 7,5 phần trăm — sắp theo mean sẽ đuổi nhầm thủ phạm. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 5 phút

Logical replication trong PostgreSQL: nhân bản theo bảng, không phải cả cụm

Logical replication dùng publisher/subscriber để nhân bản chọn lọc từng bảng, cho subscriber ghi được và chạy khác phiên bản. Bài này dựng thật lab sang sub_db: publish 2 trong 3 bảng, đo copy ban đầu, INSERT UPDATE DELETE nhân bản, và bảng không publish thì không sang. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 5 phút

pg_stat_activity trong PostgreSQL: nhìn database đang chạy gì và ai chặn ai

pg_stat_activity là cửa sổ nhìn vào mọi phiên đang kết nối: query nào đang chạy, phiên nào chờ khoá, idle-in-transaction nào đang giữ khoá. Bài này dựng thật ba phiên xung đột, dùng pg_blocking_pids tìm thủ phạm, rồi pg_terminate_backend giải phóng. PostgreSQL 16.