Hệ thống tập tin tốt nhất để chèn hiệu năng trên PostgreSQL là gì?


20

Tôi tò mò liệu có ai ở ngoài đó đã thực hiện bất kỳ thử nghiệm hoặc so sánh giữa các hệ thống tệp và hiệu suất cơ sở dữ liệu. Trên Linux, tôi tự hỏi hệ thống tệp tối ưu cho cơ sở dữ liệu postgres là gì. Ngoài ra, cài đặt nào (inode, v.v.) là lý tưởng cho nó? Đây có phải là một cái gì đó có thể khác nhau đáng kể dựa trên dữ liệu trong cơ sở dữ liệu?

Nếu bạn đang tìm kiếm một câu hỏi liên quan đến hiệu suất cơ sở dữ liệu / hệ thống tập tin chung, bài đăng này có một số thông tin tốt.

Tuy nhiên, tôi muốn nhận được nhiều lời khuyên về hiệu suất chèn trái ngược với hiệu suất đọc càng tốt. Cảm ơn tất cả các câu trả lời tuyệt vời!


7
Hệ thống tập tin tốt nhất sẽ có nhiều bộ nhớ hơn? ;)
Oskar Duveborn

2
+1 cho Oskar. Chúng tôi vừa đi từ một cấu hình máy chủ trong đó RAM chiếm ~ 33% tổng kích thước của DB sang một máy mới có tổng RAM lớn hơn kích thước của DB. Bây giờ chúng ta có thể lưu trữ toàn bộ DB trong bộ nhớ. Truy vấn SQL chậm nhất của chúng tôi hiện nhanh hơn 2 bậc.
KevinRae

Câu trả lời:


14

Mua một bản sao "hiệu suất cao postgresql" của Greg Smith. Đó là một cuốn sách tuyệt vời và hai hoặc nhiều chương nói về Phần cứng đĩa và hệ thống tệp. Bạn sẽ học được nhiều điêu.

Tóm lại: không có câu trả lời ngắn.

Nhưng tôi sẽ cố gắng để mùa hè:

  • không sử dụng ext2 cho đến khi bạn biết bạn đang làm gì.
  • với ext3 hãy cẩn thận với các điểm kiểm tra đột biến vì các cuộc gọi fsync, xem trang 113 và 82 và 79
  • sử dụng ext4 hoặc xfs
  • có những lựa chọn khác

Nhưng vì bạn đang thực sự tự hỏi mình nên sử dụng FS nào, bạn nên đọc cuốn sách này!


4
Đồng ý, đây là loại chủ đề Greg bao quát rất tốt. Có một chương mẫu tại packtpub.com/sites/default/files/, nếu bạn muốn tiến hành trước khi mượn hoặc mua sách.
tọa

1
Thật buồn cười, khi tôi gặp vấn đề này, cuốn sách đã không tồn tại. Bây giờ, tôi thực sự biết ơn những nỗ lực mà Greg đã đưa vào cuốn sách đó.
Ê-li

Tôi đã mua một bản sao khác chỉ để tôn vinh tác phẩm tuyệt vời này :-)
Janning

6

Trước hết, bạn muốn có một hệ thống tập tin đáng tin cậy trước tiên và nhanh chóng một giây. Mà quy định ra một số tùy chọn ...

Kiểm tra hiệu năng cho thấy thường XFS cho hiệu năng tốt nhất. Có một số vấn đề ổn định với nó khi bạn đạt đến các tình huống rất gần với đĩa, nhưng miễn là bạn theo dõi điều đó không xảy ra, nó sẽ cho bạn hiệu suất tốt hơn một chút.

Về lý thuyết, bạn không cần một hệ thống tập tin nhật ký cho thư mục pg_xlog, nhưng sự khác biệt về tốc độ thường rất nhỏ nên nó không đáng. Đối với thư mục dữ liệu, bạn thực sự phải luôn có một hệ thống tệp nhật ký siêu dữ liệu.


4
Bạn có thể muốn / không / sử dụng XFS để lưu trữ cơ sở dữ liệu, cụ thể là vì nó sẽ (khi cần) loại bỏ các khối mà nó không thể phục hồi.
Avery Payne

4

Các hệ thống quản lý cơ sở dữ liệu thực hiện việc ghi nhật ký của riêng chúng thông qua nhật ký cơ sở dữ liệu, do đó việc cài đặt một DBMS như vậy trên hệ thống tệp được ghi nhật ký làm giảm hiệu suất thông qua hai cơ chế:

  1. Nhật ký dự phòng làm tăng số lượng hoạt động của đĩa

  2. Bố cục đĩa vật lý có thể bị phân mảnh (mặc dù một số hệ thống tệp tạp chí có cơ chế để dọn sạch thứ này).

  3. Rất nhiều hoạt động của đĩa có thể lấp đầy tạp chí, gây ra tình trạng 'đĩa đầy' giả.

Tôi đã thấy một ví dụ vài năm trước, nơi điều này đã được thực hiện trên hệ thống tệp LFS trên bản cài đặt Baan trên hộp HP / UX. Hệ thống có các vấn đề liên quan đến hiệu suất và dữ liệu liên tục không được chẩn đoán cho đến khi ai đó biết rằng các hệ thống tệp được định dạng bằng LFS.

Các tập giữ các tệp cơ sở dữ liệu thường sẽ có một số lượng nhỏ các tệp lớn. Các máy chủ DBMS thường sẽ có một cài đặt cấu hình số lượng khối được đọc trong một I / O duy nhất. Số lượng nhỏ hơn sẽ phù hợp với các hệ thống xử lý giao dịch khối lượng lớn vì chúng sẽ giảm thiểu việc lưu trữ dữ liệu dư thừa. Số lượng lớn hơn sẽ phù hợp cho các hệ thống như kho dữ liệu đã thực hiện nhiều lần đọc theo trình tự. Nếu có thể, hãy điều chỉnh kích thước khối phân bổ hệ thống tệp của bạn thành cùng kích thước với đọc nhiều khối mà DBMS được đặt thành.

Một số hệ thống quản lý cơ sở dữ liệu có thể làm việc với các phân vùng đĩa thô. Điều này mang lại mức độ tăng hiệu suất khác nhau, thường là ít hơn trên một hệ thống hiện đại có nhiều bộ nhớ. Trên các hệ thống cũ có ít không gian hơn để lưu trữ siêu dữ liệu tệp hệ thống, mức tiết kiệm trên đĩa I / O là khá đáng kể. Các phân vùng thô làm cho hệ thống khó quản lý hơn, nhưng cung cấp hiệu suất tốt nhất hiện có.

Khối lượng RAID-5 phải chịu chi phí ghi nhiều hơn so với ổ RAID-10, do đó, một cơ sở dữ liệu bận rộn với nhiều lưu lượng ghi sẽ hoạt động tốt hơn (thường tốt hơn nhiều) trên RAID-10. Nhật ký nên được đặt khối lượng đĩa vật lý riêng biệt cho dữ liệu. Nếu cơ sở dữ liệu của bạn lớn và hầu hết chỉ đọc (ví dụ: kho dữ liệu), có thể có trường hợp đưa nó vào ổ đĩa RAID-5 nếu điều này không làm chậm quá trình tải.

Bộ nhớ đệm ghi lại trên bộ điều khiển có thể mang lại cho bạn một chiến thắng về hiệu suất với chi phí tạo ra một số chế độ thất bại (có thể không hợp lý nhưng có thể) trong đó dữ liệu có thể bị hỏng. Chiến thắng hiệu suất lớn nhất cho điều này là về tải truy cập ngẫu nhiên cao. Nếu bạn muốn làm điều này, hãy xem xét đưa nhật ký vào một bộ điều khiển riêng và vô hiệu hóa bộ nhớ đệm ghi lại trên khối lượng nhật ký. Các nhật ký sau đó sẽ có tính toàn vẹn dữ liệu tốt hơn và một lỗi duy nhất không thể lấy ra cả khối lượng nhật ký và dữ liệu. Điều này cho phép bạn khôi phục từ bản sao lưu và chuyển tiếp từ nhật ký.


Journalling dữ liệu hiệu suất phân hủy; siêu dữ liệu tạp chí nên có tác động tối thiểu tồi tệ nhất, và rất có thể, hầu như không có. Không siêu dữ liệu tạp chí là không thể tin được.
niXar

Tôi nghĩ rằng bạn đã hiểu sai bài viết. Bất kỳ hệ thống tập tin nào cũng có siêu dữ liệu hệ thống tập tin và bất kỳ lưu lượng đĩa nào cũng sẽ liên quan đến việc đọc hoặc ghi này. Các máy tính hiện đại thường có đủ RAM để dễ dàng lưu trữ siêu dữ liệu hệ thống tệp này nhưng các máy cũ hơn thì không. Điều này có nghĩa là các truy cập đĩa phát sinh thêm chi phí I / O đáng kể (con số được trích dẫn cho Oracle là hiệu suất 30% so với các phân vùng thô) để đọc hoặc cập nhật siêu dữ liệu của hệ thống tệp. Trên một hệ thống hiện đại có nhiều RAM, siêu dữ liệu của hệ thống tệp có nhiều khả năng được lưu trữ hơn, do đó chi phí thấp hơn.
Mối quan tâmOfTunbridgeWells

Điều này chứa một số lời khuyên chung tốt, nhưng tôi đã đánh giá thấp bởi vì nó cũng chứa thông tin không liên quan hoặc không chính xác cho postgresql và các hệ thống tập tin được ghi nhật ký hiện đại.
tọa

3

Tôi đã làm một báo cáo chi tiết như vậy nhưng nó chỉ bằng tiếng Pháp . Nếu bạn đọc tiếng Pháp hoặc hài lòng với các công cụ dịch tự động ... Bạn có thể sử dụng lại phương pháp và tự chạy nó.

Tóm tắt điều hành: Tôi đã sử dụng pgbench. Bộ lập lịch I / O Linux có rất ít tầm quan trọng đối với các màn trình diễn và hệ thống tập tin chỉ có một chút. Vì vậy, nếu bạn đang vội, chỉ cần chọn mặc định. Tôi đã chọn JFS.


2

Hệ thống tập tin chỉ là một phần của vấn đề. Bạn có thể tăng hiệu suất đáng kể bằng cách thay đổi lịch trình IO của bạn. May mắn là điều này khá dễ kiểm tra vì bạn có thể thay đổi lịch trình IO khi đang di chuyển. Tôi khuyên bạn nên thử từng cái trong một vài ngày dưới tải thông thường và xem cái nào mang lại hiệu quả tốt nhất.


Điểm chuẩn của tôi cho thấy rất ít thay đổi khi thay đổi bộ lập lịch I / O, có lẽ vì mỗi DBMS đã có bộ lập lịch riêng.
bortzmeyer

MySQL đối phó tốt hơn rất nhiều khi tải cao từ việc sử dụng bộ lập lịch thời hạn.
David Pashley

2

Tôi đã làm một số thử nghiệm vài tháng trước:

Tôi đã có một chương trình thử nghiệm nhỏ tạo ra 50 luồng, trong đó mỗi luồng chèn 1000 (hoặc nếu nó là 10000) hàng vào cùng một bảng.

  • Với cơ sở dữ liệu trên EXT3 và RAID5 4 đĩa, mất 50 giây.
  • Với bảng trên ramdisk (sử dụng không gian bảng), vẫn mất 50 giây. Lý do nó không nhanh hơn là mọi thứ được ghi vào thư mục pg_xlog vẫn còn trên cùng RAID 5.
  • Tôi đã chuyển pg_xlog sang 4 đĩa RAID0 (sọc) và cùng một chương trình chạy trong 40 giây.
  • Để thử nghiệm, tôi đã chuyển pg_xlog sang ramdisk và có mọi thứ khác trên RAID đĩa EXT3 4. Chương trình đã kết thúc sau chưa đầy 5 giây.

Nhưng có pg___xlog trên ramdisk phần mềm không phải là một lựa chọn: Nếu bạn mất nội dung của thư mục pg_xlog, các postgres sẽ không bắt đầu. (Nhưng tồn tại ramdisks phần cứng với pin dự phòng có thể được quan tâm.)

IMHO: Sử dụng các tệp tin mà bạn cảm thấy thoải mái nhất cho các tệp cơ sở dữ liệu. Di chuyển pg_xlog (có liên kết tượng trưng, ​​xem tài liệu) đến thiết bị nhanh nhất bạn có.


1
pgbench làm một cái gì đó tương tự và được bao gồm trong hầu hết các cài đặt.
Avery Payne

0

Tôi đã từng nhớ rằng một FreeBSD được điều chỉnh sẽ cho bạn hiệu năng cao hơn một chút so với các HĐH khác. Mặc dù tôi chắc chắn rằng thông tin này đã lỗi thời và có lẽ là một huyền thoại ở nơi đầu tiên. Nhưng bạn vẫn có thể dùng thử, tuy nhiên, hãy xem hướng dẫn này cho cài đặt kernel: http://developer.postgresql.org/pgdocs/postgres/kernel-resource.html

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.