ฉันจะอัพโหลด 1000s nodes ต่อชั่วโมงไปยังเว็บไซต์ drupal 7 แบบสดและหลีกเลี่ยงการหยุดชะงักได้อย่างไร


9

ไม่นานที่ผ่านมาฉันเขียนเกี่ยวกับการหยุดชะงักที่นี่: PDOException: SQLSTATE [40001]: ความล้มเหลวในการทำให้เป็นอันดับ: 1213 Deadlock พบเมื่อพยายามล็อค;

แม้ว่าทีมพัฒนาของฉันจะพยายามทำทุกอย่าง แต่เราก็ยังได้รับข้อผิดพลาดดังนี้:

PDOException: SQLSTATE [40001]: ความล้มเหลวในการทำให้เป็นอันดับ: 1213 Deadlock พบเมื่อพยายามล็อค; ลองรีสตาร์ทธุรกรรม: INSERT INTO {location_instance} (nid, vid, uid, genid, ฝาปิด) VALUES (: db_insert_placeholder_0,: db_insert_placeholder_2,: db_insert_placeholder_2,: db_insert_placeholder_2,: db_insert_placeholder_3,: db_insert_placeholder_3,: db_insert_placeholder_3,: db_insert_placeholder_3,: db_insert_placeholder_3,: db_insert_placeholder_3,: db_insert_placeholder_3 อาเรย์ ([: db_insert_placeholder_0] => 1059 [: db_insert_placeholder_1] => 1059 [: db_insert_placeholder_4] ในตำแหน่ง (): 9 (1000: 0 ตำแหน่ง):> cck: field_item_location: 1059 [: db_insert_placeholder_0] => 1059 [: db_insert_placeholder_0] => 1059 /var/www/website.com/sites/all/modules/location/location.module)

แม้จะมีตารางเฉพาะในตัวอย่างนั้นเราได้รับข้อผิดพลาดนี้ในตารางอื่น

นี่คือสถานการณ์ของฉัน ฉันได้ทำโครงการมหาวิทยาลัยขนาดใหญ่ ในเวลาใดก็ตามมีผู้อยู่อาศัยในมหาวิทยาลัย 50,000 คนที่ใช้ระบบทุกวัน นอกจากนั้นฉันกำลังโยกย้ายเนื้อหารายการทั้ง 1000 ด้วยตนเองและด้วยตนเองผ่านโมดูลรหัสที่กำหนดเอง (การย้ายข้อมูลจากมหาวิทยาลัยเก่า) ไปยังเว็บไซต์ Drupal 7 ใหม่นี้

ข้อผิดพลาดนี้กำลังฆ่าเราจนถึงจุดที่เราเกือบพร้อมที่จะทิ้งเศษงานมูลค่าปีสุดท้ายและไปกับสิ่งอื่นถ้า Drupal ไม่สามารถจัดการกับภาระประเภทนี้ได้

แต่นั่นเป็นคำถามของฉันมากขึ้นหรือน้อยลง - Drupal จะจัดการกับการโหลดประเภทนี้ได้อย่างไร ฉันจะจัดระเบียบกระบวนการทำงานของฉันเพื่อให้สามารถจัดการกิจกรรมมากมายนี้ได้อย่างไร นี่เป็นปัญหาของ Drupal หรือไม่? ปัญหาฐานข้อมูลหรือไม่

โดยเฉพาะฉันใช้ Ubuntu, LAMP stack 16GB RAM ฉันเปิดรับข้อเสนอแนะใด ๆ ไม่ว่าจะเป็น Drupal ที่เกี่ยวข้องกับฐานข้อมูลที่เกี่ยวข้องกับการกำหนดค่าเซิร์ฟเวอร์ที่เกี่ยวข้องหรือเวิร์กโฟลว์ที่แตกต่างกันเพื่อทำงานในความสามารถของ Drupal ดังนั้นอย่าลังเลที่จะแนะนำอะไรถ้าคุณมีประสบการณ์กับกิจกรรมมากมาย


มีบทความเกี่ยวกับการนำเข้าชุดข้อมูลขนาดใหญ่evolvingweb.ca/story/…
kalabro

ขอบคุณสำหรับสิ่งนั้น. มันเป็นกำลังใจอย่างมากที่จะเห็นว่าปริมาณข้อมูลสามารถนำเข้าได้เกือบจะในทันที อย่างไรก็ตามสิ่งที่เกี่ยวกับปัญหาของผู้ใช้แต่ละคนโพสต์ผ่านบัญชีของตัวเองผ่านรูปแบบโหนด? เมื่อฉันขุดและขุดเพิ่มเติมในปัญหานี้คำถามเชิงโวหารในหัวของฉันจะงอกงามขึ้น "Drupal สามารถจัดการปริมาณการใช้งานที่มีอยู่จริงได้หรือไม่ถ้าไม่แล้วประเด็นคืออะไร" นอกเหนือจากการนำเข้าแล้วเรามีทีมงานประมาณ 20 คนที่เพิ่มเนื้อหาผ่านบัญชีของพวกเขา Drupal 'node save' สามารถจัดการผู้ใช้พร้อมกัน 20 คนพร้อมกันเพิ่มข้อมูลได้หรือไม่?
blue928

เราทดสอบไซต์ Drupal ของเรากับ Apache JMeter โดยใช้ MySQL และ PostgreSQL สำหรับ MySQL ผลลัพธ์ของเรามีประมาณ 20 โหนด สำหรับผลลัพธ์ของ PostgreSQL นั้นดีกว่ามาก
kalabro

คำตอบ:


5

ฉันทำงานให้กับมหาวิทยาลัยสแตนฟอร์ดและทำสิ่งเดียวกัน เราต้องโหลดมากกว่า 100,000 โหนดอย่างต่อเนื่องเป็นประจำ เราทำงานกับโค้ดโหลดที่กำหนดเองของเราเองเป็นเวลา 2 ปีแล้วและตอนนี้สามารถเร่งกระบวนการได้อย่างรวดเร็วโดยใช้ pcntl_fork สิ่งเดียวที่คุณต้องจำไว้ก็คือปิดการเชื่อมต่อซ็อกเก็ตทั้งหมดก่อนที่จะเรียกส้อม ตัวอย่างเช่นคุณต้องปิดการเชื่อมต่อ mysql การเชื่อมต่อ memcache และการเชื่อมต่อ Mongo Drupal จะสร้างการเชื่อมต่อใหม่โดยอัตโนมัติเมื่อไม่มีอยู่ innodb_locks_unsafe_for_binlog = 1เท่าที่ปัญหาการหยุดชะงักเราก็สามารถที่จะแก้ไขปัญหาที่โดยการวาง


คุณกำลังโหลดในชุดพร้อมรหัสที่กำหนดเองหรือใช้ฟังก์ชั่น API ของ drupal บางอย่างเช่น node_save? หรือโมดูลประเภทการย้ายข้อมูล นอกจากนี้รหัสที่คุณกล่าวถึงมีให้สำหรับการดูแบบสาธารณะหรือไม่ คงจะดีถ้าเห็นว่า pcntl_fork ถูกรวมเข้ากับ drupal เพื่อดูว่าพวกคุณเอาชนะอุปสรรคนี้ได้อย่างไร ขอบคุณสำหรับเคล็ดลับ binlog!
blue928

2

คำตอบคือ: กำหนดค่าไฟล์ MySQL my.cnf ของคุณอย่างถูกต้อง

หลังจากการวิจัยน้อยกว่าหนึ่งสัปดาห์ฉันพบว่า Drupal 7 สามารถจัดการปริมาณการใช้ข้อมูลที่เกิดขึ้นพร้อมกันได้อย่างแน่นอน

PDOExceptions Deadlock เหล่านี้เกี่ยวข้องกับไฟล์ MySQL my.cnf ซึ่งไม่ได้รับการปรับให้เหมาะสมอย่างถูกต้อง ด้วยความช่วยเหลือจากกลุ่ม Drupal High Performance และแหล่งข้อมูลอื่น ๆ ทีมงานของเราไม่ได้มี Deadlock เดียวเกิดขึ้นหลังจากใช้การตั้งค่าการกำหนดค่าใหม่สำหรับ MySQL เราทดสอบชุดสคริปต์ของเราเพื่อจำลองผู้ใช้ปัจจุบันสูงสุด 500 รายที่บันทึกเนื้อหาโดยไม่มีปัญหา ตรวจสอบกระทู้ที่นี่

http://groups.drupal.org/node/260938

โดยเฉพาะอย่างยิ่ง Dalin แนะนำให้ใช้ตัวช่วยสร้างเพื่อรับไฟล์การกำหนดค่าฐานตามข้อมูลจำเพาะของเซิร์ฟเวอร์และประเภทตาราง หลังจากใช้สิ่งนี้แม้จะไม่มีการปรับแต่งเพิ่มเติม นี่คือลิงค์ไปยังวิซาร์ดหากคุณต้องการลองใช้: https://tools.percona.com/wizard

ฉันยินดีที่จะโพสต์ไฟล์ my.cnf หากใครก็ตามเห็นว่าเป็นประโยชน์

แม้ว่าปัญหาการหยุดชะงักไม่มีปัญหาอีกต่อไปเราได้รับข้อผิดพลาดนี้บ่อยครั้งมาก:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 
1305 SAVEPOINT savepoint_1 does not exist: ROLLBACK TO SAVEPOINT savepoint_1; 
Array ( ) in file_usage_add() (line 661 of /var/www/website.com/includes/file.inc).

นี่อาจเป็นปัญหาการกำหนดค่า mysql เช่นกัน?


เราเริ่มเห็นข้อผิดพลาดนั้นเอง คุณเคยพบคำตอบสำหรับคำถามของคุณหรือไม่?
trimbletodd

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