Replica đọc PostgreSQL cho báo cáo: giữ bảng điều khiển luôn nhanh
Dùng replica đọc của PostgreSQL cho báo cáo để giữ bảng điều khiển nhanh, đồng thời bảo vệ cơ sở dữ liệu chính khỏi truy vấn chậm, đột biến tải và áp lực khóa.

Tại sao báo cáo có thể làm chậm cơ sở dữ liệu chính của bạn
Một mô hình phổ biến trông như thế này: ứng dụng chạy mượt phần lớn thời gian, rồi ai đó mở một dashboard và đột nhiên chức năng thanh toán, đăng nhập, hoặc công cụ hỗ trợ bắt đầu chậm lại. Không có gì “sập”, nhưng mọi thứ đều chậm hơn. Thông thường đó là vì cơ sở dữ liệu chính đang bị kéo theo hai hướng cùng lúc.
Giao dịch (công việc hàng ngày của ứng dụng) thường ngắn và chọn lọc. Chúng đọc hoặc cập nhật một số hàng nhỏ, dùng index và kết thúc nhanh để các yêu cầu khác có thể tiếp tục. Truy vấn báo cáo thì khác: chúng thường quét nhiều dữ liệu, join nhiều bảng, sắp xếp và group kết quả, và tính tổng theo ngày hoặc tháng. Ngay cả khi không trực tiếp chặn ghi, chúng vẫn có thể ăn chung tài nguyên mà ứng dụng cần.
Đây là những cách phổ biến mà dashboard làm hại một cơ sở dữ liệu OLTP:
- Lượng đọc lớn cạnh tranh CPU, bộ nhớ và I/O đĩa
- Các quét lớn đẩy các trang “nóng” ra khỏi cache, khiến truy vấn bình thường chậm hơn
- Các phép sắp xếp lớn và GROUP BY tràn ra đĩa và tạo ra đợt tải cao
- Truy vấn chạy lâu làm tăng cạnh tranh và kéo dài các đột biến
- Các bộ lọc ad hoc (khoảng ngày, phân đoạn) khiến tải không thể dự đoán
Một read replica là một máy chủ PostgreSQL riêng sao chép liên tục dữ liệu từ server chính và có thể phục vụ các truy vấn chỉ đọc. Sử dụng replica PostgreSQL cho báo cáo cho phép các dashboard chạy công việc nặng ở nơi khác, để primary có thể tập trung vào các giao dịch nhanh.
Kỳ vọng cần đặt sớm: replica giúp đọc, không giúp ghi. Bạn không thể an toàn gửi INSERT/UPDATE tới một replica tiêu chuẩn, và kết quả có thể chậm hơn primary một chút vì việc sao chép tốn thời gian. Với nhiều dashboard, đó là một đánh đổi hợp lý: số liệu hơi kém “tươi” đổi lại hiệu năng ứng dụng ổn định.
Nếu bạn xây dựng dashboard nội bộ (ví dụ trong AppMaster), sự tách này thường phù hợp: ứng dụng tiếp tục ghi vào primary, trong khi màn hình báo cáo truy vấn replica.
Read replica hoạt động trong PostgreSQL như thế nào (ngôn ngữ thường)
Một read replica PostgreSQL là một server cơ sở dữ liệu thứ hai giữ bản sao gần như thời gian thực của cơ sở dữ liệu chính. Primary xử lý ghi (INSERT, UPDATE, DELETE). Replica chủ yếu phục vụ đọc (SELECT), vì vậy truy vấn báo cáo không cạnh tranh với giao dịch hàng ngày.
Primary vs replica trong một phút
Hãy tưởng tượng primary như thu ngân ở một cửa hàng bận rộn: nó phải luôn phản hồi vì mỗi giao dịch cập nhật tồn kho, thanh toán và đơn hàng. Replica giống màn hình hiển thị tổng quan và xu hướng. Nó quan sát những gì thu ngân làm và cập nhật biểu diễn của mình ngay sau đó.
Bên trong, PostgreSQL sao chép thay đổi bằng cách gửi một luồng những gì đã thay đổi từ primary và phát lại trên replica. Điều đó có nghĩa là replica sẽ có cùng cấu trúc và dữ liệu, chỉ hơi trễ hơn.
Về thực tế, sao chép bao gồm:
- Dữ liệu bảng (các hàng)
- Thay đổi index (để truy vấn có thể dùng cùng index)
- Thay đổi schema (như cột mới, bảng mới và nhiều loại migration)
- Hầu hết các thay đổi cơ sở dữ liệu xảy ra qua SQL bình thường
Những gì replica không giải quyết: nó không làm cho các thao tác ghi nặng rẻ đi, và không sửa một truy vấn chậm do schema xấu hoặc thiếu index. Nếu truy vấn dashboard quét một bảng lớn trên replica, nó vẫn có thể chậm. Chỉ khác là nó sẽ không làm chậm chức năng thanh toán cùng lúc.
Đó là lý do read replica PostgreSQL cho báo cáo phổ biến: chúng tách công việc OLTP (giao dịch nhanh, thường xuyên) ra khỏi công việc kiểu OLAP (đọc dài hơn, group và tổng hợp). Nếu bạn xây dashboard nội bộ hoặc bảng quản trị (ví dụ trong AppMaster), trỏ các trang báo cáo tới replica thường là cách đơn giản để cả hai phía hoạt động tốt.
Những khối công việc báo cáo thường nên chạy trên replica
Nguyên tắc tốt: nếu một truy vấn chủ yếu đọc nhiều dữ liệu để tổng hợp, thì nó là ứng viên mạnh để chạy trên replica. Với replica PostgreSQL cho báo cáo, bạn bảo vệ các luồng thanh toán, đăng nhập và các tác vụ giao dịch khác khỏi công việc nặng mà dashboard thường yêu cầu.
Mẫu dashboard phổ biến nhất là phạm vi ngày rộng kèm vài bộ lọc. “90 ngày qua theo vùng, sản phẩm, kênh” có thể chạm tới hàng triệu hàng, ngay cả khi biểu đồ cuối cùng chỉ hiển thị 12 cột. Những quét này có thể cạnh tranh với primary về đọc đĩa và không gian cache.
Các workload phù hợp trên replica
Hầu hết đội ngũ bắt đầu chuyển các mục này sang cơ sở dữ liệu báo cáo:
- Join lớn giữa nhiều bảng (orders + items + customers + refunds)
- Tổng hợp như SUM, COUNT DISTINCT, tính phần trăm, cohort
- Truy vấn chạy lâu sắp xếp và group tập kết quả lớn
- Báo cáo định kỳ chạy mỗi giờ/ngày lặp lại cùng công việc nặng
- Phiên BI khám phá nơi người dùng click nhiều và chạy lại các biến thể
Ngay cả khi một truy vấn là “chỉ đọc”, nó vẫn có thể tiêu thụ CPU, bộ nhớ và I/O. Các GROUP BY lớn có thể đẩy truy vấn khác ra khỏi bộ nhớ. Các quét lặp lại có thể làm xáo trộn buffer cache, khiến primary phải đọc từ đĩa thường xuyên hơn.
Hành vi kết nối cũng quan trọng. Nhiều công cụ BI mở nhiều kết nối cho mỗi người dùng, refresh các ô vài phút một lần và chạy extract nền. Điều đó có thể tạo ra đột biến kết nối và truy vấn đồng thời. Replica cho phép những đột biến đó có chỗ rơi an toàn hơn.
Một ví dụ đơn giản: dashboard vận hành của bạn tải vào 9:00 sáng và 50 người mở cùng lúc. Mỗi trang kích hoạt vài widget, và mỗi widget chạy một truy vấn với bộ lọc khác nhau. Trên primary, đợt này có thể làm chậm tạo đơn. Trên replica, dashboard có thể chậm hơn hoặc hơi trễ, nhưng giao dịch vẫn nhanh.
Nếu bạn xây dashboard nội bộ trong nền tảng như AppMaster, trỏ màn hình báo cáo tới kết nối replica thường là chiến thắng dễ dàng, miễn là mọi người hiểu dữ liệu có thể trễ vài giây (hoặc vài phút).
Đổi lấy: độ tươi so với tốc độ (độ trễ sao chép)
Replica giúp dashboard nhanh vì nó lấy các truy vấn báo cáo ra khỏi primary. Chi phí là replica thường trễ một chút. Khoảng trễ này gọi là replication lag, và đó là đánh đổi chính khi dùng read replica PostgreSQL cho báo cáo.
Người dùng sẽ nhận thấy: số liệu “hôm nay” thấp hơn một chút, đơn hàng mới nhất còn thiếu, hoặc biểu đồ cập nhật chậm vài phút. Hầu hết mọi người không quan tâm nếu xu hướng tuần thấp hơn 2 phút, nhưng họ sẽ quan tâm nếu trang “thanh toán vừa thành công” sai.
Lag xảy ra khi primary tạo thay đổi nhanh hơn replica nhận và phát lại. Nguyên nhân phổ biến gồm đợt ghi lớn (flash sale, import), băng thông mạng hạn chế, ổ đĩa replica chậm, hoặc truy vấn dài chiếm CPU và I/O khi replica đang cố áp dụng thay đổi.
Cách thực tế để chọn độ trễ chấp nhận được là khớp nó với quyết định mà dashboard hỗ trợ:
- Dashboard KPI điều hành: vài giây đến vài phút thường chấp nhận được.
- Hàng đợi vận hành (giao hàng, hỗ trợ): hướng tới gần thời gian thực, thường là vài giây.
- Kết toán tài chính hoặc kiểm toán: chạy trên snapshot có kiểm soát, không “live”.
- “Đơn hàng gần đây của tôi” cho khách: cần gần thời gian thực, hoặc dùng primary.
Quy tắc đơn giản: nếu báo cáo phải bao gồm giao dịch vừa commit mới nhất, nó phải đọc từ primary (hoặc hệ thống thiết kế cho độ tươi đảm bảo). Ví dụ điển hình: kiểm tra tồn kho khi thanh toán, kiểm tra gian lận, và bất cứ điều gì kích hoạt hành động ngay lập tức.
Ví dụ: dashboard của đội bán hàng có thể an toàn đọc từ replica và refresh mỗi phút. Nhưng trang “xác nhận đơn hàng” nên đọc từ primary, vì hiển thị “không tìm thấy đơn” cho đơn vừa đặt là mời gọi ticket hỗ trợ.
Nếu app hoặc công cụ no-code của bạn cho phép chọn kết nối cơ sở dữ liệu (ví dụ, trỏ các màn hình chỉ đọc tới replica trong AppMaster), bạn có thể áp dụng tách này mà không thay đổi cách nhóm của bạn xây UI.
Các bước: thiết lập read replica cho dashboard
Thiết lập replica cho dashboard chủ yếu là đưa ra vài quyết định rõ ràng ban đầu, rồi giữ lưu lượng báo cáo tránh xa cơ sở dữ liệu chính.
1) Chọn topology phù hợp
Bắt đầu với topology. Một replica thường đủ cho một công cụ BI và vài dashboard. Nhiều replica hữu ích khi bạn có nhiều nhà phân tích hoặc nhiều công cụ truy cập dữ liệu cả ngày. Nếu người dùng ở xa vùng chính, replica vùng có thể giảm độ trễ cho dashboard, nhưng nó cũng thêm nhiều nơi cần giám sát.
Tiếp theo, chọn synchronous hay asynchronous replication. Synchronous cho độ tươi tốt nhất nhưng có thể làm chậm ghi, điều này làm mất mục tiêu cho nhiều đội. Asynchronous là lựa chọn thường thấy cho dashboard, miễn là mọi người chấp nhận dữ liệu có thể trễ.
2) Xây replica như một server báo cáo
Replica không phải bản sao rẻ tiền của production. Truy vấn báo cáo thường cần nhiều CPU hơn, nhiều RAM hơn cho sorting, và đĩa nhanh cho các quét.
Dưới đây là luồng cài đặt thực tế cho replica PostgreSQL dùng cho báo cáo:
- Quyết định cần bao nhiêu replica và đặt ở đâu (cùng region hay gần người dùng hơn).
- Chọn async vs sync dựa trên độ trễ dashboard có thể chấp nhận.
- Cấp tài nguyên cho công việc đọc nặng (CPU, RAM, IOPS đĩa thường quan trọng hơn dung lượng lưu trữ).
- Tạo credential chỉ đọc riêng cho người dùng và công cụ báo cáo.
- Chuyển hướng truy vấn dashboard tới replica (cấu hình app, công cụ BI, hoặc dịch vụ báo cáo nhỏ để dùng kết nối replica).
Sau khi chuyển hướng, xác thực bằng bài kiểm tra đơn giản: chạy một truy vấn dashboard nặng đã biết và xác nhận rằng nó không còn xuất hiện trong hoạt động của primary.
Nếu bạn xây ứng dụng với AppMaster, điều này thường có nghĩa là định nghĩa một kết nối cơ sở dữ liệu riêng cho báo cáo và chỉ dùng nó cho endpoint dashboard, để checkout và các luồng giao dịch khác giữ con đường nhanh riêng.
Kiểm soát truy cập và an toàn cho người dùng báo cáo
Replica rất tốt cho dashboard, nhưng vẫn cần các biện pháp bảo vệ. Xử lý nó như một tài nguyên chia sẻ: cấp cho công cụ báo cáo vừa đủ quyền để làm việc, và giới hạn mức độ hại mà một truy vấn xấu có thể gây ra.
Bắt đầu với một user cơ sở dữ liệu riêng cho báo cáo. Tránh dùng lại credential chính của ứng dụng, ngay cả khi bạn trỏ tới replica. Điều này giúp dễ kiểm toán hoạt động, đổi mật khẩu và giữ quyền hạn chặt.
Cách tiếp cận đơn giản phù hợp cho hầu hết đội:
-- Create a dedicated login
CREATE ROLE report_user LOGIN PASSWORD '...';
-- Allow read-only access to a schema
GRANT CONNECT ON DATABASE yourdb TO report_user;
GRANT USAGE ON SCHEMA public TO report_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO report_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO report_user;
-- Put safety limits on the role
ALTER ROLE report_user SET statement_timeout = '30s';
ALTER ROLE report_user SET idle_in_transaction_session_timeout = '15s';
Tiếp theo, kiểm soát “bão” kết nối. Dashboard và công cụ BI thích mở nhiều kết nối, đặc biệt khi nhiều widget làm mới cùng lúc. Giới hạn kết nối báo cáo ở cấp database và pooler, và giữ chúng tách biệt khỏi lưu lượng giao dịch.
Danh sách kiểm tra thực tế:
- Dùng user chỉ đọc (không INSERT/UPDATE/DELETE, không thay đổi schema).
- Đặt timeout cho role để giới hạn truy vấn lâu và session idle.
- Giới hạn max connections cho user báo cáo ở mức an toàn.
- Hạn chế truy cập chỉ tới schema và bảng mà dashboard cần.
- Ẩn hoặc loại trừ cột nhạy cảm (PII, secret, token) khỏi các view báo cáo.
Nếu cần hiển thị dữ liệu khách hàng một phần, đừng tin tưởng vào “mọi người sẽ cẩn thận”. Tạo view báo cáo che hoặc hash các trường nhạy cảm, hoặc duy trì một schema báo cáo được tuyển chọn. Khi đội xây dashboard với AppMaster, dùng chuỗi kết nối replica và user báo cáo để app sinh ra đọc một cách an toàn mà không chạm tới quyền ghi production.
Những kiểm soát này giữ cho replica PostgreSQL cho báo cáo nhanh, dễ dự đoán và khó bị lạm dụng.
Giám sát để tránh bất ngờ trên dashboard
Replica chỉ giúp khi nó hoạt động dự đoán được. Hai điều thường khiến đội bất ngờ là lag sao chép âm thầm (dashboard trông “sai”) và đột biến tài nguyên trên replica (dashboard chậm). Giám sát nên bắt cả hai trước khi người dùng phát hiện.
Bắt đầu bằng đo lag và thống nhất thế nào là “đủ tươi” cho doanh nghiệp. Với nhiều dashboard báo cáo, 30 đến 120 giây là ổn. Với các báo cáo khác (tồn kho hay gian lận), ngay cả 5 giây cũng có thể quá nhiều. Dù bạn chọn gì, hãy biến nó thành số liệu hiển thị và cảnh báo khi vượt ngưỡng.
Đây là các tín hiệu thực tế nên theo dõi cho replica PostgreSQL dùng cho báo cáo:
- Độ trễ sao chép (thời gian và byte). Cảnh báo khi vượt ngưỡng trong vài phút, không chỉ một nhát spike.
- Sức khỏe replica: CPU, áp lực bộ nhớ và đọc đĩa trong giờ cao điểm báo cáo.
- Bão kết nối trên replica (quá nhiều session dashboard có thể trông như “db chậm”).
- Truy vấn chậm trên replica, dùng chính số liệu và log của replica (đừng giả định primary nói hết).
- Autovacuum và bloat trên replica. Đọc có thể giảm hiệu năng khi bảng hoặc index bị bloat.
Theo dõi truy vấn chậm cần chú ý đặc biệt. Một chế độ lỗi phổ biến là dashboard chạy ổn trong thử nghiệm nhưng thành “lễ hội quét toàn bộ bảng” khi ra production. Đảm bảo replica có giám sát tương tự bạn dùng cho primary, bao gồm top queries theo tổng thời gian và theo thời gian trung bình.
Cuối cùng, quyết định trước hành vi ứng dụng khi replica không khả dụng hoặc trễ quá nhiều. Chọn một hành vi và triển khai nhất quán:
- Hiển thị banner “dữ liệu trễ” khi lag vượt ngưỡng.
- Tạm thời vô hiệu hóa các biểu đồ nặng nhất và giữ các tóm tắt nhẹ.
- Dự phòng về cache cho một cửa sổ cố định (ví dụ 15 phút gần nhất).
- Trỏ các đọc quan trọng trở lại primary chỉ cho một số màn hình nhất định.
- Đặt dashboard ở chế độ bảo trì chỉ đọc cho tới khi replica hồi phục.
Nếu bạn xây dashboard nội bộ trong AppMaster, coi replica như nguồn dữ liệu riêng: giám sát riêng, và thiết kế dashboard giảm dần khéo léo khi độ tươi hoặc hiệu năng giảm.
Sai lầm và cạm bẫy thường gặp
Replica giúp, nhưng không phải nút bấm ma thuật để “làm báo cáo miễn phí”. Hầu hết vấn đề replica tới từ việc coi nó như kho phân tích không giới hạn, rồi ngạc nhiên khi dashboard chậm hoặc sai.
Một điều dễ quên: replica cũng có thể quá tải. Một vài quét bảng rộng, join nặng hoặc export “SELECT *” có thể đẩy CPU và đĩa tới giới hạn và gây timeout. Nếu replica đứng trên phần cứng nhỏ hơn primary (thường để tiết kiệm tiền), chậm sẽ xuất hiện sớm hơn.
Những cạm bẫy gây đau đầu nhất:
- Chuyển các màn hình thời gian thực quan trọng sang replica. Nếu dashboard dùng để xác nhận thanh toán vừa hoàn tất hoặc hiển thị tồn kho live, replication lag có thể làm dữ liệu thiếu.
- Để công cụ BI mở quá nhiều kết nối. Một số công cụ refresh nhiều ô cùng lúc, và mỗi ô có thể mở session riêng. Đột biến kết nối có thể quật ngã replica ngay cả khi mỗi truy vấn có vẻ “nhỏ”.
- Giả định index là đủ. Index không sửa truy vấn kéo hàng triệu hàng, group sai khóa, hoặc join không giới hạn. Hình dáng truy vấn và khối lượng dữ liệu quan trọng hơn một index thêm vào.
- Quên rằng “chạy nhanh một lần” không phải “luôn nhanh”. Truy vấn chạy tốt sáng nay có thể chậm dần khi dữ liệu tăng lên, hoặc khi nhiều người làm mới cùng lúc.
- Không lên kế hoạch cho hành vi khi failover. Trong quá trình failover, replica có thể được promote hay thay thế, và client có thể gặp lỗi read-only hoặc endpoint lỗi thời nếu bạn không lên kế hoạch chuyển đổi.
Ví dụ thực tế: công cụ BI refresh trang “đơn hôm nay” mỗi phút. Nếu nó chạy 5 truy vấn nặng mỗi lần refresh và 20 người mở trang, đó là 100 đợt truy vấn nặng mỗi phút. Primary có thể an toàn, nhưng replica vẫn có thể gục.
Nếu bạn xây dashboard nội bộ với nền tảng như AppMaster, xử lý cơ sở dữ liệu báo cáo như mục tiêu riêng với giới hạn kết nối và quy tắc “độ tươi cần thiết”, để người dùng không vô tình phụ thuộc vào dữ liệu trễ.
Các mẫu thiết kế giúp báo cáo nhanh hơn trên replica
Replica cho bạn không gian thở, nhưng không tự động làm mọi dashboard nhanh. Kết quả tốt nhất đến khi bạn gia công truy vấn báo cáo để chúng làm ít việc hơn, theo cách dự đoán được. Những mẫu này phù hợp với replica PostgreSQL cho báo cáo vì giảm quét nặng và tổng hợp lặp lại.
Tách “lớp báo cáo” ra
Xem xét một schema báo cáo riêng (ví dụ reporting) chứa view ổn định và bảng trợ giúp. Điều này ngăn công cụ BI và dashboard chạm trực tiếp vào bảng giao dịch thô, và cho bạn một nơi duy nhất để tối ưu. Một view báo cáo tốt cũng che các join phức tạp để truy vấn dashboard đơn giản hơn.
Tổng hợp trước các phép toán tốn kém
Nếu một dashboard tính lại cùng tổng cả ngày, cả ngày dài, thì đừng tính từ đầu mỗi lần tải trang. Xây bảng tổng hợp hoặc materialized view lưu sẵn những số đã group.
Các lựa chọn phổ biến:
- Rollup theo ngày hoặc giờ (theo ngày, vùng, kênh)
- Bảng snapshot “last known” (tồn kho, số dư tài khoản)
- Bảng Top-N (sản phẩm hàng đầu, khách hàng hàng đầu)
- Bảng fact với cột denormalized để lọc nhanh hơn
Làm mới các chỉ số nặng theo lịch
Làm mới các tổng hợp trước bằng job theo lịch, tốt nhất là ngoài giờ cao điểm. Nếu doanh nghiệp chịu được “cập nhật mỗi 5 phút”, bạn đổi độ tươi lấy dashboard nhanh hơn đáng kể. Với dataset rất lớn, cập nhật tăng dần (chỉ hàng mới kể từ lần chạy trước) thường rẻ hơn full refresh.
Cache những gì người dùng click nhiều
Nếu cùng widget được yêu cầu lặp lại, cache kết quả ở tầng ứng dụng trong thời gian ngắn (30–120 giây thường là đủ). Ví dụ, ô “Doanh thu hôm nay” có thể cache theo công ty hoặc cửa hàng. Trong các công cụ như AppMaster, cache này dễ thêm quanh endpoint API cấp dữ liệu cho dashboard.
Quy tắc đơn giản: nếu một truy vấn chậm và phổ biến, hãy tổng hợp trước nó, cache nó, hoặc cả hai.
Ví dụ thực tế: báo cáo bán hàng mà không làm chậm checkout
Hãy tưởng tượng một app thương mại điện tử nhỏ. DB chính xử lý đăng nhập, giỏ hàng, thanh toán và cập nhật đơn cả ngày. Đồng thời, đội muốn một dashboard hiển thị doanh thu theo giờ, sản phẩm hàng đầu và hoàn tiền.
Trước khi thay đổi, dashboard chạy truy vấn nặng trên primary. Gần cuối tháng, ai đó mở biểu đồ “30 ngày qua theo sản phẩm” và quét một phần lớn bảng orders. Checkout bắt đầu chậm vì truy vấn báo cáo cạnh tranh CPU, bộ nhớ và I/O đĩa.
Cách khắc phục đơn giản: chuyển đọc dashboard sang replica. Với replica PostgreSQL cho báo cáo, primary tiếp tục ghi nhanh, trong khi replica trả lời các truy vấn dài. Dashboard trỏ tới chuỗi kết nối replica, không phải primary.
Đội cũng đặt quy tắc độ tươi rõ ràng để không ai mong đợi số liệu hoàn hảo theo từng giây:
- Hiển thị “Dữ liệu cập nhật X phút trước” trên dashboard
- Cho phép tối đa 5 phút trễ trong giờ bình thường
- Nếu lag vượt 10 phút, chuyển dashboard sang “chế độ trễ” và tạm dừng các biểu đồ nặng nhất
- Giữ checkout và cập nhật đơn luôn trên primary
Sau thay đổi, kết quả rõ rệt. Checkout ổn định ngay cả khi có đợt báo cáo, và biểu đồ tải nhanh hơn vì chúng không còn tranh tài nguyên với giao dịch.
Những gì người dùng cần biết rõ: dashboard là “gần thời gian thực”, không phải nguồn sự thật cho 10 giây gần nhất. Nếu ai đó cần tổng chính xác để đối chiếu, họ nên chạy export theo lịch hoặc báo cáo cuối ngày.
Nếu bạn xây app bằng nền tảng như AppMaster, coi báo cáo như kết nối chỉ đọc riêng ngay từ đầu để luồng giao dịch luôn dự đoán được.
Kiểm tra nhanh và bước tiếp theo
Trước khi trỏ dashboard tới replica, thực hiện vài kiểm tra đơn giản. Một vài cấu hình và thói quen nhỏ ngăn hầu hết bất ngờ: số liệu cũ, timeout và viết nhầm.
Danh sách kiểm tra nhanh trước khi gửi traffic tới replica:
- Đảm bảo kết nối báo cáo chỉ đọc (dùng user riêng và ép transaction chỉ đọc).
- Tách báo cáo khỏi lưu lượng app (pool kết nối riêng và giới hạn hợp lý).
- Xác nhận replica có index mà dashboard cần (replica sao chép index, nhưng kiểm tra để không thiếu thay đổi gần đây).
- Đặt statement và lock timeout cho truy vấn báo cáo để một chart xấu không treo mọi thứ.
- Kiểm tra rằng biểu đồ chấp nhận độ trễ nhỏ (hiển thị timestamp “as of” hoặc làm tròn theo phút khi cần).
Khi traffic chảy, coi giám sát như thói quen nhẹ hàng tuần, không phải cuộc chiến chữa cháy. Điều này đặc biệt đúng với replica PostgreSQL cho báo cáo, nơi “hôm qua chạy được” có thể đổi nhanh khi dữ liệu tăng.
Danh sách kiểm tra hàng tuần (10 phút):
- Replication lag: theo dõi lag điển hình và các spike tồi tệ nhất trong giờ cao điểm.
- Truy vấn chậm: theo dõi kẻ lỗi hàng đầu theo tổng thời gian, không chỉ các chạy chậm lẻ tẻ.
- Kết nối: kiểm tra max connections, bão pool và các session idle tích tụ.
- Đĩa và CPU: replica có thể nghẽn ở lưu trữ khi quét nặng.
- Truy vấn thất bại: tìm timeout, statement bị hủy, hoặc lỗi quyền.
Bước tiếp theo chủ yếu về quy tắc định tuyến và kế hoạch dự phòng. Quyết định endpoint nào luôn an toàn đọc từ replica (dashboard, export, báo cáo admin), và endpoint nào phải ở primary (bất cứ thứ gì cần cập nhật ngay). Định nghĩa hành động khi lag vượt giới hạn: hiển thị cảnh báo, chuyển một số trang đọc về primary, hoặc tạm vô hiệu các biểu đồ nặng.
Nếu bạn xây dashboard hoặc công cụ admin, AppMaster có thể là cách thực tế để triển khai nhanh trong khi trỏ màn hình báo cáo tới replica để luồng giao dịch lõi tiếp tục chạy mượt.


