2010-03-17 15 views
21

कभी-कभी, मुझे किसी प्रोजेक्ट के लिए डेटा फिर से आयात करना होता है, इस प्रकार एक 3.6% पंक्तियों को एक MySQL तालिका में पढ़ना पड़ता है (वर्तमान में इनो डीबी, लेकिन मैं वास्तव में इस इंजन तक सीमित नहीं हूं)। "डेटा इन्फाइल लोड करें ..." सबसे तेज़ समाधान साबित हुआ है, हालांकि इसमें ट्रेडऑफ है: - जब बिना चाबियाँ आयात करते हैं, तो आयात में लगभग 45 सेकंड लगते हैं, लेकिन मुख्य निर्माण में उम्र लगती है (पहले से ही 20 मिनट तक चलती है। ..)। - तालिका पर चाबियों के साथ आयात करने से आयात बहुत धीमा हो जाता हैMySQL लोड डेटा infile - त्वरण?

तालिका के 3 फ़ील्ड से अधिक कुंजी हैं, संख्यात्मक फ़ील्ड का संदर्भ देते हैं। क्या इसे बढ़ाने के लिए कोई तरीका है?

एक और मुद्दा यह है: जब मैं धीमी क्वेरी शुरू करने वाली प्रक्रिया को समाप्त करता हूं, तो यह डेटाबेस पर चल रहा है। क्या mysqld को पुनरारंभ किए बिना क्वेरी को समाप्त करने का कोई तरीका है?

धन्यवाद एक बहुत डीबीए

+0

रिकॉर्ड कितने बड़े हैं? – Grumpy

+0

लगभग 60 से 100 बाइट्स, 5 से 8 फ़ील्ड। कुछ भी वास्तव में बड़ा नहीं है, यह विशाल मात्रा है जो पूरी चीज को धीमा कर देती है। – DBa

उत्तर

38

यदि आप innodb और थोक लोडिंग का उपयोग कर रहे हैं तो यहां कुछ युक्तियां दी गई हैं:

अपनी सीएसवी फ़ाइल को लक्ष्य तालिका के प्राथमिक कुंजी क्रम में क्रमबद्ध करें: याद रखें innodb क्लस्टर्ड प्राथमिक कुंजी ताकि अगर इसे हल किया जाए तो यह तेजी से लोड हो जाएगा!

ठेठ लोड डेटा infile मैं का उपयोग करें:

set unique_checks = 0; 
set foreign_key_checks = 0; 
set sql_log_bin=0; 

छोटे विखंडू

ठेठ आयात आँकड़े मैं में csv फ़ाइल विभाजित:

truncate <table>; 

set autocommit = 0; 

load data infile <path> into table <table>... 

commit; 

अन्य अनुकूलन आप लोड समय को बढ़ावा देने के लिए उपयोग कर सकते थोक भार के दौरान देखा है:

3.5 - 6.5 million rows imported per min 
210 - 400 million rows per hour 
+0

अद्वितीय_चेक्स को अक्षम करने से प्रदर्शन में सुधार हुआ है, साथ ही साथ प्राथमिक कुंजी द्वारा क्रमबद्ध किया गया है। धन्यवाद! – DBa

1

InnoDB एक बहुत अच्छा इंजन है। हालांकि, यह 'ट्यूनेड' होने पर अत्यधिक निर्भर करता है। एक बात यह है कि यदि आपके आवेषण प्राथमिक कुंजी बढ़ाने के क्रम में नहीं हैं, तो innoDB MyISAM से थोड़ा अधिक समय ले सकता है। इसे उच्च innodb_buffer_pool_size सेट करके आसानी से दूर किया जा सकता है। मेरा सुझाव है कि इसे समर्पित एमएसक्यूएल मशीन पर अपनी कुल रैम के 60-70% पर सेट करें।

संबंधित मुद्दे