Hai tham số GUC mới trong PostgreSQL giúp theo dõi quá trình khởi động và phục hồi trên primary và standby. log_startup_progress_interval (thêm vào PG15, mặc định 10s) in ra tiến trình định kỳ khi đồng bộ thư mục dữ liệu, đặt lại quan hệ không ghi log và phát lại WAL sau crash, cho phép tính ETA; log_recovery_conflict_waits (thêm vào PG14, tắt mặc định) ghi log khi quá trình phát lại trên standby bị chờ do xung đột snapshot, khóa, buffer pin hoặc tablespace, đặc biệt khi max_standby_streaming_delay được đặt thành -1. Với log_startup_progress_interval người quản trị có thể nhìn thấy tiến trình thực tế thay vì khởi động lại và làm aggravate sự cố; với log_recovery_conflict_waits người dùng phát hiện sớm các tình trạng standby bị trễ vô hạn và có thể điều chỉnh truy vấn hoặc cấu hình để tránh mất dữ liệu. Khi phân tích log cần kết hợp với pg_stat_replication và pg_stat_activity để liên hệ thời gian chờ với các truy vấn đang chạy, và giữ log_startup_progress_interval ở mức mặc định, bật log_recovery_conflict_waits, đồng thời giữ deadlock_timeout ở 1 giây để cân bằng giữa việc phát hiện deadlock và overhead.
Why read it: Bài viết cung cấp hướng dẫn kỹ thuật chi tiết về hai tham số quan trọng giúp giám sát tiến trình khởi động và xung đột phục hồi trong PostgreSQL.
Answer 3 short questions to earn reward points for this article. Only do it if you want the points.
3 questions · under a minute · optional
Source: https://postgr.es/p/9tY. 8 Sync News only summarizes and links out; content copyright belongs to the authors and original sources.
Đang tải bình luận…
Bài viết mô tả việc đội phát triển gặp vấn đề N+1 khi truy vấn danh sách đối tượng và quyết định áp dụng eager loading để giảm số lượng query. Sau khi bật eager loading, tổng số query giảm từ 801 xuống chỉ một câu SQL duy nhất. Tuy nhiên, câu query duy nhất này trả về lượng dữ liệu lớn hơn khả năng bộ nhớ của ứng dụng, khiến mức sử dụng RAM tăng lên gấp ba lần so với trước khi tối ưu. Kết quả là, mặc dù hiệu suất về số lượng query cải thiện, ứng dụng dễ gặp lỗi out‑of‑memory hoặc trễ do việc xử lý khối dữ liệu lớn. Bài học là khi tối ưu N+1 cần cân bằng giữa giảm query và kiểm soát lượng dữ liệu được tải, ví dụ qua việc chọn trường cụ thể, sử dụng pagination hoặc batch loading thay vì eager loading toàn bộ liên kết.
Bài viết này dạy bài học quý giá rằng tối ưu hóa database không lúc nào cũng tốt nếu không cân nhắc đến giới hạn tài nguyên hệ thống.
Trên instance GCP c4d-standard-4, tiến trình MySQL tiêu tốn 10.4 GB RAM dù innodb_buffer_pool_size chỉ được thiết lập là 7168 MB. Khoảng trống này được truy qua 4 lớp: dự kiến overhead từ InnoDB/Performance Schema/thread-buffer, khoảng ~9% mmap chunk padding trên buffer pool, sự tích tụ dirty pages của jemalloc trên DR replica không hoạt động, và nguyên nhân gốc - MALLOC_CONF không được thiết lập khiến decay của background_thread bị vô hiệu hóa. Các sửa chữa gồm giảm buffer pool thành bội số sạch (6144 MB), cắt giảm max_connections từ 3000 xuống 500, bật background_thread của jemalloc với decay 5 giây, và thêm swap để phòng OOM, giúp giảm RSS xuống còn ~7.9 GB. Bài viết cung cấp kiến thức sâu về quản lý memory của MySQL khi sử dụng jemalloc, cách tối ưu buffer pool size và thiết lập MALLOC_CONF phù hợp.
Lập trình viên cần đọc bài này để hiểu cách điều khiển và tối ưu hóa bộ nhớ InnoDB trên MySQL khi các tham số cơ bản như innodb_buffer_pool_size không đủ để giải quyết cảnh báo nhớ, khi hệ thống vẫn tiêu thụ nhiều bộ nhớ hơn dự kiến do các yếu tố như cấu hình bộ nhớ phân vùng, quá trình làm sạch nhớ của jemalloc, hoặc tình trạng replica hoạt động không hiệu quả.
Trong hệ thống version control như Git, các thay đổi schema tồn tại trong các file riêng biệt nên hiếm khi gây xung đột merge. Việc lưu trữ migration files trong Git không đồng nghĩa với việc quản lý chúng hiệu quả bởi Git không hiểu ngữ cảnh của các thay đổi database schema. Hệ quả là các migration files có thể trở nên lỗi thời hoặc gây khó khăn trong việc tracking changes thực tế. Lập trình viên nên cân nhắc sử dụng các công cụ chuyên dụng như Liquibase hoặc Flyway để quản lý schema thay vì phụ thuộc hoàn toàn vào Git tracking.
Lập trình viên nên đọc bài này để hiểu cách quản lý migration files trong Git để tránh hiểu lầm về việc các thay đổi schema được tự động hợp nhất.
PostgreSQL 19 ra mắt bản cập nhật chính thức và đi kèm với bốn view hệ thống mới. Những view này cho phép truy vấn trực tiếp về tình trạng khóa (lock contention), quá trình phục hồi (recovery state), mức độ ưu tiên của autovacuum và cách cấp phát bộ nhớ chia sẻ động (dynamic shared memory allocations). Trước đây, quản trị viên thường phải dựa trên các extension bên ngoài hoặc truy vấn các pg_catalog phức tạp để thu thập thông tin tương tự. Với các view mới, việc giám sát và chẩn đoán các vấn đề hiệu suất trở nên nhanh chóng và không cần cài đặt thêm thành phần. Điều này cho thấy việc cải thiện khả năng quan sát nội bộ của PostgreSQL có thể giảm thời gian debug và giúp tối ưu hoá cấu hình mà không cần phụ thuộc vào công cụ của bên thứ ba.
Bài viết này giúp lập trình viên dễ dàng kiểm tra các vấn đề về lock contention, trạng thái phục hồi, ưu tiên autovacuum và phân bổ bộ nhớ chia sẻ động trong PostgreSQL 19.
PostgreSQL mặc định bọc mỗi câu lệnh trong một giao dịch riêng khi không có BEGIN…COMMIT rõ ràng. Tuy nhiên, khi gửi nhiều câu lệnh trong một chuỗi truy vấn đơn (thông qua PQexec hoặc các hàm plpgsql) hoặc sử dụng các tiện ích như COPY và CREATE INDEX CONCURRENTLY, máy chủ sẽ ẩn ý tạo một giao dịch duy nhất bao gồm tất cả các câu lệnh đó. Điều này có thể dẫn đến việc giữ khóa lâu hơn, tiêu thụ ID giao dịch tăng nhanh và làm khó khăn việc rollback một phần công việc khi lỗi xảy ra. Do đó, lập trình viên cần kiểm tra xem ứng dụng của mình có vô tình nhóm nhiều câu lệnh vào một giao dịch ngầm không và cân nhắc sử dụng BEGIN…COMMIT cụ thể khi cần kiểm soát granularity. Theo dõi pg_stat_activity để phát hiện các giao dịch mở dài hạn cũng là biện pháp phòng ngừa tốt.
Bài này giúp lập trình viên hiểu rõ cách Postgres tự động tạo giao dịch nhiều câu lệnh, tránh lỗi và tối ưu hiệu năng.
Bối cảnh: bài viết mở rộng giới thiệu các tính năng mới của pgwatch v6.0.0 beta, tập trung vào việc cải tiến dashboard và cải thiện quá trình thu thập dữ liệu. Nguyên nhân kỹ thuật: thay đổi cách dashboard được xây dựng bằng React và tối ưu hoá luồng xử lý để giảm tải server. Hệ quả: dashboard hiển thị nhanh hơn và reaper không còn gặp lỗi choking khi xử lý dữ liệu lớn. Điều đáng học: việc sử dụng các thư viện UI hiện đại và tối ưu hoá truy vấn giúp tăng hiệu suất và độ ổn định. Bài viết khuyến khích cộng đồng tham gia đóng góp mã nguồn để hoàn thiện tính năng.
We need to output exactly one short Vietnamese sentence explaining why a programmer should read this. Must be correct Vietnamese, no markdown, no opening greeting. Must only use Vietnamese and Latin characters, no Chinese/Japanese/Korean/Han characters. Latin characters are allowed (i.e., English letters). Names of technical terms must remain Latin (e.g., pgwatch, dashboards, reaper). Must not include any non-Latin characters (i.e., no diacritics? Actually Vietnamese uses diacritics which are Latin letters with diacritics; those are still Latin characters? The instruction says "chỉ dùng chữ Việt và chữ Latin: tuyệt đối không có ký tự Hán/Trung/Nhật/Hàn trong câu trả lời". Vietnamese uses Latin alphabet with diac
LibreDB Studio là IDE SQL mã nguồn mở, tự host cho PostgreSQL chạy trên trình duyệt, triển khai dưới dạng container, Helm chart hoặc npm package. Công cụ hỗ trợ pooling connection, transaction rõ ràng, giám sát thông qua pg_stat_* và xác thực qua local account hoặc OIDC với kiểm soát quyền truy cập.
Lập trình viên phát triển ứng dụng PostgreSQL nên đọc để tìm hiểu cách tự host một IDE SQL trực tuyến, tối ưu hóa hiệu năng với cơ chế kết nối pooled và tự động rollback, đồng thời khám phá tính năng hỗ trợ quyền truy cập RBAC và hỗ trợ OIDC, giúp streamline quá trình phát triển và quản lý cơ sở dữ liệu.
Bài viết thực nghiệm trên PostgreSQL bằng cách tăng số kết nối từ 1 lên 400 để đo throughput và latency. Kết quả cho thấy throughput đạt đỉnh ở khoảng 48 kết nối, sau đó giảm 37% khi tăng lên 400 kết nối, đồng thời latency tăng gấp 13 lần. Nguyên nhân là sự cạnh tranh về tài nguyên bộ nhớ và luồng trong PostgreSQL khi số kết nối vượt quá khả năng xử lý của CPU và bộ nhớ đệm, gây ra hiện tượng thrashing và tăng thời gian chờ lock. Điều này dạy chúng ta nên đo lường đường cong hiệu suất và chọn kích thước connection pool phù hợp, thay vì đặt giá trị cao nhất có thể.
Bài viết này giúp lập trình viên hiểu cách tối ưu kích thước connection pool để đạt hiệu suất cao nhất.
Read the news here, practice coding, follow structured courses and train for IELTS on our sibling products — all connected through one 8 Sync account.
The ecosystem home: product overviews, blog and full pricing.
ExploreLearn along a clear roadmap: videos, auto-graded quizzes, certificates and mentors who ship for a living.
View the roadmap1,000+ DSA problems in Vietnamese, auto-graded across 7 languages — many FREE, right in your browser.
Practice for freeAI grading for all four IELTS skills with detailed rubric feedback.
Try it freeA 22 MB AI IDE for Vietnamese devs.
Download freeOrganizational memory for AI agents.
ExploreAI that staffs your Fanpage and qualifies leads for you.
Try it