SSD กับ HDD สำหรับฐานข้อมูล


42

ฉันกำลังพยายามซื้อเซิร์ฟเวอร์ใหม่เพื่อเรียกใช้เซิร์ฟเวอร์ MySQL บน เซิร์ฟเวอร์ใหม่นี้จะเป็นทาสของเครื่องหลักของฉัน อย่างไรก็ตามเซิร์ฟเวอร์นี้จะใช้สำหรับการรายงานเท่านั้น "จำนวนมากอ่านและแบบสอบถามที่ซับซ้อน"

ตอนนี้ฉันกำลังมองหาการลงทุนในฮาร์ดไดรฟ์โซลิดสเตต แต่ก็สงสัยว่ามันคุ้มค่าหรือไม่ ความแตกต่างระหว่าง SSD และฮาร์ดไดรฟ์ SATA 7200 อยู่ที่ประมาณ $ 1,500 และ SSD นั้นมีพื้นที่ดิสก์น้อยกว่า ถ้าฉันลงทุนกับ SSD จะเห็นความเร็วได้หรือไม่

ฉันสามารถซื้อ 4 (500GB SATA 7200) ในราคา $ 1,500 น้อยกว่าการซื้อ 2 (500GB SSD)

คุณช่วยฉันในการตัดสินใจดูว่ามันคุ้มค่ากับการอัพเกรดหรือไม่?

อีกสิ่งที่ฉันอยากจะพูดถึงคือฉันไม่ได้ใช้query_cacheดังนั้นจะมีจำนวนมากอ่านดิสก์

เซิร์ฟเวอร์นี้จะมี RAM 32GB และจะใช้งาน Ubuntu 12.04


ฐานข้อมูลของคุณมีขนาดเท่ากิกะไบต์? คำตอบใดด้านล่างนี้ถูกต้องที่สุดขึ้นอยู่กับการทำความเข้าใจว่ามีข้อมูลมากน้อยเพียงใด
Nathan Jolly

1
หากคุณใช้งาน SSD คุณอาจต้องรอจนถึงเดือนเมษายนสำหรับ Ubuntu 14.04 หรือเปิดใช้งาน TRIM ด้วยตนเองใน 12.04 ดูบทความนี้สำหรับข้อมูลเพิ่มเติม
OSE

5
Serial ATA (SATA) เป็นอินเตอร์เฟส มี SATA SSD และมีฮาร์ดดิสก์ไดรฟ์ (HDDs) ที่ไม่ได้ใช้ SATA
เดนนิส

การซื้อสิ่งที่ไม่ทำเงินให้คุณเป็นการลงทุนที่ไม่ค่อย ...
inf3rno

คำตอบ:


25

ได้ด้วยการอ่านและรายงาน SSD จำนวนมากจะสร้างความแตกต่างอย่างมาก จากไดรฟ์ 7200 รอบต่อนาทีคุณสามารถคาดหวังได้ไม่เกิน ~ 100 IOPS ในขณะที่ SSD ที่ถูกที่สุดสามารถมีความเร็วขั้นต่ำ 5 เท่าได้อย่างรวดเร็ว ด้วย SSD ที่ดีคุณจะได้รับถึง 20,000 IOPS หรือมากกว่านั้น

นอกจากนี้การเขียนแบบสุ่มใน SSD นั้นเร็วกว่ามากเนื่องจากดิสก์ไม่จำเป็นต้องเคลื่อนย้ายทุกครั้ง


4
คุณจะกำหนด SSD ที่ดีอย่างไร
Mike

มันคือทั้งหมดที่เกี่ยวกับประสิทธิภาพและมาตรฐาน สิ่งที่ฉันจะทำคือ google สำหรับการวัดประสิทธิภาพหรือตรวจสอบรุ่นของ SSD ที่คุณกำลังซื้อ นอกเหนือจากนั้นen.wikipedia.org/wiki/IOPS#ตัวอย่างให้ภาพรวมทั่วไปมาก
nmad

20

มีสามปัจจัยที่คุณต้องพิจารณาที่นี่:

  1. ขนาดของฐานข้อมูลของคุณ
  2. จำนวนหน่วยความจำที่คุณมีในเซิร์ฟเวอร์
  3. การกำหนดค่า my.cnf ของคุณโดยเฉพาะ innodb_buffer_pool_size

หากหน่วยความจำที่มีอยู่> ขนาดฐานข้อมูลเซิร์ฟเวอร์ของคุณอาจเก็บข้อมูลทั้งหมดไว้ในหน่วยความจำได้ดังนั้น SSD อาจเสียเงิน บัฟเฟอร์ InnoDB ไม่มีส่วนเกี่ยวข้องกับquery_cacheตัวเลือก

ถ้ามีขนาดหน่วยความจำ <ขนาดฐานข้อมูลเป็นไปได้ว่าแบบสอบถามจะต้องดึงข้อมูลจากดิสก์ สำหรับคิวรีที่ซับซ้อนมากหรือหากผู้ใช้หลายคนกำลังรันเคียวรีพร้อมกันสิ่งนี้อาจเริ่มก่อให้เกิดความเครียดบนดิสก์

โดยทั่วไปฐานข้อมูลจะเก็บข้อมูลที่ใช้มากที่สุดไว้ในหน่วยความจำหาก 80% ของข้อมูลของคุณไม่ค่อยมี / ไม่เคยใช้คุณจะต้องเก็บฐานข้อมูลไว้ 20% ในหน่วยความจำเพื่อรักษาประสิทธิภาพ

จำนวนหน่วยความจำที่แน่นอนที่คุณต้องการจะไม่ชัดเจนในทันที แต่ถ้าฐานข้อมูลของคุณคือ 200GB + ฉันขอแนะนำอย่างละเอียดให้ทำตามคำแนะนำของ Up_One และใช้จ่ายเงินเพิ่มในหน่วยความจำแทน SSD

หมายเหตุ: หากฐานข้อมูลของคุณใช้ MyISAM (คุณสามารถตรวจสอบได้ด้วยshow table status;) พิจารณาเปลี่ยนเป็น InnoDB MyISAM key_buffer_cacheเก็บเฉพาะดัชนีบล็อกโดยที่ InnoDB Buffer Pool เก็บบล็อกข้อมูลทั้งหมด ในกรณีส่วนใหญ่ InnoDB จะพิสูจน์ให้เป็นเครื่องมือที่ดีกว่าในการทำงานกับ


ฉันจะวางฐานข้อมูลในหน่วยความจำได้อย่างไร เซิร์ฟเวอร์เป็นทาสดังนั้นจึงจะมีการเขียนบนมันตลอดเวลา แต่มันจะมีภาระการอ่านหนักเพราะรายงาน
Mike

หากตารางของคุณคือ InnoDB และหากพูลบัฟเฟอร์ InnoDB ของคุณมีขนาดใหญ่พอ MySQL จะจัดการแคชฐานข้อมูลของคุณในหน่วยความจำโดยอัตโนมัติและจะพยายามเก็บข้อมูลที่ใช้บ่อยที่สุดในหน่วยความจำตลอดเวลา เอกสารของ MySQL ให้ภาพรวมที่ดีงามของวิธีการทำงานนี้
Nathan Jolly

@NathanJolly แม้ว่าฐานข้อมูลทั้งหมดจะอยู่ในหน่วยความจำจะยังคงมีการอ่านและเขียนลงในฮาร์ดดิสก์เมื่อข้อมูลถูกบันทึก + มีข้อ จำกัด ของเซิร์ฟเวอร์ต่าง ๆ ตัวอย่างเช่นเวอร์ชันของ SQL Server Express จะต่อยอดเพื่อใช้หน่วยความจำเพียง 1GB เท่านั้นดังนั้นจึงไม่สามารถรองรับฐานข้อมูลขนาดใหญ่ในหน่วยความจำในตำแหน่งที่ถูกต้อง
Jackofall

@ Jackofall ในขณะที่มันเป็นจริงอย่างสมบูรณ์คำถามที่นี่ระบุฐานข้อมูล MySQL อ่านอย่างหนัก แบบสอบถามแบบอ่านอย่างเดียวทุกข้อที่สามารถให้บริการจากหน่วยความจำแทนที่จะไปถึงดิสก์ - แม้แต่ดิสก์ที่รวดเร็ว - เป็นข่าวดี
นาธันจอลลี่

6

ฉันไม่คิดว่าเป็นความคิดที่ดีเช่นนี้!
คำแนะนำของฉัน
เพิ่มขนาดของพูลบัฟเฟอร์ InnoDB ของคุณเป็นวิธีที่ดีที่สุดในการเพิ่มความเร็ว MySQL หากคุณสามารถเพิ่ม RAM ได้ให้ทำ นี่จะทำให้ข้อมูลร้อนแรงส่วนใหญ่ของคุณอยู่ในหน่วยความจำ ดิสก์ vs หน่วยความจำ!
สถานการณ์ที่สมบูรณ์แบบคือการมีหน่วยความจำขนาด
SSD ฐานข้อมูลของคุณ- ดี แต่มันจะมาแพง! และเป็นเรื่องที่ดีสำหรับงานที่ต้องอ่านมาก

ตรวจสอบลิงค์นี้สำหรับบทความที่ดีเกี่ยวกับเรื่องนี้จาก Vadim Tkachenko


1
บทความที่คุณกำลังเชื่อมโยงไปถึงนั้นมีอายุเกือบ 4 ปีราคาของ SSD เทียบกับช่วงเวลานั้นน้อยกว่าครึ่งและประสิทธิภาพก็เพิ่มขึ้นเช่นกัน หน่วยความจำขนาดของฐานข้อมูลหรือไม่ แล้วฐานข้อมูล 500Gb ล่ะ? ไม่เพียง แต่ปริมาณของ RAM แต่ยังรวมถึงเซิร์ฟเวอร์ที่คุณต้องซื้อซึ่งมีหน่วยความจำมากมาย
Yaroslav

เกี่ยวกับขนาดฐานข้อมูล! ใช่ไม่มีวิธีที่คุณสามารถทำได้ - แต่อย่างที่ฉันบอกว่านี่จะเป็นสถานการณ์ที่สมบูรณ์แบบ!
Up_One

6

เพื่อเป็นทางเลือก: คุณสามารถใช้ทั้งสองฮาร์ดดิสก์ขนาดใหญ่ (ในอุดมคติ RAID1 ที่มีดิสก์สามตัว) เพื่อเก็บข้อมูลและ SSD ขนาดเล็กเพื่อเก็บดัชนี

เหตุผล:

  • ดัชนีมีขนาดค่อนข้างเล็กดังนั้นคุณสามารถใช้ SSD ที่เล็กลงได้
  • เคียวรีทั่วไปควรตีดัชนีเป็นหลักอยู่ดี
  • RAID1 ให้ความทนทานต่อความผิดพลาด
  • RAID1 ช่วยให้คุณสมดุลการโหลดสำหรับการอ่านแบบสุ่ม
  • ดิสก์สามตัวทำให้เกิดความผิดปกติหากดิสก์ล้มเหลว
  • สามารถสร้างดัชนีใหม่ได้หาก SSD ล้มเหลว

5

ทำมัน.

คุณพูดถึงว่าคุณมีภาระงานหนักในการอ่านดังนั้นคุณจึงหลีกเลี่ยงปัญหาใหญ่ในการใช้ SSD บนฐานข้อมูล: เสื่อมสภาพ ไม่มีการเขียนหมายถึงไม่มีการสึกหรอดังนั้นคุณเป็นสีทอง

ดังที่ edvinas.me กล่าวไว้ IOPS ของคุณนั้นมีขนาดที่เร็วกว่า SSD มากกว่าด้วยดิสก์ที่กำลังหมุน สำหรับฐานข้อมูล IOPS จะแปลคำขอเป็นวินาทีต่อวินาที ไม่สนใจแคช RAM คุณจะให้บริการคำขอได้มากถึง 100 เท่าจาก SSD มากกว่าจากดิสก์ 7200RPM

TRIM จะไม่สร้างความแตกต่างมากนักเนื่องจากเป็นภาระงานที่อ่านหนักและดูเหมือนว่าคุณวางแผนที่จะเติมดิสก์อยู่ดี อย่าเครียดกับมัน

ฉันไม่แน่ใจว่าสิ่งที่มาจาก $ 1,500 ตรวจสอบซัพพลายเออร์ในพื้นที่ของฉัน (ออสเตรเลีย) ฉันจะได้รับ 960GB SSD ของยี่ห้อที่มีชื่อเสียงในราคา $ 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 / ) ดิสก์หมุนได้ฟรีมากขึ้นหรือน้อยลง แต่ $ 750 ยังคงอร่อยกว่า $ 1,500

(โอ้รอ - คุณอาจจะสั่งซื้อจากซัพพลายเออร์ชื่อใหญ่ดังนั้นพวกเขากำลังชาร์จคุณผ่านทางจมูกสำหรับ SSD หรือไม่ฉันมักจะซื้อ SSD แยกจากกันและสลับเป็นตัวของฉันเอง อนุญาตในสภาพแวดล้อมของคุณ)

คุณอาจจะได้รับ RAM ที่น้อยลงเช่นกัน แต่ถ้าไม่ทราบปริมาณงานที่แน่นอนของคุณก็เป็นการยากที่จะตัดสินว่าคุณสามารถลด RAM ได้อย่างปลอดภัยหรือไม่โดยไม่กระทบต่อประสิทธิภาพ

หากคุณยังไม่แน่ใจคุณสามารถรับไดรฟ์ RK ขนาดใหญ่ได้ 10k แต่จะสิ้นสุดลงด้วยการคิดราคาเกือบเท่า SSD ในขณะที่ช้ากว่ามาก

หากคุณต้องการปรับขนาดเกิน 1TB จากนั้น SSD เริ่มมีราคาแพงเกินไป แต่ที่ 1TB ฉันจะบอกว่า SSD นั้นชนะได้อย่างชัดเจน


3

ฉันเห็นด้วยว่าปังที่ใหญ่ที่สุดสำหรับเจ้าชู้มาจากการเพิ่มขนาด Innodb_db_bufferpool ของคุณ แต่น่าเสียดายที่มันขึ้นอยู่กับว่าชุดข้อมูลของคุณมีขนาดใหญ่เพียงใดและมีการเข้าถึงบล็อกดิสก์ที่แตกต่างกันบ่อยเพียงใด ฉันรักษาฐานข้อมูลหลายตัวที่มีขนาดค่อนข้างใหญ่ 200 GB + ดังนั้นการปรับทุกอย่างให้เป็น RAM ไม่ใช่ตัวเลือกจริงๆและด้วยเหตุนี้เราจึงเปลี่ยนไปใช้ที่เก็บข้อมูลบน SSD ฉันได้ทำการวิจัยครั้งใหญ่ในแง่ของ IOPS สำหรับ MySQL ที่ใช้ในอาร์เรย์ RAID ที่แตกต่างกันที่ฉันสามารถเข้าถึงได้ นี่คือผลลัพธ์:

1,253 IOPS - ดิสก์ 4 x SCSI 15k (3.5 ")

การทดสอบ: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 อ่าน: io = 3071.7MB, bw = 5012.8KB / s, iops = 1253 , runt = 627475msec เขียน: 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 ")

การทดสอบ: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 อ่าน: io = 3071.7MB, bw = 10236KB / s, iops = 2558, runt = 307293msec เขียน: 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 - เซิร์ฟเวอร์ SSD แบบ Rackspace Performance 2

การทดสอบ: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 อ่าน: io = 3071.7MB, bw = 93708KB / s, iops = 23426, runt = 33566msec เขียน: 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 Boost 480GB 2.5 "MLC ( http://www.edgememory.com )

ทดสอบ: (g = 0): rw = randrw, bs = 4K-4K / 4K-4K / 4K-4K, ioengine = libaio, iodepth = 64 อ่าน: io = 3068.4MB, bw = 141934KB / s, iops = 35483, runt = 22137msec เขียน: io = 1027.7MB, bw = 47537KB / s, iops = 11884, runt = 22137msec cpu: usr = 11.68%, sys = 69.89, ctx = 24379, majf = 0, minf = 20377

ชัดเจนว่า SSD คุณภาพสูงในปัจจุบันเป็นนักแสดงที่น่าทึ่ง Mirrored SSD สองตัวสามารถมีประสิทธิภาพเหนือกว่ากล่องเก็บข้อมูล SAN 16 ดิสก์อย่างง่ายดายและนั่นเป็นข้อความที่น่าสนใจอย่างเดียว

หากคุณสนใจในรายละเอียดทั้งหมดส่วนที่เหลือของการเขียนพบในบล็อกของฉัน:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.