Canlı bir drupal 7 sitesine saatte 1000 düğüm nasıl yükleyebilir ve kilitlenmeleri nasıl önleyebilirim?


9

Çok uzun zaman önce buraya kilitlenme hakkında yazdım: PDOException: SQLSTATE [40001]: Serileştirme hatası: 1213 Kilitlenmeye çalışırken kilitlenme bulundu;

Geliştirme ekibimin yapmaya çalıştığı her şeye rağmen, yine de böyle hatalar alıyoruz:

PDOException: SQLSTATE [40001]: Serileştirme hatası: 1213 Kilit almaya çalışırken kilitlenme bulundu; işlemi yeniden başlatmayı deneyin: {location_instance} içine yerleştirin (nid, vid, uid, genid, lid) VALUES (: db_insert_placeholder_0,: db_insert_placeholder_1,: db_insert_placeholder_2,: db_insert_placeholder_3,: db_insert_placeholder_2,: db_insert_placeholder_3,: db_insert_placeholder_4); Dizi ([: db_insert_placeholder_0] => 1059 [: db_insert_placeholder_1] => 1059 [: db_insert_placeholder_2] => 0 [: db_insert_placeholder_3] => cck: field_item_location: 1059 [: db_insert_placeholder_3] => cck: field_item_location: 1059 [: db_insert_placeholder_4] = 97_sayısı /var/www/website.com/sites/all/modules/location/location.module).

Bu örnekteki belirli tabloya rağmen, bu hatayı diğer tablolarda alıyoruz.

İşte benim durumum. Büyük bir üniversite projesi aldım. Herhangi bir zamanda sistemi günlük olarak kullanan 50.000 kampüs sakini vardır. Buna ek olarak, hem 1000 adet içerik öğesinin hem manuel hem de özel modül kodu (eski üniversite verilerinden geçiş) yoluyla bu yeni Drupal 7 sitesine geçiyorum.

Bu hata bizi, Drupal bu tür yükleri kaldıramazsa, son yıllarda çalıştığımız değeri kazımak için neredeyse hazır olduğumuz noktaya kadar öldürüyor.

Ama bu az çok sorum - Drupal bu tür yükleri nasıl kaldırabilir? Bu kadar faaliyeti idare edebilmek için iş akışımı nasıl düzenleyebilirim? Bu bir Drupal sorunu mu? Bir veritabanı sorunu mu var?

Özellikle, Ubuntu, LAMP yığını 16GB RAM çalıştırıyorum. Drupal ile ilgili, veritabanıyla ilgili, sunucu yapılandırmasıyla ilgili veya Drupal'ın yetenekleri dahilinde çalışmak için farklı bir iş akışı olup olmadığına dair herhangi bir öneriye açığım, bu yüzden bu kadar etkinlikle ilgili deneyiminiz varsa herhangi bir şey önermekten çekinmeyin.


Büyük veri kümesi alma hakkında bir makale var evolvingweb.ca/story/...
kalabro

Bunun için teşekkür ederim. Hacimsel verilerin neredeyse anında içe aktarılabileceğini görmek çok cesaret verici. Ancak, bireysel kullanıcıların düğüm formları aracılığıyla kendi hesapları üzerinden yayın yapma sorunu ne olacak? Bu sorunu daha fazla kazıp kazarken, kafamdaki retorik sorular büyüyor, "Drupal bu kadar canlı trafiği kaldırabilir mi? İçe aktarımların yanı sıra, hesapları aracılığıyla normal olarak içerik ekleyen yaklaşık 20 kişilik bir ekibimiz var. Drupal 'düğüm kaydetme' aynı anda sadece 20 eşzamanlı kullanıcı veri ekleyebilir mi?
blue928

Drupal sitemizi Apache JMeter ile MySQL ve PostgreSQL kullanarak test ettik. MySQL için sonuçlarımız yaklaşık 20 düğümdü. PostgreSQL için sonuçlar çok daha iyiydi.
kalabro

Yanıtlar:


5

Stanford üniversitesinde çalışıyorum ve benzer şeyler yapıyorum. Sürekli olarak 100.000'den fazla düğümü yüklemeliyiz. Biz kendi özel yükleme kodu üzerinde çalışıyoruz 2 yıldır şimdi pcntl_fork kullanarak oldukça büyük bir süreci hızlandırmak mümkün olmuştur. Hatırlamanız gereken tek şey, çatalı çalıştırmadan önce tüm soket bağlantısını kapatmaktır. Örneğin, mysql bağlantısını, memcache bağlantısını ve hatta mongo bağlantısını kapatmanız gerekir. Drupal, mevcut olmadığında otomatik olarak yeni bağlantılar oluşturur. Kilitlenme sorununa gelince, bu sorunu çözerek çözebildik innodb_locks_unsafe_for_binlog = 1.


bunları özel kodla toplu olarak mı yüklüyorsunuz veya node_save gibi drupal'ın API işlevlerinden bazılarını mı kullanıyorsunuz? Veya bir geçiş türü modülü? Ayrıca bahsettiğiniz kod herkese açık olarak kullanılabilir mi? Bu engelin üstesinden geldiğinizi görmek için pcntl_fork'un drupal ile nasıl entegre olduğunu görmek güzel olurdu. Binlog ipucu için teşekkürler!
blue928

2

Cevap: MySQL my.cnf dosyanızı doğru şekilde yapılandırın.

Bir haftadan biraz fazla bir araştırma yaptıktan sonra, Drupal 7'nin bu kadar eş zamanlı giriş trafiğini kaldırabildiğini gördüm.

Bu Deadlock PDOExceptions, MySQL my.cnf dosyasının doğru şekilde optimize edilmemesiyle ilgiliydi. Drupal Yüksek Performans grubunun ve diğer kaynakların yardımıyla, ekibimizin MySQL için yeni yapılandırma ayarlarını uyguladığından beri tek bir Kilitlenme olmadı. Toplu komut dosyalarımızı, sorunsuz şekilde içerik tasarrufu sağlayan 500'e kadar mevcut kullanıcıyı simüle etmek için test ettik. Konuya buradan göz atın.

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

Dalin özellikle, sunucu özelliklerine ve tablo türlerine dayalı bir temel yapılandırma dosyası almak için bir sihirbaz kullanılmasını önerdi. Bunu kullandıktan sonra, daha fazla ayarlama yapmadan bile, kilitlenmeler durdu. Denemek isterseniz sihirbazın bağlantısı: https://tools.percona.com/wizard

Herkes yararlı bulursa my.cnf dosyasını göndermekten memnuniyet duyarız.

Deadlock sorunu artık bir sorun olmasa da, şu anda bu hatayı çok sık alıyoruz:

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).

Bu bir mysql yapılandırma sorunu da olabilir mi?


Bu hatayı kendimiz görmeye başlıyoruz. Sorunuza hiç bir cevap buldunuz mu?
trimbletodd

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.