PostgreSQL phàn nàn về bộ nhớ dùng chung, nhưng bộ nhớ dùng chung dường như vẫn ổn


13

Tôi đã thực hiện loại lược đồ chuyên sâu thả và tạo trên máy chủ PostgreSQL, nhưng bây giờ phàn nàn ..:

WARNING:  out of shared memory
ERROR:  out of shared memory
HINT:  You might need to increase max_locks_per_transaction.

Nhưng vấn đề vẫn còn nếu PostgreSQL mới được khởi động lại service postgresql restart, tôi nghi ngờ max_locks_per_transaction sẽ không điều chỉnh được gì.

Tôi hơi bị ghẻ lạnh vì danh sách khắc phục sự cố cho lỗi này không hoạt động với tôi.

THÔNG TIN THÊM 1409291350: Một số chi tiết bị thiếu nhưng tôi vẫn giữ kết quả SQL cốt lõi.

postgres=# SELECT version();
PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2,
 64-bit

Và:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty

2
Phiên bản PostgreSQL từ SELECT version()đâu? Vấn đề thú vị ...
Craig Ringer

2
"Tôi nghi ngờ max_locks_per_transaction sẽ không điều chỉnh được gì." - uh, tại sao bạn lại nghi ngờ điều đó? Bạn đã thử thực sự làm theo gợi ý của gợi ý?
Josh Kupershmidt

Bạn đã thử thực sự làm theo gợi ý của gợi ý? Tôi đã không chú ý max_locks_per_transaction = 64 # min 10đến /etc/postgresql/9.3/main/postgresql.conf cho đến nay.
48347

1
Max_locks_per_transaction mặc định là 64 để bắt đầu - không lưu ý rằng dòng đó đã không thay đổi nó một cách hiệu quả.
ieldsfalsehood

1
OK tăng hiệu quả lên 128 đã giải quyết vấn đề , thực sự cho phép hoạt động tiếp tục.
48347

Câu trả lời:


11

Nhận xét của bạn về việc bỏ và tạo chuyên sâu và thông báo bạn nhận được liên quan đến việc tăng gợi ý max_locks_per_transaction rằng bạn đang bỏ và tạo nhiều đối tượng trong cùng một giao dịch . Mỗi kết quả trong một khóa, mỗi khóa đòi hỏi một lượng nhỏ bộ nhớ chia sẻ. Do đó, max_locks_per_transaction giới hạn số lượng khóa bạn có thể giữ trong một giao dịch (để ngăn chặn bất kỳ một giao dịch nào sử dụng tất cả bộ nhớ dùng chung).

Bạn có thể tăng giới hạn đó lên một chút (tôi khuyên bạn không nên đặt nó ở mức lớn tùy ý hoặc bạn sẽ gặp phải tình huống riêng biệt thực sự hết bộ nhớ dùng chung) hoặc thực hiện theo từng đợt và tạo một đợt giao dịch hoặc giảm một lần / tạo trên mỗi giao dịch.

Chỉnh sửa: Rõ ràng tôi đã sai về cách max_locks_per_transaction hoạt động. Từ tài liệu, tổng số khóa có sẵn là max_locks_per_transaction * (max_connections + max_prepared_transilities) - bất kỳ một giao dịch nào cũng có thể giữ nhiều hơn max_locks_per_transaction, miễn là số lượng khóa được giữ ở mọi nơi ít hơn tổng giá trị này.


Quy trình công việc của tôi bao gồm (1) bỏ lược đồ X, (2) bỏ lược đồ Y khác và (3) khôi phục X trên tên lược đồ Y. Như tôi đã nói, cho đến hôm nay tôi đã trải qua vài tuần thực hiện các hoạt động này và hôm nay bước (2) không thành công Bước (2) chủ yếu bao gồm DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public, đây là những câu ném CẢNH BÁO, LRI và GỢI Ý.
48347

Nhân đôi các khóa tối đa từ 64 đến 128 cho phép tiến trình công việc tiếp tục. Tôi chưa có tất cả các phần bên trong, nhưng tôi đoán rằng việc cam kết giữa các câu DROP SCHema và các câu CREATE SCHema sẽ có tác dụng giải tỏa tương tự.
48347

Bây giờ tôi nhận ra nhiều ngày tôi nhận được một sự gia tăng lược đồ nhỏ và vấn đề này hoàn toàn phù hợp với một trong những sự gia tăng lược đồ nhỏ đó . Là một chiến lược chung, tôi sẽ có sự cân nhắc lớn hơn với HINTs kể từ bây giờ.
48347
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.