มีสิ่งนั้นเป็นไดรฟ์ RAM แบบถาวรหรือไม่?


6

ฉันมีแล็ปท็อปที่มีการติดตั้งหลอดไฟ HDD ช้าซึ่งทำให้การทดสอบหน่วยของฉันทำงานช้า

ฉันสงสัยว่าฉันสามารถติดตั้งรูทเว็บฐานข้อมูล mysql บน ramdisk บางประเภทได้หรือไม่

จากสิ่งที่ฉันได้อ่านจาก ramdisks พวกเขาจะไม่ขัดขืน

มีอยู่แล้วเพื่อสร้าง ramdisk ที่เขียนการเปลี่ยนแปลงไปยังพื้นที่ของ hdd เมื่อปิดเครื่องและติดตั้ง ramdisk อีกครั้งใน bootup?


ฉันไม่เก่งในสคริปต์ดังนั้นจึงมีโปรแกรมหรือสคริปต์ใดบ้างที่จะทำในสิ่งที่ฉันต้องการ

ฉันขอขอบคุณข้อเสนอแนะทั้งหมดของ SSD แต่ฉันกำลังมองหาบางอย่างที่ฟรีและดีกว่าที่ฉันสามารถติดตั้งได้ตอนนี้ ขอบคุณ

1
ดูเหมือนว่าคำถาม superuser.com
Itay Moav -Malimovka

คำตอบ:


2

สิ่งที่คุณกำลังมองหาคือสิ่งที่เก็บข้อมูล fs ไว้ในหน่วยความจำยืนยันหากทำได้ แต่ไม่ต้องกังวลมากเกินไปเกี่ยวกับการสูญเสียข้อมูลของคุณ (เช่นถ้ามีคนปิดไฟ)

คุณสามารถดู cachefs และดูว่าคุณสามารถกำหนดให้ขี้เกียจจริงๆเกี่ยวกับการเขียน

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

คุณยังสามารถตั้งค่าตัวเลือกเมาท์ writeback สำหรับระบบไฟล์ของคุณ ดูตัวอย่าง นี้ .


สิ่งนี้ฟังดูดีคุณหมายถึงอะไร "ด้วยจำนวนหน่วยความจำที่สมเหตุสมผลที่คุณไม่ควรบล็อกในการเขียน" ฉันมี RAM 3gb แต่การทดสอบหน่วยที่เกี่ยวข้องกับการอ่านและเขียนไปยังฐานข้อมูลดูเหมือนจะใช้เวลานานกว่าบนแล็ปท็อปเครื่องนี้มากกว่าเครื่องอื่นดังนั้นฉันคิดว่าถ้าฉันติดฐานข้อมูลกับ ramdisk การอ่านและเขียนจะเร็วขึ้นมาก .

โอ้ฐานข้อมูล คุณต้องปรับแต่ง mysql ฉันสงสัย
bmargulies

1

คุณสามารถเขียนง่าย ๆ rc สคริปต์ที่ทำเช่นนั้น ฉันจำได้ว่าทำสิ่งที่คล้ายกันในวัน DOS (พร้อม autoexec.bat ) สำหรับการเข้าถึงไฟล์บางไฟล์อย่างรวดเร็ว

คุณอาจพิจารณาซื้อไดรฟ์ SSD หรือ RAM ที่มีอินเตอร์เฟส HDD แทน


1
มีสคริปต์ที่พร้อมใช้งานที่คุณรู้จักหรือไม่?

1

การจัดการกับ ramdisks ใน Linux นั้นเป็นเรื่องเล็กน้อย คุณสามารถสร้างและใช้งานได้หลายวิธีขึ้นอยู่กับความต้องการของคุณจากนั้นคัดลอกเนื้อหา (ด้วย cp หรือ dd) ไปยัง hdd ก่อนที่จะปิดกล่องหรือตามช่วงเวลาที่กำหนดเพื่อหลีกเลี่ยงการสูญเสียข้อมูลสำหรับการปิดเครื่องโดยไม่คาดคิด ลองดูที่วิธีการเหล่านี้ฉันคิดว่ามันตรงไปตรงมาพอ:

http://www.vanemery.com/Linux/Ramdisk/ramdisk.html

http://wiki.archlinux.org/index.php/Ramdisk

M


0

ramdisk อาจเป็นวิธีที่จะไป อย่างไรก็ตามหากคุณมีเงินที่จะใช้จ่ายและต้องการวิธีการแก้ปัญหาแบบถาวรคุณอาจต้องการดู SSD ฮาร์ดดิสก์ . เทคโนโลยียังค่อนข้างเล็กและไม่แข็งแกร่งเท่าฮาร์ดไดรฟ์แบบคลาสสิค


0

หากแอปของคุณมีขนาดเล็กพอคุณสามารถคว้า ไดรฟ์ Solid State 30gb สำหรับเครื่องของคุณ การวัดประสิทธิภาพแสดงให้พวกเขาอ่านได้เร็วขึ้น 3x หรือ 4x กว่าไดรฟ์ทั่วไป (และบางอย่างเช่น 2.4 เท่าเร็วเท่ากับไดรฟ์ 10k รอบต่อนาที) ไดรฟ์ที่ใหญ่กว่าต้องใช้ชุดรวม แต่ตัวที่ 30 กิ๊กนั้นต่ำกว่า $ 200


0

แม้ว่าสิ่งนี้จะไม่เกี่ยวข้องโดยตรงกับ ram disk แต่นี่อาจช่วยคุณแก้ปัญหาของคุณได้ ..

สิ่งที่คุณสามารถทำได้คือเรียกใช้เซิร์ฟเวอร์ mysql สองเครื่องโดยที่หนึ่งในนั้นเป็นเซิร์ฟเวอร์หลักที่มีอยู่ใน ramdisk และอีกเครื่องเป็นทาสที่บันทึกข้อมูลทั้งหมดลงใน HDD

ด้วยวิธีนี้ถ้าคุณต้องการเริ่มต้นเซิร์ฟเวอร์ mysql ที่ใช้ ramdisk หลังจากที่ถูกปิดใช้งานหรืออะไรก็ตามคุณสามารถทำได้ ..

cat mysqldump -uroot -hslaveServer dbName | mysql -uroot -hramdiskServer dbName


คุณให้รายละเอียดเพิ่มเติมได้ไหม ตัวอย่างเช่นฉันจะตั้งค่าให้เรียกใช้จาก ramdisk ได้อย่างไร ฉันต้องเปลี่ยนประเภทตารางทั้งหมดเป็น MEMORY หรือไม่

ฉันส่วนใหญ่คิดออกมาดัง ๆ แต่ฉันคิดว่าคุณติดตั้งเซิร์ฟเวอร์ mysql แยกต่างหากลงใน ramdisk mount (/ media / what) แล้วเรียกใช้จากที่นั่น
Matt

0

ระบบปฏิบัติการทำเช่นนั้นแล้วสำหรับการเข้าถึงระบบไฟล์ปกติ (บัฟเฟอร์การเขียนไปยัง RAM แล้วล้างข้อมูลในภายหลัง) แต่เพื่อให้มีประสิทธิภาพมากขึ้นฐานข้อมูลจำนวนมากจึงทำการ fsync () เพื่อบังคับให้ระบบปฏิบัติการล้างข้อมูลบัฟเฟอร์ไปยังดิสก์ซึ่งทำให้ช้าลง

การควบคุมว่า MySQL จะทำการซิงค์ที่ระดับฐานข้อมูลหรือไม่ ฉันดูที่ InnoDB และไม่อนุญาตให้คุณปิดการใช้งาน fsync

แต่การค้นหารอบ ๆ ฉันพบ libeatmydata ซึ่งสามารถปิดการใช้งาน fsync สำหรับกระบวนการที่ควรให้พฤติกรรมที่คุณต้องการ


ฉันไม่ทราบว่าระบบปฏิบัติการทำสิ่งนี้เพื่อคุณ ตารางส่วนใหญ่ของฉันคือ InnoDB ฉันคิดว่าฉันจะใช้ libeatmydata เพื่อการพัฒนาเท่านั้น ขอบคุณ

0

คุณบอกว่าคุณกำลังใช้งานคอมพิวเตอร์โน้ตบุ๊คอยู่ "ไฮเบอร์เนต" และฟังก์ชั่นการทำงานต่อทำงานอย่างสม่ำเสมอหรือไม่? ถ้าเป็นเช่นนั้น ... คุณสามารถใช้สิ่งนั้นได้อย่างต่อเนื่องและทำอย่างใดอย่างหนึ่งหรือทั้งสองอย่างจากรายการทั้งสองอย่างนี้เพื่อช่วยปรับปรุงเวลาในการเข้าถึงสำหรับหน้าเว็บและแบบสอบถาม MySQL:

  • (a) ตั้งค่าและใช้ ramfs สำหรับ DOCROOT ของคุณ google สำหรับ "Linux Ramdisk mini-HOWTO" เพื่อดูรายละเอียด สิ่งนี้อาจจะใช่หรือไม่ใช่ก็ได้ คุณอาจจะดีกว่าการบันทึก RAM ที่ใช้โดย MySQL (เช่น (b) ด้านล่าง) โดยเฉพาะหากคุณมีข้อมูลจำนวนมากในตาราง MEMORY เหล่านั้น

  • (b) โอนย้ายตารางฐานข้อมูล MySQL ที่คุณเข้าถึงบ่อยที่สุดไปยังเครื่องมือจัดเก็บข้อมูล MEMORY ตรวจสอบให้แน่ใจว่าโครงสร้างตารางของคุณไม่ต้องการคอลัมน์ BLOB หรือ TEXT ถ้าเป็นเช่นนั้นสิ่งนี้จะไม่ทำงาน อ่านเพิ่มเติมได้ที่นี่: http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

สำหรับแต่ละข้อด้านบนคุณจะต้องกำหนดเวลาให้คัดลอกภาพในหน่วยความจำออกไปยังดิสก์เป็นระยะ ข้อได้เปรียบคือคุณจะเขียนลงบนดิสก์ที่ช้าทุก ๆ ครั้งซึ่งก็คือ "ซิงค์" แบบช้าๆแทนที่จะเขียนด้วยการเปลี่ยนแปลงทุกครั้งในตาราง MySQL และการเปลี่ยนแปลงทุกไฟล์ใน DOCROOT ดังนั้นสำหรับทั้งสองกรณีคุณสามารถใช้ CRON เพื่อกำหนดเวลา "สำรองข้อมูล":

  • ในกรณี ramfs คุณสามารถสร้างไฟล์เก็บถาวร tar ของเนื้อหาทั้งหมดในระบบไฟล์

  • สำหรับตาราง MySQL คุณสามารถทำได้ สร้างชุดคำสั่งที่คล้ายกัน เพื่อต่อไปนี้:

    แทรกลงใน someInnoDBdatabase.tablename select * จาก someMemoryDatabase.tablename

    สมมติว่าตารางของคุณในฐานข้อมูลทั้งสองมีโครงสร้างที่แน่นอนเหมือนกัน คัดลอกทุกอย่างจากตารางใน someMemoryDatabase ลงใน someInnoDB ตารางฐานข้อมูลที่มีชื่อเดียวกัน - สำรองข้อมูลอย่างมีประสิทธิภาพ ตาราง MEMORY บนดิสก์

ในการสร้างตารางเหล่านั้นในฐานข้อมูลหน่วยความจำ:
สมมติว่าคุณมีตารางที่จัดการโดยเอ็นจิน on-disk ในตอนนี้คุณสามารถใช้ 'show tab tablename' เพื่อรับ MySQL เพื่อให้ SQL ตรงกับที่คุณจะต้องสร้างตารางนั้นอีกครั้ง ... จากนั้นเปลี่ยนส่วนของเอ็นจิ้นเป็น ระบุเพื่อใช้เอ็นจิน MEMORY และดำเนินการนั้น

หวังว่านี่จะช่วยได้!
-pbr


0

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


0

"ระบบปฏิบัติการทำเช่นนั้นแล้วสำหรับการเข้าถึงระบบไฟล์ปกติ (บัฟเฟอร์การเขียนไปยัง RAM แล้วล้างข้อมูลในภายหลัง) แต่เพื่อให้มีเสถียรภาพมากขึ้นฐานข้อมูลจำนวนมากจึงทำการ fsync () ... " - R Samuel Klatchko

ดังนั้นเพื่อเพิ่มความเร็วในการทดสอบหน่วยของคุณดังนั้นพวกเขาจึงไม่นั่งรอการเขียนแต่ละครั้งเพื่อให้เป็น fsync'ed อย่างสมบูรณ์มีหลายสิ่งที่คุณสามารถลองได้:

  • เรียกใช้การทดสอบในเครื่องเสมือนจริงที่ให้คุณเปิดการแคชการเขียนกลับ "ไม่ปลอดภัย" ซึ่งจะเปลี่ยน fsync () ให้กลายเป็น no-op ที่รวดเร็วมาก (แต่ทำเพื่อทดสอบหน่วยเท่านั้นไม่ใช่ในฐานข้อมูลการผลิต)
  • รันการทดสอบในเครื่องเสมือนด้วยตัวเลือก -snapshot เช่น QEMU ซึ่งจะเป็นการเปลี่ยนเส้นทางการเขียนทั้งหมดไปยังล็อกไฟล์ ในระหว่างการทดสอบจะทำการเปลี่ยนเส้นทางบางคนอ่านไปยังไฟล์บันทึกนั้นเพื่อรักษาภาพลวงตา การเขียนเชิงเส้นที่ค่อนข้างตรงไปยังล็อกไฟล์นั้นน่าจะเร็วกว่าการเขียนที่กระจัดกระจายไปทั่วแผ่นดิสก์
  • อย่างใดลดจำนวนการเขียน ในการทดสอบหน่วยของคุณ - ทำจริงๆ จะต้องมีการเขียนเพื่อทดสอบ ฐานข้อมูล?
  • หากคุณสามารถทดสอบการตัดแต่งได้ ฐานข้อมูลที่หน่วยทดสอบใช้เพื่อ พอดีกับ RAM ทั้งหมดอาจทำให้ระบบปฏิบัติการแคชล่วงหน้าฐานข้อมูลทั้งหมดในครั้งเดียว (แทนที่จะอ่านและแคชทีละนิดตามความจำเป็นในการทดสอบ) อาจ ทำการทดสอบได้เร็วขึ้น กับสิ่งที่ชอบ

    cat the_test_database.db > /dev/null

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