เหตุใดการนำเข้าไฟล์. 12 GB .sql ใช้เวลานานกว่า 36 ชั่วโมง


16

ฉันรอแล้ว 36 ชั่วโมงเพื่อนำเข้าไฟล์. sql ขนาด 12 GB ด้วยtype site.sql | mysqlคำสั่งง่ายๆ ฉันสามารถเห็นการibdata1เติบโตยังคงอยู่ในขณะนี้เกือบ 40 GB

เมื่อพิจารณาถึงทริกเกอร์และขั้นตอนการจัดเก็บอยู่ที่ส่วนท้ายของ. sql ฉันคิดว่า MySQL ควรเพิ่มข้อมูลและดัชนีสำคัญ

site.sql ถูกสร้างโดยใช้คำสั่งนี้จากเซิร์ฟเวอร์อื่น:

mysqldump -R -e --databases site --add-drop-database --add-create-database --add-drop-table -C --single-transaction --triggers

ใช้เวลานานเท่าไหร่


3
ซีพียูใช้ MySQL เท่าไหร่? หากเป็นค่าที่ต่ำอาจหมายความว่าคุณมีข้อ จำกัด ของดิสก์
Derek Downey

2
ไฟล์ .sql จริงๆไม่ได้อย่างรวดเร็วว่าจะนำเข้า ... มันเป็นจริงได้เร็วขึ้นเพื่อการถ่ายโอนข้อมูลไปยังแท็บ delim หรือ CSV LOAD DATA INFILEแล้วสร้างฐานข้อมูลที่ว่างเปล่าและการใช้งาน นอกจากนี้ในขณะที่คุณกำลังย้ายฐานข้อมูลทั้งหมดโปรดดูคำตอบของฉัน: การย้ายฐานข้อมูลระหว่างเซิร์ฟเวอร์หากคุณอยู่ในเวอร์ชันหลักเดียวกัน (โดยเฉพาะถ้าคุณต้องยกเลิก & เริ่มใหม่)
Joe

คำตอบ:


23

ลองสิ่งนี้:

$ ps -ef|grep [m]ysql

ระบุ id กระบวนการแล้ว

$ strace -cp <pid>

ทิ้งไว้ 10 ^Cวินาทีหรือนาทีที่แล้ว ที่จะบอกคุณว่ากระบวนการใช้เวลาอยู่ที่ไหนเช่นอาจรอให้ดิสก์ได้ถ้าคุณเห็นreadและwriteครอง


4
+1 เพราะฉันเพิ่งเรียนรู้คำสั่งใหม่ (strace): P แก้ไข: อึไม่สามารถใช้ได้ใน mac ของฉันตามค่าเริ่มต้น
Derek Downey

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

3
Strace คือ Linux - Solaris equiv คือการมัด Dtrace พร้อมใช้งานบน Mac
ออกุสตุส

ดังนั้นมันจึงเป็น จะไปอ่านมันตอนนี้
Derek Downey

ระวัง: คำสั่งที่ดีที่จะรู้ แต่ระวังคำสั่งนี้ผิดพลาดเช่น MySQL ของฉัน ไม่รู้ทำไม ก่อนที่ MySQL จะล้มเหลวเซิร์ฟเวอร์จะไม่ตอบสนองสักครู่
dabest1

7

คุณมีตาราง InnoDB ที่มีคีย์หลักหรือไม่

  1. มีหลายคอลัมน์ไหม
  2. มี VARCHAR กว้างไหม
  3. และดัชนีที่ไม่ซ้ำจำนวนมาก?
  4. ดัชนีที่ไม่ซ้ำกันอย่างน้อยหนึ่งรายการที่มีคีย์กว้าง

เงื่อนไขใด ๆ เหล่านี้อาจทำให้โหนด BTREE ขนาดใหญ่ในดัชนีของคุณมีใบไม้น้อยมากในแต่ละโหนด BTREE คีย์คลัสเตอร์ในคีย์หลักนั้นจะถูกแนบกับรายการคีย์ที่ไม่ซ้ำแต่ละรายการในคีย์ที่ไม่คลัสเตอร์

การพิจารณาอื่น: ผลรวมของหน้าข้อมูล InnoDB น้อยกว่าหน้าดัชนี InnoDB หรือไม่

คุณสามารถค้นหาด้วยแบบสอบถามนี้ (ในหน่วย MB):

SELECT SUM(data_length)/POWER(1024,2) InnoDBData,
SUM(index_length)/POWER(1024,2) InnoDBIndexes
FROM information_schema.tables WHERE engine='InnoDB';

การพิจารณาเพิ่มเติม: คุณเปิดใช้งานการบันทึกแบบไบนารีในเซิร์ฟเวอร์ DB ที่คุณกำลังโหลดหรือไม่ หากคุณเป็นโปรดทำสิ่งนี้บนเซิร์ฟเวอร์ที่คุณกำลังโหลด:

mysql -h... -u... -p... -A -e"SET sql_log_bin=0; source site.sql"

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


6

คุณแน่ใจหรือว่าตารางที่คุณกำลังอ่านอยู่นั้นไม่มีทริกเกอร์และดัชนีและข้อ จำกัด ? คุณใช้ฮาร์ดแวร์และระบบปฏิบัติการใดอยู่ พื้นที่เก็บข้อมูลของคุณมีการกำหนดค่าอย่างไร?

ฉันคุ้นเคยกับ oracle มากกว่า แต่การนำเข้า 12G บนโต๊ะโดยไม่มีทริกเกอร์ดัชนีและข้อ จำกัด ควรไปที่ 200GB / h อย่างง่ายดาย ทริกเกอร์ตัวเดียวสามารถสร้างกระบวนการให้กับหอยทากขึ้นอยู่กับว่าทริกเกอร์ทำอะไร ...

ฉันหวังว่านี่จะช่วยได้

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