วิธีเปิดไฟล์ SQL dump ขนาดใหญ่บน Mac (โดยไม่แครช)

คุณดับเบิลคลิกไฟล์ส่งออก .sql ขนาด 20–50 GB แล้วโปรแกรมแก้ไขก็หมุนติ้ว ค้าง แล้วดับไป คุณเปิดไฟล์ยังไม่ได้ด้วยซ้ำ ไม่ต้องพูดถึงการลบตารางที่บวมสักตาราง นี่คือสาเหตุที่โปรแกรมแก้ไขสำลัก วิธีแก้ผ่าน command-line และวิธีที่เร็วกว่า

dump ของฐานข้อมูลระดับ production สามารถมีขนาดหลายสิบกิกะไบต์ได้อย่างง่ายดาย ทันทีที่คุณลองเปิดมันในโปรแกรมแก้ไขข้อความปกติ พัดลมของ Mac ก็เริ่มหมุน ลูกบอลหมุนโผล่มา และในที่สุดแอปก็ปิดตัวลง บางครั้งพางานที่ยังไม่ได้บันทึกในหน้าต่างอื่นหายไปด้วย

ทำไมโปรแกรมแก้ไขจึงสำลัก dump ขนาดใหญ่

VS Code, TextEdit, Sublime Text และเพื่อนพ้อง ถูกออกแบบมาให้โหลด ทั้งไฟล์เข้าสู่หน่วยความจำ เพื่อให้เลื่อน ค้นหา และไฮไลต์ได้ทันที ซึ่งไม่มีปัญหากับไฟล์ซอร์สโค้ดขนาด 2 MB แต่สำหรับ dump ขนาด 40 GB นั่นหมายความว่าโปรแกรมแก้ไขพยายามจอง 40 GB (บวกโอเวอร์เฮดสำหรับโครงสร้างข้อมูลภายในของมัน) ใน RAM

Mac ของคุณมี 16 หรือ 32 GB ก่อนที่ไฟล์จะโหลดเสร็จสมบูรณ์เสียอีก ระบบก็หน่วยความจำจริงหมด เริ่มสลับ (swap) ไปยังดิสก์ และช้าลงจนหยุดนิ่ง โปรแกรมแก้ไขส่วนใหญ่ยังปฏิเสธตรงๆ อีกด้วย: VS Code จำกัดไฟล์ที่ประมาณ 50 MB สำหรับโหมดแก้ไขเต็มรูปแบบ แล้วเปลี่ยนไปใช้โหมดจำกัด TextEdit ก็ค้างไปเฉยๆ ส่วน Sublime จองหน่วยความจำจนกระทั่งแครช และถึงคุณจะเปิดไฟล์ได้ การไฮไลต์ไวยากรณ์และการค้นหาก็จะสแกนซ้ำหลายกิกะไบต์ในทุกครั้งที่กดแป้น

ปัญหาหลัก: เครื่องมือเหล่านี้สมมติว่ามี การเข้าถึงแบบสุ่ม (random access) ต่อทั้งเอกสาร แต่ dump ไม่ต้องการสิ่งนั้น มันคือรายการคำสั่งที่เรียงตามลำดับ คุณแค่ต้อง สตรีม ผ่านมันเท่านั้น

วิธีแบบ command-line

เครื่องมือ Unix บน Mac ของคุณสตรีมอยู่แล้ว มันจึงไม่เคยโหลดทั้งไฟล์ พวกมันเป็นทางเลือกแรกแบบคลาสสิก:

# ดูบรรทัดแรกและบรรทัดสุดท้ายโดยไม่ต้องเปิดทั้งไฟล์
head -n 50 dump.sql
tail -n 50 dump.sql

# แบ่ง dump ออกเป็นชิ้นขนาด 100 MB ชื่อ part_aa, part_ab, ...
split -b 100m dump.sql part_

# ดึงบล็อกของตารางหนึ่งออกมาระหว่างเครื่องหมายสองจุด
sed -n '/CREATE TABLE `users`/,/UNLOCK TABLES/p' dump.sql > users.sql

วิธีนี้ใช้ได้ แต่มันเปราะบางและน่าเบื่อ split -b ตัดตามขอบเขตไบต์ดิบ มันจึงจะหั่นตรงกลางคำสั่ง INSERT เลย ชิ้นที่ได้จึงไม่ใช่ SQL ที่ถูกต้องด้วยตัวมันเอง ส่วนกลเม็ดช่วง sed ขึ้นอยู่กับเครื่องหมายที่แม่นยำซึ่งเครื่องมือ dump แต่ละตัวบังเอิญสร้างออกมา เปลี่ยนเวอร์ชัน MySQL หรือย้ายไป PostgreSQL แล้วรูปแบบก็ไม่ตรงอีกต่อไป และไม่มีสิ่งใดในนั้นให้ภาพว่าจริงๆ แล้วมีอะไร อยู่ใน ไฟล์ คุณต้องเดาว่าตารางไหนคือตัว 30 GB ก่อนถึงจะเจาะจงไปที่มันได้

เปิดและกรองมันด้วย DumpCleaner

DumpCleaner ถูกสร้างมาเพื่อไฟล์ขนาดนี้โดยเฉพาะ มันสตรีม dump แบบเดียวกับที่ command line ทำ แต่มันเข้าใจโครงสร้าง SQL คุณจึงได้รายการตารางจริง และผลลัพธ์ที่ปลอดภัยและตระหนักถึงคำสั่ง:

  1. ลากไฟล์เข้าไป DumpCleaner เปิด dump โดยสตรีมมันเป็นชิ้นขนาดราว 1 MB ไฟล์ 50 GB เปิดด้วย RAM ราว 50 MB ไม่มีอะไรค้าง
  2. ดูทุกตาราง มันสแกน dump และแสดงรายการแต่ละตารางพร้อมขนาด คุณจึงเห็นทันทีว่าตารางไหนที่ทำให้ไฟล์บวม
  3. ยกเลิกการเลือกสิ่งที่ไม่ต้องการ เอาติ๊กออกจากตาราง log, session หรือ analytics ขนาดยักษ์ DumpCleaner คงคำสั่งไว้ทั้งคำสั่ง ไม่มี INSERT ที่ถูกตัดครึ่ง
  4. ส่งออก เขียนไฟล์ .sql ใหม่ที่เล็กลง ซึ่งเปิดและนำเข้าได้สบายในที่สุด ไฟล์ต้นฉบับของคุณไม่ถูกแก้ไข

เนื่องจากมันประมวลผล dump ขนาด 50 GB และใหญ่กว่าด้วยหน่วยความจำคงที่ คุณจึงไม่ต้องคิดถึง RAM ของ Mac เลย และเพราะมันอ่านต้นทางแล้วเขียนผลลัพธ์แยกต่างหาก dump ที่คุณเริ่มด้วยจึงยังคงอยู่เหมือนเดิมทุกประการ

เปิด dump ที่โปรแกรมแก้ไขของคุณเปิดไม่ได้

DumpCleaner สตรีม SQL dump ทุกขนาดด้วยหน่วยความจำคงที่ ไม่แครช ไม่ swap ไม่ต้องรอ ลากไฟล์ 50 GB เข้ามา เอาตารางที่ไม่ต้องการออก ส่งออกไฟล์ที่เล็กลง แอปเนทีฟสำหรับ macOS & iPadOS ซื้อครั้งเดียวจบ

ดาวน์โหลดบน App Store

คำถามที่พบบ่อย

DumpCleaner รองรับ SQL dump ได้ใหญ่แค่ไหน?

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

DumpCleaner โหลดทั้งไฟล์เข้า RAM หรือไม่?

ไม่ ต่างจากโปรแกรมแก้ไขข้อความ มันอ่าน dump เป็นชิ้นเล็กๆ และคงการใช้หน่วยความจำไว้คงที่ที่ราว 50 MB ไม่ว่าไฟล์จะเป็น 200 MB หรือ 50 GB

ฉันแบ่ง dump ตามตารางได้ไหม?

ได้ แทนที่จะให้ split ตัดแบบมั่วตามขอบเขตไบต์ DumpCleaner เข้าใจโครงสร้างตาราง ยกเลิกการเลือกตารางที่ไม่ต้องการ แล้วส่งออกไฟล์ที่สะอาดพร้อมเฉพาะตารางที่คุณเก็บไว้

DumpCleaner แก้ไขไฟล์ต้นฉบับของฉันหรือไม่?

ไม่ dump ต้นทางถูกอ่านเท่านั้น DumpCleaner เขียนไฟล์ใหม่เสมอ ไฟล์ต้นฉบับของคุณจึงไม่ถูกแตะต้อง

เลิกต่อสู้กับโปรแกรมแก้ไขของคุณ

ลาก dump ขนาดยักษ์เข้ามา เอาตารางที่ไม่ต้องการออก ส่งออกไฟล์ที่เปิดได้จริง DumpCleaner จัดการได้ทุกขนาดด้วยหน่วยความจำคงที่

ดาวน์โหลดบน App Store