2011-11-23 23 views
6

मुझे काफी धीमी क्वेरी मिली है (वास्तव में यह mysql.dump से डेटा लोड हो रहा है)। अब मैं जांचना चाहता हूं कि कितनी पंक्तियां पहले ही लोड हो चुकी हैं।चल रहा है और चल रहा है mysql क्वेरी

select count(*) from my_table; 

जहां तक ​​डेटा लोड हो रहा है, my_table लॉक किया गया है, इसलिए मैं इस एसक्यूएल निष्पादित नहीं किया जा सकता से पहले डंप भरी हुई है।

Cmd  ID State    User Host   DB  Time Query       
Query  191 update    root localhost  rehub 00:09 INSERT INTO `my_table` VALUES ... 
Query  189 Waiting for table root localhost  rehub 06:25 select count(*) from my_table 

तो क्या क्वेरी 1 9 1 को रोकने, क्वेरी 18 9 निष्पादित करने और क्वेरी 1 9 1 फिर से शुरू करने का कोई तरीका है?

+0

मेरा अनुमान है कि आप info_schame.tables पर अपनी किस्मत आजमा सकते हैं? – ajreal

+0

ओरेकल का प्रयोग करें, जहां "लेखक कभी पाठकों को अवरुद्ध नहीं करते"; –

+1

क्या यह संभव है कि आप डंप विकल्प बदल दें? यदि हां, तो क्या आपने '-extended-insert' का उपयोग किया था? फिर एक '-extended-insert = FALSE' मदद कर सकता है, लेकिन आयात को धीमा कर देगा। –

उत्तर

4

कोई प्रश्न निलंबित करने का कोई तरीका नहीं है।

यदि आप थोक भार काम कर रहे हैं तो आप एक थोक लोडर का उपयोग करना चाहेंगे जो हर कुछ हजार पंक्तियों को करता है।

इसके अलावा, InnoDB के बजाय MyISAM का उपयोग करके इस समस्या को कम कर दिया जाएगा। माईसाम थोक प्रसंस्करण के लिए एक अच्छा विकल्प है जहां आप मुख्य रूप से लेनदेन संबंधी अखंडता से संबंधित नहीं हैं।

2

का उपयोग कर manual से शब्दों में डाला अभिलेखों की संख्या प्राप्त कर सकते हैं:

विकल्पों --opt भी के लिए खड़ा है सब के सब डिफ़ॉल्ट क्योंकि --opt रूप से चालू हैं डिफ़ॉल्ट रूप से चालू है।

तो जब आप mysqldump विकल्प आपके चुनिंदा गिनती (*) के लिए काम करना चाहिए –-extended-insert=FALSE और --add-locks=FALSE जोड़ें। आपकी स्थिति के आधार पर आपके डीबी की रेफरेंशियल अखंडता के साथ समस्याओं से सावधान रहें। और यह आयात धीमा कर देगा!

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