Hiệu suất ghi Postgres trên SSD Intel S3700


7

Tôi không thấy hiệu suất ghi của Postgres tăng lên, tôi nghĩ rằng tôi sẽ làm với một ổ SSD duy nhất so với một mảng RAID 10 phần cứng (16) 15k RPM SAS.

Tôi có Dell R820 với thẻ RAID phần cứng PERC H700 và 16 ổ đĩa RPM 15 15k trong một mảng RAID 10, cũng như ổ SSD Intel s3700 800GB. Máy chủ có 128GB RAM và 64 lõi Xeon E5-4640 tốc độ 2.40GHz, chạy CentOS 6.4 và Postgres 9.2.4.

Tôi đang sử dụng pgbench để so sánh các ổ đĩa SAS trong một mảng RAID 10 với một ổ SSD.

Kết quả 10k RPM SAS RAID 10

pgbench -U postgres -p 5432 -T 50 -c 10 pgbench
bắt đầu chân không ... kết thúc.
loại giao dịch: TPC-B (loại)
hệ số tỷ lệ: 1
chế độ truy vấn: đơn giản
số lượng khách hàng: 10
số lượng chủ đề: 1
thời lượng: 50 giây
số lượng giao dịch thực sự được xử lý: 90992
tps = 1819.625430 (bao gồm thiết lập kết nối)
tps = 1821.417384 (không bao gồm thiết lập kết nối)

Kết quả SSD Intel s3700 đơn

pgbench -U postgres -p 5444 -T 50 -c 10 pgbench
bắt đầu chân không ... kết thúc.
loại giao dịch: TPC-B (loại)
hệ số tỷ lệ: 1
chế độ truy vấn: đơn giản
số lượng khách hàng: 10
số lượng chủ đề: 1
thời lượng: 50 giây
số lượng giao dịch thực sự được xử lý: 140597
tps = 2811.687286 (bao gồm thiết lập kết nối)
tps = 2814.578386 (không bao gồm thiết lập kết nối)

Trong sử dụng trong thế giới thực, chúng tôi có một quy trình rất chuyên sâu, mất khoảng 7 phút để hoàn thành và mảng RAID 10 và SSD nằm trong vòng 10 hoặc 15 giây với nhau.

Tôi mong đợi hiệu suất tốt hơn nhiều từ SSD.

Dưới đây là kết quả Bonnie ++ cho SSD:

Phiên bản 1.96 ------ Đầu ra tuần tự ------ - Đầu vào tương đương- - Cộng đồng-
Đồng thời 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seek--
Kích thước máy K / giây% CP K / giây% CP K / giây% CP K / giây% CP K / giây% CP / giây% CP
openlink2.rady 252G 532 99 375323 97 183855 45 1938 99 478149 54 +++++ +++
Độ trễ 33382us 82425us 168ms 12966us 10879us 10208us
Phiên bản 1.96 ------ Tạo tuần tự ------ -------- Tạo ngẫu nhiên --------
openlink2.radyn.com -Create-- --Read --- -Delete-- -Create-- --Read --- -Delete--
              tệp / giây% CP / giây% CP / giây% CP / giây% CP / giây% CP / giây% CP
                 16 5541 46 +++++ +++ +++++ +++ 18407 99 +++++ +++ +++++ +++
Độ trễ 1271us 1055us 1157us 456us 20us 408us

Dưới đây là kết quả Bonnie ++ cho các ổ đĩa RAID 10 15k RPM:

Phiên bản 1.96 ------ Đầu ra tuần tự ------ - Đầu vào tương đương- - Cộng đồng-
Đồng thời 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seek--
Kích thước máy K / giây% CP K / giây% CP K / giây% CP K / giây% CP K / giây% CP / giây% CP
openlink2.rady 252G 460 99 455060 98 309526 56 2156 94 667844 70 197.9 85
Độ trễ 37811us 62175us 393ms 75392us 169ms 17633us
Phiên bản 1.96 ------ Tạo tuần tự ------ -------- Tạo ngẫu nhiên --------
openlink2.radyn.com -Create-- --Read --- -Delete-- -Create-- --Read --- -Delete--
              tệp / giây% CP / giây% CP / giây% CP / giây% CP / giây% CP / giây% CP
                 16 12045 95 +++++ +++ +++++ +++ 16851 98 +++++ +++ +++++ +++
Độ trễ 7879us 504us 555us 449us 24us 377us

Dưới đây là kết quả dd cho SSD:

dd if = / dev / zero of = / path / on / ssd bs = 1M Count = 4096 conv = fdatasync, notrunc
Sao chép 4294967296 byte (4,3 GB), 12,7438 giây, 337 MB / s

Và đây là kết quả dd cho các ổ đĩa RAID 10 15k RPM:

dd if = / dev / zero of = / path / on / mảng bs = 1M Count = 4096 conv = fdatasync, notrunc
4294967296 byte (4.3 GB) được sao chép, 8.45972 s, 508 MB / s

Tôi đã đăng cấu hình Postgres, nhưng rõ ràng SSD không vượt trội hơn mảng RAID 10, vì vậy nó dường như không thể áp dụng được.

Vì vậy, SSD là hoạt động như nó phải được?

Hay là RAID 10 với 16 ổ đĩa nhanh tốt đến mức nó vượt trội hơn một ổ SSD? Một mảng RAID 10 của SSD sẽ rất tuyệt vời, nhưng ở mức 2.000 đô la mỗi thẻ giá 8.000 đô la rất khó để biện minh (trừ khi chúng tôi chắc chắn sẽ thấy mức tăng gấp 2 đến 5 lần mà chúng tôi hy vọng sẽ đạt được trong hiệu suất thực tế).

================= Cập nhật =================

Hóa ra chúng ta có 16 ổ đĩa SAS trong mảng chứ không phải 8. Tôi nghĩ rằng thông lượng kết hợp là

Dưới đây là điểm chuẩn iozone làm sáng tỏ hơn. Mảng RAID10 tạo ra kết quả tốt hơn khá nhất quán. 4 hoặc 8 ổ SSD trong RAID 10 có thể sẽ đánh bại mảng SAS (tất nhiên là ở mức giá cao).

Điểm chuẩn SSD http://pastebin.com/vEMHCQhR

16 ổ đĩa chuẩn RAID-10 http://pastebin.com/LQNrm7tT

Dưới đây là cấu hình Postgres cho SSD, trong trường hợp bất kỳ ai cũng thấy bất kỳ chỗ nào cần cải thiện để tận dụng SSD http://pastebin.com/Qsb3Ks7Y


3
Kiểm tra máy 64 lõi với ít nhất 64 máy khách đồng thời (phía sau nhóm kết nối) để có kết quả gốc. Một Postgres proces chỉ có thể chạy trên một lõi.
Frank Heikens

3
Bạn cũng nên kiểm tra pg_test_fsyncvà thay vì sử dddụng sysbenchcác bài kiểm tra I / O trên đĩa.
Craig Ringer

bạn cũng có thể thử vuốt ve ngắn, điều này sẽ giúp bạn với hiệu suất IOPS của bạn.
Borys

Câu trả lời:


10

Bản thân tôi không chắc chắn đây là một vấn đề, bởi vì, như bạn có thể thấy, một ổ SSD duy nhất có thể vượt trội hơn so với thiết lập RAID 10 8 đĩa trong nhiều thử nghiệm.

Hầu như tất cả các bài kiểm tra đều chỉ ra tốc độ tốt hơn của ổ SSD đơn:

  • độ trễ tốt hơn
  • sử dụng CPU thấp hơn (nếu tôi đọc chính xác trong một số trường hợp, đó là 44% so với 95%)
  • không có giao dịch mỗi giây lớn hơn với 55%
  • không có giao dịch nào trong tổng số lớn hơn với cùng 55%

Trong một trường hợp duy nhất, SSD đã hoạt động tốt hơn và đó là ghi tuần tự. Điều mà tôi muốn nói là thông thường nhất đối với các lô, không phải cho kiểu tải OLTP. Vì vậy, nếu bạn đang có hầu hết các loại ghi này, có thể một ổ SSD không phải là giải pháp cho bạn bây giờ.

Và chúng tôi không nói về cácFusion-IO (mà tôi nghi ngờ có thể mang đến cho bạn mức độ tiếp theo mà bạn mong đợi, nhưng ở mức giá tiếp theo).

Từ quan điểm của DBA đã phải làm việc với bộ lưu trữ tào lao trong nhiều năm qua, đây là một tiến bộ công bằng và chúng dường như hoạt động đúng, nhưng có lẽ tôi đã đặt kỳ vọng của mình quá thấp.

Tôi hy vọng sẽ thấy nhiều cải tiến hơn từ SSD của bạn trong việc kiểm tra điểm chuẩn với nhiều luồng hơn và với độ đồng thời cao hơn, vì đây là nơi SSD tỏa sáng. Vì vậy, nếu bạn có thể lặp lại thử nghiệm của bạn với cách nhiều khách hàng hơn và chủ đề hơn, tôi muốn được tò mò về điều đó kết quả so sánh.


SSD đang hoạt động đáng kinh ngạc, xem xét việc nó đi lên so với băng thông kết hợp của 16 ổ đĩa SAS (tôi đã nói không chính xác 8 ban đầu). Các điểm chuẩn iozone, đặc biệt được xem trong biểu đồ Excel, tiết lộ rằng một ổ SSD duy nhất không theo kịp trong hầu hết các cách, đôi khi đáng kể. Bạn có nghĩ rằng 4 hoặc 8 ổ SSD trong RAID10 sẽ nhanh hơn ổ 16 SAS trong RAID10 để ghi tuần tự không?
dùng1517922

6

Một vài khả năng:

  • Máy của bạn có rất nhiều RAM. Có thể điều này đang đáp ứng một phần lớn các yêu cầu I / O từ bộ đệm, điều này sẽ giúp vượt qua mọi khác biệt về hiệu suất ở mức độ lớn hơn hoặc thấp hơn.
  • Nếu khối lượng công việc I / O của bạn chủ yếu là tuần tự thì một mảng HDD với kích thước sọc lớn sẽ cho thông lượng tuần tự tốt. Với dải 256k, bạn có thể nhận được 600MB / giây từ một mảng 10 ổ 15k, nhanh hơn hiệu suất ghi được liệt kê của một S3700.

Chúng tôi có rất nhiều RAM và Postgres được thiết lập để sử dụng khoảng 32 GB (rất nhiều để phù hợp với toàn bộ cơ sở dữ liệu 8GB của chúng tôi và tất cả các chỉ mục vào RAM), vì vậy hiệu suất đọc về cơ bản là như nhau. Tôi nghĩ rằng sẽ mất ít nhất 4 mảng SSD RAID10 hoặc đèn flash PCIe để đánh bại hiệu suất ghi mà chúng ta có bây giờ.
dùng1517922

4

Thay vì ném tất cả trứng vào một giỏ (tất cả SSD hoặc tất cả ổ cứng), bạn nên xem xét bố trí đĩa lai. Ý tôi là sao

  • Ổ cứng rất tốt cho việc ghi, đặc biệt là cho phép ghi bộ đệm
  • SSD rất tốt cho việc đọc, OK để ghi ngẫu nhiên, nhưng chậm chạp trong việc ghi tuần tự
  • Đó là thời gian rõ ràng phải được dành để ghi vào nhật ký giao dịch trong pg_xlogthư mục. Nhật ký giao dịch luôn được viết tuần tự.

GỢI Ý

Có lẽ bạn nên gắn pg_xlogtrên các ổ RAID10 SAS. Điều này có thể giúp cắt giảm số lượng ổ đĩa bạn thực sự cần. Mọi thứ khác có thể vẫn còn trên SSD. Theo cách đó:

  • Dữ liệu của bạn đã sẵn sàng để đọc nhanh
  • Việc ghi vào nhật ký giao dịch có thể trên các ổ cứng riêng biệt nhưng nhanh hơn.

Hãy thử một lần !!!

CẬP NHẬT 2013-06-27 07:38 EDT

Dưới đây là biểu đồ của tất cả các thư mục trong postgresql :

Item         Description
PG_VERSION   A file containing the major version number of PostgreSQL
base         Subdirectory containing per-database subdirectories
global       Subdirectory containing cluster-wide tables, such as pg_database
pg_clog      Subdirectory containing transaction commit status data
pg_multixact Subdirectory containing multitransaction status data(used for shared row locks)
pg_notify    Subdirectory containing LISTEN/NOTIFY status data
pg_stat_tmp  Subdirectory containing temporary files for the statistics subsystem
pg_subtrans  Subdirectory containing subtransaction status data
pg_tblspc    Subdirectory containing symbolic links to tablespaces
pg_twophase  Subdirectory containing state files for prepared transactions
pg_xlog      Subdirectory containing WAL (Write Ahead Log) files

Kể từ khi chuyển pg_xlogsang SAS đã cải thiện 10%, hãy thử chuyển các phần khác của tuân thủ ACID sang SAS. Có lẽ di chuyển pg_twophase, pg_multixact, pg_clogcó thể giúp là tốt.


4
Cảm ơn. Việc chuyển pg_xlog sang RAID10 đã tăng hiệu suất trên cụm SSD Postgres, khoảng 10%.
dùng1517922
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.