SSD vs HDD untuk database

42

Saya mencoba membeli Server baru untuk menjalankan MySQL Server. Server baru ini akan menjadi budak dari mesin utama saya. Namun, server ini hanya akan didedikasikan untuk melaporkan "Banyak bacaan dan kueri kompleks."

Sekarang saya sedang mencari untuk berinvestasi dalam hard drive solid state tetapi bertanya-tanya apakah itu benar-benar layak harganya. Perbedaan antara SSD dan hard drive SATA 7200 adalah sekitar $ 1500 dan SSD memiliki lebih sedikit ruang disk. Jika saya berinvestasi ke SSD, apakah kecepatannya akan terlihat?

Saya dapat membeli 4 (500GB SATA 7200) seharga $ 1500 kurang dari pembelian 2 (500GB SSD)

Bisakah Anda membantu saya membuat keputusan untuk melihat apakah itu layak untuk ditingkatkan atau tidak?

Sekali lagi hal yang ingin saya sebutkan adalah bahwa saya tidak menggunakan query_cachesehingga akan ada banyak disk membaca.

Server ini akan memiliki 32GB RAM dan akan menjalankan Ubuntu 12.04

Mike
sumber
Seberapa besar basis data Anda dalam hal gigabytes? Manakah dari jawaban di bawah ini yang paling benar benar tergantung pada pemahaman berapa banyak data yang ada.
Nathan Jolly
1
Jika Anda akhirnya menggunakan SSD, Anda mungkin ingin menunggu hingga April untuk Ubuntu 14.04 atau mengaktifkan TRIM secara manual pada 12.04. Lihat artikel ini untuk info lebih lanjut.
OSE
5
Serial ATA (SATA) adalah antarmuka. Ada SSD SATA dan ada hard disk drive (HDD) yang tidak menggunakan SATA.
Dennis
Membeli sesuatu yang tidak menghasilkan uang untuk Anda bukanlah investasi ...
inf3rno

Jawaban:

25

Ya dengan banyak membaca dan melaporkan SSD akan membuat perbedaan besar. Dari 7200 RPM drive Anda dapat mengharapkan tidak lebih dari ~ 100 IOPS sementara SSD termurah dapat minimal 5x secepat itu. Dengan SSD yang bagus Anda bisa mencapai 20000 IOPS atau bahkan lebih.

Tulisan acak di SSD jauh lebih cepat karena disk tidak harus bergerak setiap waktu.

nmad
sumber
4
Bagaimana Anda mendefinisikan SSD yang baik?
Mike
Ini semua tentang kinerja dan tolok ukur. Apa yang akan saya lakukan adalah google untuk benchmark atau review dari model SSD yang Anda beli. Selain itu en.wikipedia.org/wiki/IOPS#Contoh memberikan ikhtisar yang sangat umum.
nmad
20

Ada tiga faktor yang perlu Anda pertimbangkan di sini:

  1. Ukuran basis data Anda
  2. Jumlah memori yang Anda miliki di server
  3. Konfigurasi my.cnf Anda, khususnya innodb_buffer_pool_size

Jika memori yang tersedia> ukuran basis data , server Anda mungkin akan dapat menyimpan semua data Anda dalam memori, dan karena itu SSD mungkin membuang-buang uang. Buffer InnoDB tidak ada hubungannya dengan query_cacheopsi.

Jika memori yang tersedia <ukuran basis data , ada kemungkinan bahwa kueri perlu mengambil data dari disk. Untuk kueri yang sangat kompleks, atau jika banyak pengguna menjalankan kueri sekaligus, ini bisa mulai memberi tekanan pada disk.

Secara umum, basis data menyimpan data yang paling banyak digunakan ke dalam memori - jika 80% dari data Anda jarang / tidak pernah digunakan, Anda hanya perlu menyimpan 20% dari basis data Anda dalam memori untuk mempertahankan kinerja.

Jumlah persis memori yang Anda butuhkan tidak akan segera terlihat, tetapi kecuali jika database Anda 200GB +, saya benar-benar akan merekomendasikan untuk mengambil saran Up_One dan menghabiskan uang ekstra untuk memori daripada SSD.

NB: Jika database Anda menggunakan MyISAM (Anda dapat memeriksanya dengan ini show table status;), pertimbangkan untuk beralih ke InnoDB. MyISAM key_buffer_cachehanya menyimpan blok indeks, di mana InnoDB Buffer Pool menyimpan seluruh blok data. Dalam kebanyakan kasus, InnoDB akan terbukti menjadi mesin yang lebih baik untuk digunakan.

Nathan Jolly
sumber
Bagaimana saya bisa memasukkan basis data ke dalam memori? server adalah budak sehingga ia akan selalu menulis di atasnya, tetapi juga memiliki beban baca yang berat karena laporan
Mike
Jika tabel Anda adalah InnoDB, dan jika kumpulan buffer InnoDB Anda cukup besar, MySQL akan secara otomatis mengelola caching basis data Anda di memori, dan akan mencoba menyimpan data yang paling sering digunakan dalam memori sepanjang waktu. Dokumentasi MySQL memberikan gambaran yang cukup bagus tentang cara kerjanya .
Nathan Jolly
@NathanJolly bahkan jika seluruh database ada di memori, masih akan ada membaca dan menulis ke hard disk ketika data disimpan + ada keterbatasan berbagai server. Misalnya versi SQL Server Express dibatasi hanya menggunakan memori 1GB sehingga tidak dapat mengakomodasi database besar dalam memori di tempat pertama.
Jackofall
@Jackofall, sementara itu benar-benar benar, pertanyaan di sini menentukan database MySQL yang banyak dibaca. Setiap permintaan baca-saja yang dapat dilayani dari memori daripada menjangkau ke disk - bahkan disk cepat - adalah berita baik.
Nathan Jolly
6

Saya pikir itu bukan ide yang bagus!
Saran saya
meningkatkan ukuran kumpulan buffer InnoDB Anda adalah cara terbaik untuk mempercepat MySQL. Jika Anda dapat menambahkan lebih banyak RAM, lakukanlah. Ini akan membuat sebagian besar data panas Anda dalam memori jadi bayangkan! Disk vs Memori!
Skenario sempurna adalah memiliki memeory Anda seukuran
SSD basis data Anda - bagus tetapi akan mahal! dan itu hanya baik untuk pekerjaan membaca intensif.

Periksa tautan ini untuk artikel bagus tentang ini dari Vadim Tkachenko

Up_One
sumber
1
Artikel yang Anda tautkan berusia hampir 4 tahun, harga SSD dibandingkan saat itu lebih dari setengahnya dan kinerja juga meningkat banyak. Memori ukuran database? Bagaimana dengan basis data 500Gb? Tidak hanya jumlah RAM tetapi juga server yang Anda butuhkan yang memiliki begitu banyak bank memori yang tersedia.
Yaroslav
Mengenai ukuran DB! Ya, tidak mungkin Anda bisa melakukan itu- Tapi seperti yang saya katakan ini akan menjadi skenario yang sempurna!
Up_One
6

Untuk memberikan alternatif: Anda bisa menggunakan keduanya, harddisk besar (idealnya, RAID1 dengan tiga disk) untuk menyimpan data, dan SSD yang lebih kecil untuk menyimpan indeks.

Alasan:

  • indeksnya cukup kecil, jadi Anda bisa menggunakan SSD yang lebih kecil
  • Pertanyaan umum umumnya harus mengenai indeks
  • RAID1 memberi Anda toleransi kesalahan
  • RAID1 memberi Anda load balancing untuk pembacaan acak
  • tiga disk meninggalkan toleransi kesalahan jika disk gagal
  • indeks dapat dibangun kembali jika SSD gagal
Simon Richter
sumber
5

Lakukan.

Anda menyebutkan bahwa Anda memiliki beban kerja baca-berat, jadi Anda sudah menghindari masalah besar dengan menggunakan SSD pada database: kelelahan. Tidak menulis berarti tidak pakai, jadi Anda emas.

Seperti yang disebutkan oleh edvinas.me, IOPS Anda adalah urutan yang lebih cepat dengan SSD daripada dengan disk yang berputar. Untuk database, IOPS cukup banyak diterjemahkan menjadi permintaan per detik. Mengabaikan cache RAM, Anda akan melayani sekitar 100x lebih banyak permintaan dari SSD daripada dari disk 7200RPM.

TRIM tidak akan membuat banyak perbedaan karena ini adalah beban kerja yang berat dan sepertinya Anda berencana mengisi disk. Jangan stres tentang itu.

Saya tidak yakin dari mana $ 1500 itu berasal. Memeriksa pemasok lokal saya (Australia), saya bisa mendapatkan SSD 960GB dengan nilai reputasi tinggi untuk $ 750 ( http://www.auspcmarket.com.au/960gb-crucial-m500-sata-6gbps-2-5-7mm-with- 9-5mm-adapter-ssd-read-500mb-s-write-400mb-s / ). Disk berputar lebih atau kurang gratis, tetapi $ 750 masih jauh lebih enak daripada $ 1500.

(Oh, tunggu - Anda mungkin memesan dari pemasok besar-nama, jadi mereka menagih Anda melalui hidung untuk SSD? Saya selalu membeli SSD secara terpisah dan menukarnya sendiri, tapi saya tidak tahu apakah itu diizinkan di lingkungan Anda.)

Anda mungkin juga akan mendapatkan lebih sedikit RAM, tetapi tanpa mengetahui beban kerja Anda yang sebenarnya, sulit untuk menilai apakah Anda dapat mengurangi RAM dengan aman tanpa mengganggu kinerja.

Jika Anda masih tidak yakin, Anda bisa mendapatkan drive RPM 10k yang besar, tetapi harganya akan hampir sama dengan SSD namun lebih lambat.

Jika Anda perlu skala jauh melampaui 1TB maka SSD mulai menjadi terlalu mahal, tetapi pada 1TB, saya akan mengatakan SSD adalah kemenangan yang jelas.

Ian Howson
sumber
3

Saya pasti setuju bang terbesar untuk uang berasal dari meningkatkan ukuran innodb_db_bufferpool Anda, tetapi sayangnya itu benar-benar tergantung pada seberapa besar kumpulan data Anda dan seberapa sering berbagai blok disk diakses. Saya memelihara beberapa basis data yang cukup besar 200 GB + jadi paskan segala sesuatu ke dalam RAM bukan pilihan dan karena itu kami baru saja beralih ke penyimpanan berbasis SSD. Saya telah melakukan penelitian yang cukup besar dalam hal IOPS untuk penggunaan MySQL pada berbagai array RAID yang saya miliki aksesnya. Inilah hasilnya:

1.253 IOPS - 4 x SCSI 15k (3,5 ") disk

tes: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 baca: io = 3071.7MB, bw = 5012.8KB / s, iops = 1253 , runt = 627475msec tulis: io = 1024.4MB, bw = 1671.7KB / s, iops = 417, runt = 627475msec cpu: usr = 0.63%, sys = 3.11%, ctx = 985926, majf = 0, minf = 22

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

tes: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 baca: io = 3071.7MB, bw = 10236KB / s, iops = 2558, runt = 307293msec tulis: io = 1024,4MB, bw = 3413.5KB / s, iops = 853, runt = 307293msec cpu: usr = 2.73%, sys = 8.72%, ctx = 904875, majf = 0, minf = 25, minf = 25,

23.456 IOPS - Server Rackspace Performance 2 SSD

tes: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 baca: io = 3071.7MB, bw = 93708KB / s, iops = 23426, runt = 33566msec tulis: 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 Mirrored EDGE Tingkatkan 480GB 2.5 "MLC ( http://www.edgememory.com )

tes: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 baca: io = 3068.4MB, bw = 141934KB / s, iops = 35483, runt = 22137msec tulis: io = 1027.7MB, bw = 47537KB / s, iops = 11884, runt = 22137msec cpu: usr = 11,68%, sys = 69,89%, ctx = 24379, majf = 0, minf = 20, minf = 20

Jadi jelas bahwa SSD berkualitas tinggi saat ini adalah pemain yang luar biasa. Dua Mirrored SSD dapat dengan mudah mengungguli 16 kandang penyimpanan SAN disk dan itu adalah pernyataan yang meyakinkan saja.

Jika Anda tertarik dengan detail lengkap, sisa penulisan ditemukan di blog saya:

http://www.juhavehnia.com/2015/05/using-ssds-to-improve-mysql-performance.html

Juha Vehnia
sumber