SSD vs HDD cho cơ sở dữ liệu


42

Tôi đang cố gắng mua một Máy chủ mới để chạy Máy chủ MySQL. Máy chủ mới này sẽ là nô lệ của máy chính của tôi. Tuy nhiên, máy chủ này sẽ được dành riêng để chỉ báo cáo "Rất nhiều lần đọc và truy vấn phức tạp."

Bây giờ tôi đang xem xét đầu tư vào ổ cứng trạng thái rắn nhưng tự hỏi liệu nó có thực sự đáng giá không. Sự khác biệt giữa SSD và ổ cứng SATA 7200 là khoảng 1500 USD và SSD có dung lượng ổ đĩa ít hơn. Nếu tôi đầu tư vào SSD thì tốc độ có đáng chú ý không?

Tôi có thể mua 4 (500GB SATA 7200) với giá thấp hơn 1500 đô la so với mua 2 (SSD 500 GB)

Bạn có thể vui lòng giúp tôi đưa ra quyết định để xem nó có đáng để nâng cấp hay không?

Một điều nữa mà tôi muốn đề cập là tôi không sử dụng query_cachenên sẽ có rất nhiều đĩa đọc.

Máy chủ này sẽ có 32GB RAM và sẽ chạy Ubuntu 12.04


Cơ sở dữ liệu của bạn lớn như thế nào về gigabyte? Câu trả lời nào dưới đây là đúng nhất thực sự phụ thuộc vào việc hiểu có bao nhiêu dữ liệu.
Nathan Jolly

1
Nếu bạn kết thúc bằng SSD, bạn có thể đợi đến tháng 4 cho Ubuntu 14.04 hoặc bật TRIM theo cách thủ công vào ngày 12.04. Xem bài viết này để biết thêm.
OSE

5
Nối tiếp ATA (SATA) là giao diện. Có ổ SSD SATA và có ổ đĩa cứng (HDD) không sử dụng SATA.
Dennis

Mua thứ gì đó không kiếm được tiền cho bạn hầu như không phải là một khoản đầu tư ...
inf3rno

Câu trả lời:


25

Có với rất nhiều lần đọc và báo cáo SSD sẽ tạo ra sự khác biệt rất lớn. Từ ổ 7200 RPM, bạn có thể mong đợi không quá ~ 100 IOPS trong khi SSD rẻ nhất có thể tối thiểu 5x nhanh như vậy. Với SSD tốt, bạn có thể đạt tới 20000 IOPS hoặc hơn thế nữa.

Ngoài ra ghi ngẫu nhiên trong SSD nhanh hơn rất nhiều vì đĩa không phải di chuyển mọi lúc.


4
Làm thế nào bạn sẽ xác định một ổ SSD tốt?
Mike

Đó là tất cả về hiệu suất và điểm chuẩn. Những gì tôi sẽ làm là google cho điểm chuẩn hoặc đánh giá về mô hình SSD bạn đang mua. Khác với điều đó en.wikipedia.org/wiki/IOPS#Examples cung cấp một cái nhìn tổng quan rất chung chung.
nmad

20

Có ba yếu tố bạn cần xem xét ở đây:

  1. Kích thước của cơ sở dữ liệu của bạn
  2. Dung lượng bộ nhớ bạn có trong máy chủ
  3. Cấu hình my.cnf của bạn, cụ thể innodb_buffer_pool_size

Nếu bộ nhớ khả dụng> kích thước cơ sở dữ liệu , máy chủ của bạn có thể sẽ giữ tất cả dữ liệu của bạn trong bộ nhớ và do đó, SSD có thể gây lãng phí tiền bạc. Bộ đệm InnoDB không có gì để làm với các query_cachetùy chọn.

Nếu bộ nhớ khả dụng <kích thước cơ sở dữ liệu , có thể các truy vấn sẽ cần truy xuất dữ liệu từ đĩa. Đối với các truy vấn cực kỳ phức tạp hoặc nếu nhiều người dùng đang chạy truy vấn cùng một lúc, điều này có thể bắt đầu gây căng thẳng cho đĩa.

Nói chung, cơ sở dữ liệu giữ dữ liệu được sử dụng nhiều nhất vào bộ nhớ - nếu 80% dữ liệu của bạn hiếm khi / không bao giờ được sử dụng, bạn sẽ chỉ cần giữ 20% cơ sở dữ liệu của mình trong bộ nhớ để duy trì hiệu suất.

Dung lượng bộ nhớ chính xác bạn cần sẽ không rõ ràng ngay lập tức, nhưng trừ khi cơ sở dữ liệu của bạn là 200GB +, tôi sẽ khuyên bạn nên sử dụng lời khuyên của Up_One và chi thêm tiền cho bộ nhớ thay vì SSD.

Lưu ý: Nếu cơ sở dữ liệu của bạn đang sử dụng MyISAM (bạn có thể kiểm tra điều này với show table status;), hãy xem xét thay đổi thành InnoDB. MyISAM key_buffer_cachechỉ lưu trữ các khối chỉ mục, trong đó Bộ đệm InnoDB lưu trữ toàn bộ các khối dữ liệu. Trong hầu hết các trường hợp, InnoDB sẽ chứng tỏ là một công cụ tốt hơn để làm việc.


Làm thế nào tôi có thể đặt cơ sở dữ liệu trong bộ nhớ? máy chủ là một nô lệ vì vậy nó sẽ luôn luôn viết lên nó nhưng nó cũng sẽ có tải đọc lớn vì các báo cáo
Mike

Nếu các bảng của bạn là InnoDB và nếu nhóm bộ đệm InnoDB của bạn đủ lớn, MySQL sẽ tự động quản lý bộ đệm của cơ sở dữ liệu của bạn trong bộ nhớ và sẽ luôn cố gắng giữ dữ liệu được sử dụng thường xuyên nhất trong bộ nhớ. Tài liệu của MySQL cung cấp một cái nhìn tổng quan khá tốt về cách thức hoạt động của nó .
Nathan Jolly

@NathanJolly ngay cả khi toàn bộ cơ sở dữ liệu nằm trong bộ nhớ, vẫn sẽ được đọc và ghi vào đĩa cứng khi dữ liệu được lưu + có giới hạn của các máy chủ khác nhau. Ví dụ, phiên bản SQL Server Express được giới hạn chỉ sử dụng bộ nhớ 1GB để không thể chứa cơ sở dữ liệu lớn trong bộ nhớ ở vị trí đầu tiên.
Jackofall

@Jackofall trong khi điều đó hoàn toàn đúng, câu hỏi ở đây đã chỉ định một cơ sở dữ liệu MySQL nặng. Mọi truy vấn chỉ đọc có thể được phục vụ từ bộ nhớ thay vì truy cập vào đĩa - ngay cả đĩa nhanh - là tin tốt.
Nathan Jolly

6

Tôi không nghĩ là một ý tưởng tốt!
Lời khuyên của tôi
tăng kích thước nhóm bộ đệm InnoDB của bạn là cách tốt nhất để tăng tốc MySQL. Nếu bạn có thể thêm RAM, hãy làm điều đó. Điều này sẽ đưa hầu hết dữ liệu nóng của bạn vào bộ nhớ để tưởng tượng! Đĩa vs Bộ nhớ!
Kịch bản hoàn hảo là để ghi nhớ kích thước của cơ sở dữ liệu
SSD của bạn - thật tuyệt nhưng nó sẽ đắt! và nó chỉ tốt cho việc đọc các công việc chuyên sâu.

Kiểm tra liên kết này để có bài viết hay về điều này từ Vadim Tkachenko


1
Bài viết bạn đang liên kết gần 4 năm tuổi, giá SSD so với thời điểm đó ít hơn một nửa và hiệu suất cũng tăng lên rất nhiều. Bộ nhớ kích thước của cơ sở dữ liệu? Còn cơ sở dữ liệu 500Gb thì sao? Không chỉ là số lượng RAM mà còn là máy chủ bạn cần mua có rất nhiều ngân hàng bộ nhớ có sẵn.
Yaroslav

Về kích thước DB! Vâng, không có cách nào bạn có thể làm điều đó- Nhưng như tôi đã nói Đây sẽ là một kịch bản hoàn hảo!
Up_One

6

Để đưa ra một giải pháp thay thế: bạn có thể sử dụng cả hai, một ổ cứng lớn (lý tưởng nhất là RAID1 với ba đĩa) để giữ dữ liệu và ổ SSD nhỏ hơn để giữ các chỉ mục.

Cơ sở lý luận:

  • các chỉ mục khá nhỏ, vì vậy bạn có thể sử dụng ổ SSD nhỏ hơn
  • truy vấn chung nên chủ yếu nhấn vào các chỉ mục
  • RAID1 cung cấp cho bạn khả năng chịu lỗi
  • RAID1 cung cấp cho bạn cân bằng tải để đọc ngẫu nhiên
  • ba đĩa để lại khả năng chịu lỗi nếu một đĩa bị lỗi
  • các chỉ mục có thể được xây dựng lại nếu SSD bị lỗi

5

Làm đi.

Bạn đã đề cập rằng bạn có khối lượng công việc nặng, vì vậy bạn đã tránh được vấn đề lớn khi sử dụng SSD trên cơ sở dữ liệu: hao mòn. Không viết có nghĩa là không mặc, vì vậy bạn là vàng.

Như edvinas.me đã đề cập, IOPS của bạn là đơn đặt hàng có cường độ nhanh hơn với SSD so với đĩa quay. Đối với cơ sở dữ liệu, IOPS chuyển đổi khá nhiều yêu cầu mỗi giây. Bỏ qua bộ nhớ cache RAM, bạn sẽ phục vụ khoảng 100 lần nhiều yêu cầu từ SSD so với từ đĩa 7200RPM.

TRIM sẽ không tạo ra nhiều khác biệt vì đây là một khối lượng công việc nặng và có vẻ như bạn dự định sẽ lấp đầy đĩa. Đừng căng thẳng về nó.

Tôi không chắc thứ 1500 đô đến từ đâu. Kiểm tra nhà cung cấp địa phương (Úc) của tôi, tôi có thể nhận được một ổ SSD 960GB có uy tín với giá $ 750 ( http://www.auspcmarket.com.au/960gb-crucial-m500-sata-6gbps-2-5-7mm-with- 9-5mm-adaptor-ssd-read-500mb-s-write-400mb-s / ). Đĩa quay miễn phí nhiều hơn hoặc ít hơn, nhưng $ 750 vẫn còn ngon miệng hơn $ 1500.

. cho phép trong môi trường của bạn.)

Bạn cũng có thể sẽ giảm được ít RAM hơn, nhưng không biết khối lượng công việc chính xác của mình, thật khó để đánh giá liệu bạn có thể giảm RAM một cách an toàn mà không làm giảm hiệu suất hay không.

Nếu bạn vẫn không chắc chắn, bạn có thể nhận được các ổ đĩa RPM 10k lớn, nhưng cuối cùng chúng sẽ có giá gần như bằng SSD trong khi vẫn chậm hơn nhiều.

Nếu bạn cần tăng quy mô vượt quá 1TB thì SSD bắt đầu trở nên quá đắt, nhưng ở mức 1TB, tôi muốn nói rằng SSD là một chiến thắng rõ ràng.


3

Tôi chắc chắn đồng ý rằng tiếng nổ lớn nhất xảy ra từ việc tăng kích thước innodb_db_bufferpool của bạn, nhưng thật không may, nó hoàn toàn phụ thuộc vào mức độ lớn của tập dữ liệu của bạn và tần suất các khối đĩa khác nhau được truy cập. Tôi duy trì một số cơ sở dữ liệu khá lớn 200 GB + để phù hợp với mọi thứ vào RAM không thực sự là một lựa chọn và vì lý do đó gần đây chúng tôi đã chuyển sang lưu trữ dựa trên SSD. Tôi đã thực hiện một nghiên cứu lớn về IOPS cho MySQL sử dụng trên các mảng RAID khác nhau mà tôi có quyền truy cập. Đây là kết quả:

1,253 IOPS - 4 x đĩa SCSI 15k (3,5 ")

kiểm tra: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 đọc: io = 3071.7MB, bw = 5012.8KB / s, iops = 1253 , runt = 627475msec viết: io = 1024.4MB, bw = 1671.7KB / s, iops = 417, runt = 627475msec cpu: usr = 0.63%, sys = 3.11%, ctx = 985926, majf = 0, min

2.558 IOPS - 8 x 10K RPM 900GB SAS (2,5 ")

kiểm tra: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 đọc: io = 3071.7MB, bw = 10236KB / s, iops = 2558, runt = 307293msec viết: io = 1024,4MB, bw = 3413,5KB / s, iops = 853, runt = 307293msec cpu: usr = 2,73%, sys = 8,72%, ctx = 904875, majf = 0, min

23.456 IOPS - Máy chủ SSD Hiệu suất Rackspace 2

kiểm tra: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 đọc: io = 3071.7MB, bw = 93708KB / s, iops = 23426, runt = 33566msec viết: io = 1024,4MB, bw = 31249KB / s, iops = 7812, runt = 33566msec cpu: usr = 5,73%, sys = 35,83%, ctx = 181568, majf = 0, minf = 23

35.484 IOPS - 2 x Nhân đôi EDGE Boost 480GB 2.5 "MLC ( http://www.edgememory.com )

kiểm tra: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 đọc: io = 3068.4MB, bw = 141934KB / s, iops = 35483, runt = 22137msec viết: io = 1027,7MB, bw = 47537KB / s, iops = 11884, runt = 22137msec cpu: usr = 11,68%, sys = 69,89%, ctx = 24379, majf = 0, minf = 20

Vì vậy, rõ ràng rằng SSD chất lượng cao ngày nay là hiệu suất tuyệt vời. Hai ổ SSD nhân đôi có thể dễ dàng vượt qua 16 ổ lưu trữ SAN và đó chỉ là một tuyên bố thuyết phục.

Nếu bạn quan tâm đến chi tiết đầy đủ, phần còn lại của bài viết được tìm thấy trên blog của tôi:

http://www.juhavehnia.com/2015/05/USE-ssds-to-improve-mysql-performance.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.