2012-05-25 16 views
10

Şirketimde, zaman zaman geliştirici makinelerimize yüklemek için bir gün sürebilen büyük müşteri MySQL veritabanlarını (40 GB +) alıyoruz. Bu yükleme süresini arka planda yapıldığından kabul etsek de, ithalatların ne zaman biteceğini tahmin etme konusunda sağlam bir yeteneğimiz yok. Bu, üzerinde hareket etmesi için uygun bir zaman planlamaktan bizi engeller. Kablo adamının ortaya çıkmasını beklemek gibi.MySQL dökümünde ne kadar mesafe var?

Şu an için en iyi stratejim, tabloların yüzde yüze yüklendiğini görmek için hızlı bir show tables komutudur. Ancak, tablo boyutları birbiriyle ve her müşteri ile büyük ölçüde farklılık gösterdiğinden, bu güvenilirliğe bile yakın değildir.

Herhangi bir MySQL alma işlemi boyunca ne kadar güvenilir bir yüzde elde etmek için kullanılabilecek iyi bir teknik veya araç var mı?

cevap

15

pv komutu ile dökümü mysql'a göndererek yapabilirsiniz.

pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME 

İO iş hacmine dayalı olarak içe aktarma işlemi sırasında size bir ilerleme çubuğu gösterecektir. (Görüldüğü gibi here.)

+3

EVET:

Çok basit bir örnek size bir fikir vermek için! Mükemmel! Tam olarak aradığım şey bu! Burada yanışan Windows kullanıcıları için uyarı: Cygwin'in GUI yükleyicisindeki 'pv' için bir modülü yok, bu yüzden burada bulunan yönergeleri kullandım: http://stackoverflow.com/q/504204 – Technetium

1

HeidiSql size şimdiye kadar kaç GB yüklendiğini söyleyecektir, bu da ne kadar yüklenmeye ihtiyaç duyduğunu anlamaya çalışırken oldukça faydalıdır.

1

Ayrıca, dışa aktarma işleminin belirli bir tabloya ne kadar uzandığını (otomatik arttırma kimliğine göre) görmek için kaynak veritabanında bir yapabilirsiniz. Eric, veritabanı veri dizininin boyutunu kaynağın boyutuna göre izleyebileceğiniz iyi bir noktaya dönüşür.

Dumps/import'ları hızlandırmak için yararlı bulduğum bir şey, bunu tablolara göre yapmak ve daha sonra birden çok mysqldumps'ı aynı anda çok sayıda iş parçacığıyla iş parçacığı oluşturmaktır. Genellikle bir seferde yaklaşık 4 ayrı döküm/geri yükleme yaptım. En uygun miktar, donanım ve disk özelliklerine bağlı olacaktır.

mysqldump dbname table1 table2 table3 | mysql -h host & 
mysqldump dbname table4 table5 table6 | mysql -h host & 
mysqldump dbname table7 table8 table9 | mysql -h host & 
+0

Bu çok - ilgili yaklaşım ilgi çekicidir. Genel ithalat süresindeki azalma ne kadar büyük? Sürücünün zaten G/Ç bağlı olduğunu anladım (bunlar SSD'lere gitmiyor), bu yüzden bunu bir seçenek olarak hiç düşünmedim. – Technetium

+1

Diskinize bağlıdır. MySQL sadece tek bir işlemi kendi başına kullanacaktır, bu yüzden birden fazla işlemci varsa bu şekilde daha fazla çekirdek kullanabilirsiniz. Çalıştırın ve mysql iş parçacığının% 100 CPU'suna sahip olup olmadığını görün. O zaman büyük ihtimalle CPU'ya bağlısınız. Tatlı noktanızı bulmak için bazı deneyler yapacağız, ama 2 sürecin yaklaşık 1/2 zamanınızı alacağını tahmin edebilirim. – sreimer