pg_restore mất nhiều thời gian hơn pg_dump


9

Tôi thường xuyên lưu và sau đó khôi phục cơ sở dữ liệu PostgreSQL nhỏ, được sử dụng để thử nghiệm. Dữ liệu của nó được cập nhật thường xuyên là kết quả của các thử nghiệm, sau đó phải tạo ra một bãi chứa mới và các bãi chứa thường xuyên được sử dụng để tạo lại cơ sở dữ liệu ở trạng thái được xác định rõ.

Tôi lưu ý rằng kết xuất (sử dụng pg_dump -Fc database) chỉ mất vài giây, nhưng khôi phục ( pg_restore -d database) mất khoảng một phút. Điều này có vẻ kỳ lạ. Tôi đã dự kiến ​​cả hai sẽ mất khoảng thời gian như nhau (giả sử cả hai nhiệm vụ đều bị ràng buộc I / O).

Có một số vấn đề với việc khôi phục? Tôi có thể làm cho nó nhanh hơn? Hoặc là bình thường để khôi phục mất nhiều thời gian hơn đổ? (Và nếu có, thì tại sao?)

Tệp kết xuất thường có khoảng 3-4 MiB; DBMS là PostgreSQL V8.4, chạy trên Pentium4 3GHz với RAM 1GiB trong Ubuntu Linux.

Câu trả lời:


9

Nội dung của một chỉ mục không phải là một phần của bản sao lưu, chỉ là định nghĩa của chỉ mục. Và điều đó sẽ chỉ mất một vài byte. Khi chỉ mục được tạo trong quá trình khôi phục và tất cả dữ liệu được lập chỉ mục, nó sẽ lớn hơn nhiều. Điều này sẽ mất thời gian, nhưng nó phụ thuộc vào tình huống của bạn bao nhiêu thời gian.

pg_restore không có tùy chọn khôi phục đồng thời (kể từ phiên bản 8.4), hãy sử dụng--jobs=number-of-jobs


Thú vị, cảm ơn. Có cách nào để kết xuất chỉ mục, để tăng tốc độ khôi phục (với chi phí của tệp kết xuất lớn hơn) không?
sleske

Không, nội dung của chỉ mục không thể là một phần của bản sao lưu. Đối với một cơ sở dữ liệu rất nhỏ như của bạn (3-4 MiB), dù sao thì đó cũng không phải là vấn đề.
Frank Heikens

Thông tin bổ sung: pg_dump không có quyền truy cập vào nội dung của một chỉ mục. pg_dump sử dụng các câu lệnh CHỌN để lấy tất cả nội dung của các bảng và nội dung của các bảng hệ thống để tạo bản sao lưu. Đó là "chỉ" một trình bao bọc xung quanh một số câu lệnh CHỌN và một số chức năng để ghi kết quả vào đĩa.
Frank Heikens

@Frank: Cảm ơn. Không biết về việc thực hiện pg_dump. Trong trường hợp của chúng tôi, tăng tốc khôi phục sẽ hữu ích, bởi vì nó cần phải chạy liên tục như một phần của kiểm tra tự động, do đó, giảm xuống từ 1 phút để nói 10 giây sẽ giúp ích. Nhưng rõ ràng điều đó không khả thi. Tôi sẽ phải tìm một giải pháp khác ...
sleske

2
@sleske bạn có thể thử với phương pháp sao lưu hệ thống tập tin . Điều này sẽ bảo toàn các chỉ mục và, ngoài ra, có thể chạy nhanh hơn một chút cho cả sao lưu và khôi phục
Stefano

4

Để khôi phục, cơ sở dữ liệu phải thực hiện rất nhiều công việc bổ sung:

Một số điều xuất hiện trong tâm trí ngay lập tức:

  • Viết chậm hơn đọc
  • Phân tích cú pháp đầu vào cần có thời gian
  • Cập nhật chỉ mục và các cấu trúc nội bộ khác
  • Duy trì tính toàn vẹn tham chiếu

Tuy nhiên, không chắc chắn nếu số tiền này chênh lệch thời gian.

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.