Veritabanları için SSD vs HDD


42

MySQL Server'ı çalıştırmak için yeni bir Sunucu satın almaya çalışıyorum. Bu yeni sunucu ana makinemin kölesi olacak. Ancak, bu sunucu yalnızca "Çok sayıda okuma ve karmaşık sorgular" bildirmek için tahsis edilecektir.

Şimdi katı hal sabit disklere yatırım yapmak istiyorum ancak bunun gerçekten fiyat değerinde olup olmadığını merak ediyordum. Bir SSD ile bir SATA 7200 sabit diski arasındaki fark yaklaşık 1500 dolar ve SSD daha az disk alanına sahip. SSD'ye yatırım yaparsam, hız farkedilir mi?

4 satın almayı (500 GB SSD) satın almamdan 1500 dolara 4 (500 GB SATA 7200) alabilirim

Lütfen yükseltmeye değip değmeyeceğini görmek için karar vermeme yardım eder misin?

Bahsetmek istediğim bir şey daha kullanmıyorum, query_cachebu yüzden çok fazla disk okuma olacak.

Bu sunucu 32GB RAM'e sahip olacak ve Ubuntu 12.04’ü çalıştıracak


Veritabanınız gigabayt açısından ne kadar büyük? Aşağıdaki cevaplardan hangisinin en doğru olduğu gerçekten ne kadar veri bulunduğunu anlamaya bağlıdır.
Nathan Jolly

1
SSD'leri kullanmaktan vazgeçerseniz, Ubuntu 14.04 için Nisan ayına kadar beklemek veya 12.04'te TRIM'i manuel olarak etkinleştirmek isteyebilirsiniz. Daha fazla bilgi için bu makaleye bakın .
OSE

5
Seri ATA (SATA) arayüzdür. SATA SSD'ler ve SATA kullanmayan sabit disk sürücüleri (HDD'ler) var.
Dennis,

Senin için para kazanmayacak bir şey almak zor bir yatırım ...
inf3rno

Yanıtlar:


25

Evet, çok fazla okur ve bir SSD bildirmek büyük bir fark yaratacaktır. 7200 RPM diskten ~ 100 IOPS'den daha fazlasını beklemeyebilirsiniz, en ucuz SSD ise en az 5 kat daha hızlı olabilir. İyi SSD ile 20000 IOPS veya daha fazlasına erişebilirsiniz.

Ayrıca SSD'deki rasgele yazılar, disk her zaman hareket etmek zorunda olmadığından çok daha hızlıdır.


4
İyi bir SSD'yi nasıl tanımlarsınız?
Mike,

Her şey performans ve kriterler ile ilgili. Yapacağım şey, satın aldığınız SSD modelinin kriterleri veya incelemeleri için google. Bunun dışında en.wikipedia.org/wiki/IOPS#Examples çok genel bir genel bakış sunar.
nmad

20

Burada göz önünde bulundurmanız gereken üç faktör var:

  1. Veritabanınızın boyutu
  2. Sunucuda sahip olduğunuz hafıza miktarı
  3. My.cnf yapılandırmanız, özellikle innodb_buffer_pool_size

Eğer kullanılabilir bellek> veritabanı boyutu , sunucu muhtemelen bellekte tüm verilerinizi saklamak ve bu nedenle bir SSD para kaybı olabilir mümkün olacak. InnoDB arabellek query_cacheseçenekleri ile ilgisi yoktur .

Eğer kullanılabilir bellek <veritabanı boyutu , bu sorguları diskten veri almak gerekir mümkündür. Son derece karmaşık sorgular için veya birçok kullanıcı bir kerede sorgu çalıştırıyorsa, bu durum diske baskı yapmaya başlayabilir.

Genel olarak, veritabanları en çok kullanılan verileri bellekte tutar - verilerinizin% 80'i nadiren / hiç kullanılmadıysa, performansı korumak için veritabanınızın yalnızca% 20'sini bellekte tutmanız gerekir.

İhtiyacınız olan tam hafıza miktarı hemen belli olmayacak, ancak veritabanınız 200 GB + değilse, Up_One'nin tavsiyesini almanızı ve SSD'ler yerine hafızaya fazladan para harcamanızı tavsiye ederim.

Not: Veritabanınız MyISAM kullanıyorsa (bunu kontrol edebilirsiniz show table status;), InnoDB'ye değiştirmeyi düşünün. MyISAM key_buffer_cachesadece InnoDB Buffer Pool'un tüm veri bloklarını sakladığı indeks bloklarını saklar. Çoğu durumda, InnoDB çalışmak için daha iyi bir motor olduğunu kanıtlayacaktır.


Veritabanını belleğe nasıl koyabilirim? sunucu bir köle olduğu için her zaman üzerine
Mike

Tablolarınız InnoDB ise ve InnoDB arabellek havuzunuz yeterince büyükse, MySQL veritabanınızın önbelleğini otomatik olarak bellekte yönetecek ve en sık kullanılan verileri her zaman bellekte tutmaya çalışacaktır. MySQL'in belgeleri bunun nasıl çalıştığına dair oldukça iyi bir genel bakış sunar .
Nathan Jolly

@NathanJolly tüm veritabanı bellekte olsa bile, veriler kaydedildiğinde okumaya devam edilecek ve sabit diske yazılacak. + Çeşitli sunucuların sınırlaması var. Örneğin, SQL Server Express sürümü yalnızca 1GB'lık bellek kullanmaya mahkumdur, bu nedenle ilk yerde büyük veri tabanı barındırmaz.
Jackofall

@Jackofall bu kesinlikle doğru olsa da, buradaki soru okuma ağırlıklı bir MySQL veritabanı belirledi. Diske ulaşmak yerine bellekten sunulabilen her salt okunur sorgu - hatta hızlı disk - iyi bir haber.
Nathan Jolly,

6

Bence bu iyi bir fikir değil!
Benim Önerileri
sizin InnoDB ara bellek havuzunun boyutunu artırmak MySQL kadar hız için en iyi yoldur. Daha fazla RAM ekleyebilirseniz yapın. Bu, sıcak verilerinizin çoğunu belleğe koyar, bu yüzden hayal edin! Bellek vs Disk!
Mükemmel senaryo, memeory'nizin veri tabanınızın
SSD büyüklüğüne sahip olması - harika ama pahalı olacak! ve sadece yoğun okuma işleri için iyidir.

Bu konuyla ilgili Vadim Tkachenko’dan güzel bir yazı için bu bağlantıya göz atın.


1
Bağlandığınız makale neredeyse 4 yaşında, SSD'nin fiyatları o zamana göre yarıdan daha az ve performans da çok arttı. Veritabanının boyutunu bellek? Peki ya 500Gb veri tabanı? Yalnızca RAM miktarını değil, aynı zamanda satın almanız gereken ve bu kadar çok bellek bankası bulunan sunucudur.
Yaroslav

DB boyutu ile ilgili olarak! Evet, bunu yapmanıza imkân yok - Ama dediğim gibi Bu mükemmel bir senaryo olacak!
Up_One

6

Bir alternatif vermek gerekirse: veriyi saklamak için büyük bir sabit disk (ideal olarak üç diskli RAID1) ve indeksleri tutmak için daha küçük bir SSD kullanabilirsiniz.

Gerekçe:

  • Dizinler oldukça küçüktür, bu nedenle daha küçük bir SSD kullanabilirsiniz.
  • Ortak sorgular çoğunlukla endeksleri de etkilemelidir
  • RAID1 size hata toleransı verir
  • RAID1 size rastgele okumalar için yük dengeleme sağlar
  • Bir disk arızalandığında üç disk hataya dayanıklılık bırakır
  • SSD başarısız olursa endeksler yeniden oluşturulabilir

5

Yap.

Ağır bir iş yüküne sahip olduğunuzdan bahsettiniz, bu yüzden veritabanlarında SSD'leri kullanmakla ilgili büyük problemden zaten kaçındınız: wearout. Yazma yok, aşınma yok, yani altınsın.

Edvinas.me'nin belirttiği gibi, IOPS'iniz SSD'de dönen disklerden daha hızlıdır. Bir veritabanı için, IOPS hemen hemen saniyedeki isteklere çevrilir. RAM önbelleğini yok sayarak, bir SSD'den 7200 RPM diskinden yaklaşık 100 kat daha fazla istek sunacaksınız.

TRIM, yoğun bir iş yükü olması ve diski yine de doldurmayı planladığınız gibi göründüğü için fazla fark yaratmayacak. Stres etme.

1500 dolarlık şeyin nereden geldiğinden emin değilim. Yerel (Avustralya) tedarikçisi kontrol etme, ben $ 750 için saygın marka bir 960GB SSD (alabilirsiniz http://www.auspcmarket.com.au/960gb-crucial-m500-sata-6gbps-2-5-7mm-with- 9-5mm-adaptör-ssd-okuma-500mb-s-yazma-400mb-s / ). Dönen diskler az çok ücretsizdir, ancak 750 $ hala 1500 dolardan çok daha lezzetli.

(Oh, bekleyin - büyük bir tedarikçiden büyük olasılıkla sipariş verdiniz, bu yüzden sizi SSD'nin burnundan alıyorlar? SSD'yi her zaman ayrı olarak satın alıyorum ve kendim takas ediyorum, ama bu olup olmadığını bilmiyorum. ortamınızda izin verilir.)

Muhtemelen daha az RAM ile de kurtulacaksınız, ancak tam iş yükünüzü bilmeden, RAM'e performansınızı düşürmeden güvenle azaltabileceğinizi karar vermek zordur.

Hala emin değilseniz, büyük 10k RPM sürücüleri elde edebilirsiniz, ancak çok daha yavaş olurken yine de neredeyse SSD'ye mal olacak.

1 TB'ın ötesine geçmeniz gerekiyorsa, SSD'ler çok pahalı olmaya başlar, ancak 1 TB'de SSD'nin net bir kazanç olduğunu söyleyebilirim.


3

Paranın karşılığındaki en büyük patlamanın innodb_db_bufferpool boyutunu arttırmasından kesinlikle katılıyorum, ancak maalesef veri setinizin ne kadar büyük olduğuna ve ne kadar sıklıkla farklı disk bloklarına erişildiğine bağlı. 200 GB + 'lık oldukça büyük bir veri tabanı bulunduruyorum, bu yüzden her şeyi RAM'e sığdırmak gerçekten bir seçenek değil ve bu nedenle yakın zamanda SSD tabanlı depolamaya geçtik. Erişebildiğim farklı RAID dizilerinde MySQL kullanımı için IOPS konusunda oldukça büyük bir araştırma yaptım. Sonuçlar burada:

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

test: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, io-motor = libaio, iodepth = 64 okuma: io = 3071,7 MB, bw = 5012,8KB / s, iops = 1253 , runt = 627475msec yazma: 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 900 GB SAS (2,5 ") disk

test: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengin = libaio, iodepth = 64 okuma: io = 3071,7 MB, bw = 10236KB / s, iops = 2558, runt = 307293msec yazma: io = 1024.4MB, bw = 3413.5KB / s, iops = 853, runt = 307293msec cpu: usr =% 2,73, sys =% 8,72, ctx = 904875, majf = 0, minf = 25

23,456 IOPS - Rackspace Performance 2 SSD sunucusu

test: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, io motor = libaio, iodepth = 64 okuma: io = 3071,7 MB, bw = 93708KB / s, iops = 23426, runt = 33566msec yazma: 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 Aynalı EDGE 480GB 2,5 "MLC'yi Arttırıyor ( http://www.edgememory.com )

test: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, io motor = libaio, iodepth = 64 okuma: io = 3068,4MB, bw = 141934KB / s, iops = 35483, runt = 22137msec yazma: io = 1027.7MB, bw = 47537KB / s, iops = 11884, runt = 22137msec cpu: usr =% 11.68, sys =% 69.89, ctx = 24379, majf = 0, minf = 20

Bu yüzden bugünün yüksek kalitede SSD'sinin şaşırtıcı performanslar olduğu açık. İki Aynalı SSD, 16 diskli SAN depolama kasasını kolayca geride bırakabilir ve bu tek başına zorlayıcı bir ifadedir.

Tüm ayrıntılarla ilgileniyorsanız, yazının geri kalanı blogumda bulunur:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.