12 GB .sql dosyasının içe aktarılması neden 36 saatten fazla sürüyor?


16

Şimdi basit bir type site.sql | mysqlkomutla 12 GB .sql dosyasının içe aktarılması için 36 saat bekliyordum . ibdata1Hala büyüyor, şu anda yaklaşık 40 GB olduğunu görüyorum .

Tetikleyiciler ve saklı yordamlar .sql sonunda olduğu düşünüldüğünde, sadece MySQL veri ve anahtar dizinleri eklemek gerektiğini düşünüyorum.

Site.sql, başka bir sunucudan bu komut kullanılarak oluşturuldu:

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

Bu kadar uzun süren ne?


3
mysql ne kadar cpu alıyor? Düşük bir değerse, muhtemelen diske bağlı olduğunuz anlamına gelir
Derek Downey

2
.sql dosyalarını almak o kadar hızlı değil ... sekme sınırına veya CSV'ye dökmek, ardından boş veritabanını oluşturmak ve kullanmak daha hızlıdır LOAD DATA INFILE. Ayrıca, tüm bir veritabanını taşırken aynı ana sürümde kalıyorsanız , yanıtları yeniden bakın: veritabanlarını sunucular arasında taşıma . (özellikle iptal etmeniz ve yeniden başlatmanız gerekiyorsa)
Joe

Yanıtlar:


23

Bunu dene:

$ ps -ef|grep [m]ysql

İşlem kimliğini belirleyin ve ardından

$ strace -cp <pid>

Sonra 10 saniye veya bir dakika bırakın ^C. Bu size işlemin zamanını nerede geçirdiğini söyleyecektir, örneğin sadece gördünüz readve writebaskın olmanız durumunda diski bekleyebilir .


4
+1 çünkü ben sadece yeni bir komut (strace) öğrendim: P Düzenleme: iyi bok, benim mac varsayılan olarak mevcut değil.
Derek Downey

2
GDB ile birlikte harika bir araçtır. İnsanlara uygulamalarının artık asıldığını söylemiyorum; Onlara tam olarak ne sıkıştığını ya da döndüğünü söylüyorum ya da bir çekirdekten kod satırını ve kaynak dosyanın adını söylüyorum. Daha da güçlü olan dtrace.
Gaius

3
Strace Linux - Solaris eşdeğeri kafes. Dtrace Mac'te kullanılabilir.
Gaius

İşte bu. şimdi okuyacağım.
Derek Downey

Dikkat: Bilmek güzel bir komut, ama dikkatli olun, bu komut MySQL örneğimi çökertti. Neden bilmiyorum. MySQL çökmeden önce sunucu birkaç dakika boyunca yanıt vermedi.
dabest1

7

Birincil Anahtar ile herhangi bir InnoDB tablonuz var mı

  1. birden çok sütun mu içeriyorsunuz?
  2. geniş bir VARCHAR mı?
  3. ve bir sürü Benzersiz olmayan dizin?
  4. geniş bir anahtarı olan bir veya daha fazla Benzersiz olmayan dizinler?

Bu koşullardan herhangi biri, dizinlerinizdeki büyük BTREE düğümlerinin her BTREE düğümünde çok az yaprak olmasına neden olabilir. Birincil Anahtardaki küme anahtarı, kümelenmemiş anahtarlardaki Benzersiz olmayan her anahtar girişine de eklenir.

Başka bir düşünce: InnoDB veri sayfalarının toplamı InnoDB dizin sayfalarından önemli ölçüde daha az mı?

Bu sorguyu (MB cinsinden) bulabilirsiniz:

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

Ek hususlar: Yüklediğiniz DB sunucusunda ikili günlük kaydı etkin mi? Eğer öyleyse, lütfen yüklediğiniz sunucuda yapın:

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

Umarım bu yardımcı olur !!!


6

Okuduğunuz tabloların tetikleyici, dizin ve kısıtlama içermediğinden emin misiniz? Hangi donanım ve işletim sistemini kullanıyorsunuz? Depolama alanınız nasıl yapılandırıldı?

Oracle'a daha aşinayım, ancak tetikleyici, dizin ve kısıtlama olmaksızın 12G içe aktarma tabloları 200GB / s ile kolayca gitmelidir. Tek bir tetikleyici, tetikleyicinin ne yaptığına bağlı olarak işlemi bir salyangozda yapabilir ...

Umarım bu yardımcı olur

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.