2012-06-27 33 views
11

Tôi cần sự trợ giúp của bạn để giải quyết vấn đề vì tôi khá mới đối với Postgres và việc đọc sách hướng dẫn không có tác dụng.Postgres phân phối dữ liệu trên nhiều đĩa

Chúng tôi có một máy chủ với 4 đĩa cứng nội bộ. Chúng tôi đã tạo ra một cơ sở dữ liệu Postgres với một vài bảng. Chúng tôi muốn có thể truyền dữ liệu của chúng tôi qua 4 đĩa này.

Chúng tôi muốn chỉ định một nơi nào đó (ví dụ: giai đoạn tạo không gian bảng) mà dữ liệu được tải vào một tập hợp các bảng sẽ được phân phối trên 4 đĩa.

Bạn có thể cho chúng tôi cú pháp hoặc chỉ cho chúng tôi đúng hướng không?

+2

Thực sự, tại sao không chỉ sử dụng RAID? – leonbloy

Trả lời

20
  1. Tạo bốn tablespaces mỗi người trên một đĩa khác nhau (xem: http://www.postgresql.org/docs/current/static/sql-createtablespace.html)
  2. Di chuyển nội dung của bảng để các tablespaces để các dữ liệu được phân phối như bạn có ý định nó được sử dụng ALTER TABLE foobar SET tablespace = foospace, xem tại đây: http://www.postgresql.org/docs/current/static/sql-altertable.html
  3. Di chuyển nội dung các chỉ số của bảng để các tablespaces sử dụng alter index idx_foo set tablespace = spacefoo, xem tại đây: http://www.postgresql.org/docs/current/static/sql-alterindex.html
+0

vì vậy tôi đã làm điều này cho một bảng (78GB trên đĩa). đường dẫn mới cho thấy bây giờ 78G được sử dụng, nhưng việc sử dụng đĩa trên phân vùng gốc vẫn không thay đổi. làm thế nào để tôi lấy lại không gian ban đầu? – keredson

+0

biến ra một 'chân không' đã làm nó. Tuy nhiên, việc hút bụi chỉ là một chiếc bàn, tuy nhiên, rất kỳ lạ. – keredson

7

cách tốt nhất là để tạo ra một mảng RAID-0 hoặc RAID-10 và để cho các hệ điều hành xử lý này cho bạn. RAID-0 không có dự phòng nên bất kỳ lỗi ổ đĩa đơn nào đều là thảm họa. RAID-10 cho phép bất kỳ một đĩa nào bị lỗi và tiếp tục hoạt động với hiệu năng tốt. Tránh RAID-5 hoặc RAID-6 do hiệu suất ghi rất kém.

+0

Raid có thể là một giải pháp tốt cho vấn đề nhưng nó không trả lời câu hỏi. Có lẽ anh ta muốn có dữ liệu cụ thể trên một đĩa cụ thể, như đặt một bảng được sử dụng nhiều trên đĩa nhanh và không có gì khác để đĩa chỉ được sử dụng bởi lần đọc và ghi vào bảng này. – Janning

+2

Xin lỗi nhưng bạn đã sai. OP đã nêu: Chúng tôi muốn chỉ định một nơi nào đó (ví dụ: giai đoạn tạo không gian bảng) mà dữ liệu được tải vào một tập hợp các bảng sẽ được phân phối trên 4 đĩa. Lưu ý rằng mệnh đề subjunctive trong ngoặc đơn được lấy như một loại đoán về cách thực hiện. Mặc dù hoàn toàn có thể thực hiện điều này với các vùng bảng và không có dự phòng, cách tốt hơn cho 99% người dùng là chỉ cần đặt tất cả trên một mảng RAID lớn, vì tất cả các bảng có thể được hưởng lợi từ tốc độ kết hợp cộng với dự phòng. Việc chọn nit không thực sự hữu ích. –

+0

Bạn nói đúng, Scott. Tôi đã bình chọn cho câu trả lời của bạn. – Janning

Các vấn đề liên quan