PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để tối ưu hóa PostgreSQL Logical Replication

Logical Replication hay Pglogical là một cơ chế sao chép cấp độ bảng, dựa trên WAL để sao chép dữ liệu của các Bảng cụ thể giữa hai phiên bản PostgreSQL. Dường như có sự nhầm lẫn giữa "pglogical" và "Logical Replication". Cả hai đều cung cấp cùng một loại cơ chế sao chép với một số khác biệt về tính năng và khả năng. Logical Replication được giới thiệu trong PostgreSQL-10 như một tính năng được tích hợp sẵn không giống như pglogical là một phần mở rộng. “Pglogical” với sự phát triển liên tục đang diễn ra, vẫn là lựa chọn duy nhất để triển khai Logical Replication cho những môi trường sử dụng các phiên bản PostgreSQL trước 10. Cuối cùng, tất cả các tính năng của pglogical sẽ là một phần của Logical Replication. Nói cách khác, pglogical (phần mở rộng) đã trở thành Logical Replication (tính năng tích hợp sẵn). Ưu điểm cơ bản của Logical Replication là nó không cần cài đặt / tạo bất kỳ tiện ích mở rộng nào, điều này có lợi cho những môi trường mà việc cài đặt tiện ích mở rộng trong đó bị hạn chế.

Blog này sẽ tập trung vào việc tối ưu hóa Logical Replication. Điều đó có nghĩa là, các mẹo và kỹ thuật tối ưu hóa được nêu bật trong blog này sẽ áp dụng cho cả Nhân bản theo phương pháp luận và lôgic.

Logical Replication là một bản sao dựa trên WAL là bản sao đầu tiên thuộc loại này. Là một DBA, đây sẽ là cơ chế sao chép hiệu quả và đáng tin cậy hơn nhiều khi so sánh với các giải pháp sao chép dựa trên trình kích hoạt khác. Những thay đổi được thực hiện đối với các bảng trong phần sao chép pglogical được sao chép trong thời gian thực thông qua các bản ghi WAL, điều này làm cho nó có hiệu quả cao và không phức tạp. Tất cả các cơ chế sao chép khác trên thị trường đều dựa trên cơ sở kích hoạt có thể đặt ra những thách thức về hiệu suất và bảo trì. Với tính năng Logical Replication sắp ra mắt, sự phụ thuộc vào việc sao chép dựa trên trình kích hoạt gần như không còn.

Có những blog khác giải thích cách cấu hình Logical Replication khá chi tiết.

Trong blog này, trọng tâm sẽ là cách tối ưu hóa tính năng sao chép lôgic.

Tối ưu hóa tính sao chép lôgic

Để bắt đầu, hành vi của “Logical Replication” khá giống với “Streaming Replication”, điểm khác biệt duy nhất là tính năng streaming replication tái tạo cơ sở dữ liệu hoàn chỉnh trong khi Logical Replication chỉ sao chép các bảng riêng lẻ. Khi chọn các bảng riêng lẻ cụ thể để tái tạo, có những yếu tố / thách thức cần được nhìn thấy trước.

Hãy để chúng tôi xem xét các yếu tố ảnh hưởng đến sự tái tạo lôgic.

Các yếu tố ảnh hưởng đến hiệu suất sao chép lôgic

Tối ưu hóa tính sao chép lôgic là quan trọng để đảm bảo dữ liệu được sao chép liền mạch mà không có bất kỳ gián đoạn nào. Có những yếu tố cần thấy trước trước khi thiết lập nó. Hãy để chúng tôi xem xét chúng:

  • Loại dữ liệu được lưu trữ trong Bảng sẽ được sao chép
  • Các bảng hoạt động theo giao dịch như thế nào (một phần của quá trình sao chép)
  • Khả năng cơ sở hạ tầng phải được nhìn thấy trước
  • Cấu hình thông số phải được thực hiện một cách tối ưu

Tất cả các yếu tố trên ảnh hưởng đến Logical Replication ở một mức độ lớn hơn. Hãy để chúng tôi xem xét chúng một cách chi tiết.

Các kiểu dữ liệu sao chép lôgic của PostgreSQL

Hiểu loại dữ liệu được lưu trữ trong bảng là quan trọng. Nếu phần bảng của bản sao lưu trữ các đối tượng Văn bản lớn hoặc Nhị phân và gặp phải số lượng giao dịch cao, thì quá trình sao chép có thể chậm lại do sử dụng nhiều tài nguyên cơ sở hạ tầng. Năng lực của cơ sở hạ tầng phải đủ để xử lý việc sao chép dữ liệu kích thước lớn và phức tạp như vậy.

Cách các Bảng Hoạt động được Giao dịch là Một phần của Quá trình Nhân rộng

Khi sao chép các bảng hoạt động mang tính giao dịch cao, tính năng Sao chép có thể bị tụt hậu trong quá trình đồng bộ hóa do các vấn đề về hiệu suất I / O, bế tắc, v.v., cần phải được xem xét. Điều này có thể không làm cho môi trường cơ sở dữ liệu sản xuất trông lành mạnh hơn. Nếu số lượng bảng được sao chép nhiều và dữ liệu được sao chép sang nhiều trang web, thì có thể mức sử dụng CPU cao và số lượng CPU (hoặc lõi CPU) được yêu cầu nhiều hơn.

Năng lực cơ sở hạ tầng

Trước khi xem xét Logical Replication như một giải pháp, điều quan trọng là phải đảm bảo công suất Cơ sở hạ tầng của các máy chủ cơ sở dữ liệu là đủ. Nếu có một số lượng lớn các bảng đang được sao chép, thì phải có đủ CPU để thực hiện công việc sao chép.

Khi sao chép một số lượng lớn các bảng, hãy xem xét việc chia chúng thành các nhóm và sao chép song song. Một lần nữa, điều này sẽ cần nhiều CPU có sẵn để nhân rộng. Nếu dữ liệu thay đổi đối với các bảng đang được sao chép thường xuyên và cao, điều này cũng có thể ảnh hưởng đến hiệu suất sao chép.

Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thức

Tối ưu hóa các tham số để sao chép lôgic

Các thông số được định cấu hình cho chức năng Sao chép lôgic phải được điều chỉnh một cách tối ưu để đảm bảo sao chép không bị hỏng.

Trước tiên, chúng ta hãy xem các thông số cần thiết để định cấu hình nó:

wal_level=’logical’
max_wal_senders=10                     # greater than number of subscribers (or replicas)
max_replication_slots=10              # greater than number of subscribers (or replicas)
max_worker_processes=10           # greater than number of subscribers (or replicas)
max_logical_replication_workers  # greater than number of subscribers (or replicas)
max_sync_workers_per_subscription # depends on number of tables being replicated

Điều chỉnh max_wal_senders

max_wal_senders phải luôn lớn hơn số lượng bản sao. Nếu dữ liệu được sao chép sang nhiều trang web, thì nhiều max_wal_senders sẽ hoạt động. Vì vậy, điều quan trọng là phải đảm bảo thông số này được đặt thành một số tối ưu.

Điều chỉnh max_replication_slots

Nói chung, tất cả các thay đổi dữ liệu xảy ra trên bảng được ghi vào tệp WAL trong pg_xlog / pg_wal được gọi là bản ghi WAL. Quy trình người gửi Wal sẽ chọn các bản ghi WAL đó (thuộc về các bảng đang được sao chép) và gửi đến các bản sao và quy trình wal_receiver trên trang web sao chép sẽ áp dụng những thay đổi đó tại nút người đăng ký.

Các tệp WAL bị xóa khỏi vị trí pg_xlog / pg_wal bất cứ khi nào trạm kiểm soát xảy ra. Nếu các tệp WAL bị xóa ngay cả trước khi các thay đổi được áp dụng cho nút người đăng ký, thì quá trình sao chép sẽ bị hỏng và tụt hậu. Trong trường hợp nút người đăng ký bị trễ, một vị trí sao chép sẽ đảm bảo tất cả các tệp WAL cần thiết cho người đăng ký để đồng bộ hóa với nhà cung cấp được giữ lại. Bạn nên định cấu hình một vùng sao chép cho mỗi nút người đăng ký.

Điều chỉnh max_worker_processes

Điều quan trọng là phải cấu hình số lượng bộ xử lý worker tối ưu. Điều này phụ thuộc vào số lượng quy trình tối đa mà một máy chủ có thể có. Điều này chỉ có thể thực hiện được trong môi trường nhiều CPU. Max_worker_processes sẽ đảm bảo nhiều quy trình được tạo ra để hoàn thành công việc theo cách nhanh hơn bằng cách sử dụng nhiều lõi CPU. Khi sao chép dữ liệu bằng Logical Replication, tham số này có thể giúp tạo ra nhiều quy trình worker để sao chép dữ liệu nhanh hơn. Có một tham số cụ thể được gọi là max_logical_worker_processes sẽ đảm bảo nhiều quy trình được sử dụng để sao chép dữ liệu.

Điều chỉnh max_logical_worker_processes

Tham số này chỉ định số lượng quy trình công nhân lôgic tối đa cần thiết để thực hiện sao chép và đồng bộ hóa dữ liệu bảng. Giá trị này được lấy từ max_worker_processes phải cao hơn giá trị tham số này. Tham số này rất có lợi khi sao chép dữ liệu đến nhiều trang web trong môi trường nhiều CPU. Giá trị mặc định là 4. Giá trị tối đa phụ thuộc vào số lượng hệ thống quy trình công nhân hỗ trợ.

Điều chỉnh max_sync_workers_per_subscription

Tham số này chỉ định số lượng quy trình đồng bộ hóa tối đa được yêu cầu cho mỗi đăng ký. Quá trình đồng bộ hóa diễn ra trong quá trình đồng bộ hóa dữ liệu ban đầu và để đảm bảo điều đó xảy ra nhanh hơn, thông số này có thể được sử dụng. Hiện tại, chỉ có một quy trình đồng bộ hóa có thể được định cấu hình cho mỗi bảng có nghĩa là, nhiều bảng có thể được đồng bộ hóa ban đầu song song. Giá trị mặc định là 2. Giá trị này được chọn từ giá trị max_logical_worker_processes.

Đó là những tham số phải được điều chỉnh để đảm bảo Logical Replication hiệu quả và nhanh hơn. Các tham số khác cũng ảnh hưởng đến tính năng sao chép lôgic như sau.

wal_receiver_timeout, wal_receiver_status_interval and wal_retrieve_retry_interval.

Các tham số này không có bất kỳ ảnh hưởng nào đến nút trình cung cấp.

Kết luận

Sao chép các bảng cụ thể là một yêu cầu phổ biến phát sinh trong các hệ thống cơ sở dữ liệu lớn và phức tạp. Điều này có thể dành cho mục đích báo cáo kinh doanh hoặc Kho dữ liệu. Là một DBA, tôi tin rằng Logical Replication phục vụ rất nhiều cho các mục đích như vậy do nó dễ dàng thực hiện với ít phức tạp hơn. Việc cấu hình và điều chỉnh Logical Replication đòi hỏi phải lập kế hoạch, lưu trữ và thử nghiệm rất nhiều. Lượng dữ liệu đang được sao chép trong thời gian thực phải được đánh giá để đảm bảo có hệ thống sao chép hiệu quả và dường như ít hơn. Để kết luận, Cơ sở dữ liệu chạy trong PostgreSQL-10, Nhân bản lôgic là cách để đi và đối với những cơ sở dữ liệu chạy trong các phiên bản PostgreSQL <10, pglogical là tùy chọn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mảng Postgres 9.4 jsonb dưới dạng bảng

  2. Làm thế nào để làm mới các thực thể JPA khi cơ sở dữ liệu phụ trợ thay đổi không đồng bộ?

  3. Tiến trình nâng cấp trực tuyến

  4. java.lang.NoSuchFieldError:KHÔNG CÓ ở chế độ ngủ đông với Spring 3, maven, JPA, c3p0

  5. Làm cách nào để truyền một chuỗi thành số nguyên và có 0 trong trường hợp truyền lỗi với PostgreSQL?