12 GB .sql फ़ाइल को आयात करने में 36 घंटे से अधिक क्यों लगता है?


16

मैं एक साधारण type site.sql | mysqlकमांड के साथ आयात किए जाने के लिए 12 जीबी .sql फ़ाइल के लिए 36 घंटे तक इंतजार कर रहा हूं । मैं देख सकता हूं कि ibdata1यह अभी भी बढ़ रहा है, वर्तमान में लगभग 40 जीबी है।

ट्रिगर और संग्रहीत प्रक्रियाओं को ध्यान में रखते हुए .sql के अंत में, मुझे लगता है कि MySQL को डेटा और कुंजी अनुक्रमित जोड़ना चाहिए।

Site.sql को किसी अन्य सर्वर से इस कमांड का उपयोग करके उत्पन्न किया गया था:

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

इतना लंबा क्या खिंच रहा है?


3
mysql कितना cpu ले रहा है? यदि यह कम मूल्य है, तो इसका मतलब है कि आप डिस्क-बाउंड हैं
डेरेक डाउनी

2
.sql फाइलें वास्तव में आयात करने के लिए इतनी तेज नहीं हैं ... टैब डिलिम या सीएसवी को डंप करने के लिए वास्तव में तेज है, फिर खाली डेटाबेस और उपयोग करें LOAD DATA INFILE। यदि आप एक पूरे डेटाबेस को आगे बढ़ा रहे हैं, तो मेरा उत्तर फिर से देखें : यदि आप एक ही प्रमुख संस्करण के भीतर रह रहे हैं, तो सर्वर के बीच डेटाबेस ले जाना । (विशेषकर यदि आपको गर्भपात और पुनः आरंभ करना है)
जो

जवाबों:


23

इसे इस्तेमाल करे:

$ ps -ef|grep [m]ysql

इसके बाद प्रोसेस आईडी को पहचानें

$ strace -cp <pid>

इसे 10 सेकंड या एक मिनट बाद छोड़ दें ^C। यह आपको बताएगा कि प्रक्रिया अपना समय कहां बिता रही है, उदाहरण के लिए, यह डिस्क के लिए इंतजार कर सकता है यदि आपने देखा readऔर writeहावी है।


4
+1 क्योंकि मैंने अभी एक नया कमांड (स्ट्रेस) सीखा है: पी एडिट: अच्छी तरह से बकवास, डिफ़ॉल्ट रूप से मेरे मैक पर उपलब्ध नहीं।
डेरेक डाउनी

2
यह gdb के साथ-साथ एक शानदार उपकरण है। मैं लोगों को यह नहीं बताता कि उनका ऐप अब लटका हुआ है; मैं उन्हें ठीक-ठीक बताता हूं कि यह किस पर अटका है या कताई है, या एक कोर से उन्हें कोड की लाइन और स्रोत फ़ाइल का नाम बताएं। और भी शक्तिशाली dtrace है।
गयूस

3
स्ट्रेस लिनक्स है - सोलारिस इक्विस ट्रस है। Mac पर Dtrace उपलब्ध है।
गयुस

इसलिए यह। अब इस पर पढ़ा जाना है।
डेरेक डाउनी

खबरदार: यह जानने के लिए अच्छा आदेश है, लेकिन सावधान रहें, इस आदेश ने मेरे MySQL उदाहरण को क्रैश कर दिया। पता नहीं क्यों। MySQL क्रैश होने से पहले, सर्वर कुछ मिनटों के लिए अनुत्तरदायी बन गया।
dabest1

7

क्या आपके पास प्राथमिक कुंजी के साथ कोई InnoDB टेबल है

  1. कई कॉलम युक्त?
  2. एक विस्तृत VARCHAR है?
  3. और बहुत सारे गैर-अद्वितीय सूचकांक?
  4. एक या एक से अधिक गैर-अनन्य अनुक्रमणिका जिसमें एक विस्तृत कुंजी है?

इनमें से कोई भी स्थिति संभवतः आपके बीटीईई नोड में बहुत कम पत्तियों वाले आपके अनुक्रमणिका में बड़े बीटीआरई नोड्स का कारण बन सकती है। प्राथमिक कुंजी में क्लस्टर कुंजी भी गैर-कुंजी कुंजियों में प्रत्येक गैर-अनन्य कुंजी प्रविष्टि से जुड़ी होती है।

एक और विचार: क्या InnoDB डेटा पृष्ठों का योग InnoDB सूचकांक पृष्ठों से काफी कम है?

आप इस क्वेरी के साथ (एमबी में) पता लगा सकते हैं:

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

अतिरिक्त विचार: क्या आपके द्वारा लोड किए जा रहे डीबी सर्वर में बाइनरी लॉगिंग सक्षम है? यदि आप हैं, तो कृपया उस सर्वर पर करें जिसे आप लोड कर रहे हैं:

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

आशा है कि ये आपकी मदद करेगा !!!


6

क्या आप सुनिश्चित हैं कि जिन तालिकाओं में आप पढ़ रहे हैं, वे ट्रिगर्स और इंडेक्स और बाधाओं के बिना हैं? आप किस हार्डवेयर और OS पर चल रहे हैं? आपका संग्रहण कैसे कॉन्फ़िगर किया गया है?

मैं ओरेकल से अधिक परिचित हूं, लेकिन ट्रिगर, इंडेक्स और बाधाओं के बिना तालिकाओं पर आयात होने वाले 12 जी को आसानी से 200 जीबी / एच के साथ जाना चाहिए। एक एकल ट्रिगर एक घोंघा को प्रक्रिया बना सकता है, जो इस बात पर निर्भर करता है कि ट्रिगर क्या करता है ...

आशा है कि ये आपकी मदद करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.