PHP पीडीओ तैयार कथन में innodb_stats_on_metadata सेट करना संभव है?

I transfer part of MySQL database from one server to another using XML. In this xml I have all DB related information I need (data & metadata). Everything works fine except one thing – obtaining foreign key constraints from information_schema.

समस्या प्रदर्शन में निहित है। लगभग 100 बाधाओं को प्राप्त करने में PHP स्क्रिप्ट लोडिंग के लगभग 7 मिनट लगते हैं! हालांकि, अगर कोई आदेश चलाता है

SET GLOBAL innodb_stats_on_metadata = 0

इस तरह की बाधा क्वेरी (यानी PHPMyAdmin में) के साथ

SET GLOBAL innodb_stats_on_metadata = 0;
SELECT * FROM information_schema.KEY_COLUMN_USAGE

सबकुछ लगभग 5 सेकंड तक चलता है और यह हो जाता है। अब, यह एक बड़ा टाइमवेवर है और यह वास्तव में बहुत अच्छा होगा अगर मैं इसे निम्नलिखित फैशन में उपयोग कर सकता हूं:

         try{
                $conn = $this->db->_pdo;
                $conn->setAttribute(PDO::ATTR_AUTOCOMMIT, 0); //disable autocommit for transaction consistency
                $conn->beginTransaction();

                $this->db->_pdo->exec('SET GLOBAL innodb_stats_on_metadata = 0');

                $query = $this->db->_pdo->prepare('
                    SELECT * 
                    FROM information_schema.KEY_COLUMN_USAGE 
                    WHERE REFERENCED_TABLE_NAME = ?');
                $query->bindParam(1, $table, PDO::PARAM_STR);
                $query->execute();
                $keys = $query->fetchAll(PDO::FETCH_ASSOC);

                $conn->commit();
                $conn->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);

                if(!empty($keys)) return $keys; else return false;
        }catch (Exception $e){
                $conn->rollback();
                echo 'Caught exception: ',  $e->getMessage(), "\n";
                return false;
        }

समस्या यह है कि निष्पादन आदेश केवल यहां अनदेखा किया जाता है और प्रक्रिया समय अभी भी बहुत लंबा है। अगर मैं उस आदेश को तैयार करने में डालता हूं (चयन से पहले और अर्धविराम से अलग) सब कुछ सिर्फ एक त्रुटि के साथ समाप्त होता है।

So my question is: How can I set mysqli DB parameter innodb_stats_on_metadata inside PHP PDO structure which uses transactions and prepare statements?

0
मुझे इस MySQL कमांड फ़ील्ड में वास्तव में बहुत अधिक अनुभव नहीं है। निष्पादन ठीक खत्म होता है (मैंने इसे त्रुटि के लिए चेक किया, गैर फेंक दिया गया)। लेकिन फिर भी यह प्रभावी नहीं होता है। आपके दूसरे प्रश्न के अनुसार, क्या आप मुझे वैश्विक स्तर पर इसे बेहतर तरीके से सेट करने का संकेत दे सकते हैं?
जोड़ा लेखक Dejv, स्रोत
वाह, यह काम करता है !! मैंने ग्लोबल को हटा दिया और निष्पादन समय अब ​​1 सेकंड से कम है। मैंने कभी सोचा नहीं होगा कि यह इतना आसान होगा :) ... बहुत बहुत धन्यवाद!
जोड़ा लेखक Dejv, स्रोत
बयान के लिए "अनदेखा" होने का एकमात्र कारण इसमें एक त्रुटि है
जोड़ा लेखक Your Common Sense, स्रोत
आप इसे ग्लोबल सेट करने का प्रयास क्यों कर रहे हैं?
जोड़ा लेखक Your Common Sense, स्रोत
इसे सत्र के लिए सेट करें। शब्द 'वैश्विक' के बिना मतलब है
जोड़ा लेखक Your Common Sense, स्रोत
यह मेरे लिए अजीब लगता है कि कोई अपवाद नहीं फेंक दिया गया था। क्या आपने अपना पीडीओ अपवाद मोड में सेट किया था?
जोड़ा लेखक Your Common Sense, स्रोत

1 उत्तर

बयान से शब्द ग्लोबल निकालें। यह निश्चित रूप से रूट विशेषाधिकारों के बिना उपयोगकर्ता के लिए ग्लोबल स्टेट वैरिएबल सेट करने नहीं देगा।

0
जोड़ा
खैर, मैंने कल थोड़ा बहुत उत्साहित हो गया और ध्यान नहीं दिया कि मेरे लॉग में कोई त्रुटि हुई है: अपवाद पकड़ा गया: SQLSTATE [HY000]: सामान्य त्रुटि: 1229 परिवर्तनीय 'innodb_stats_on_metadata' एक वैश्विक चर है और इसे सेट किया जाना चाहिए सेट ग्लोबल ... क्या आपके पास कोई सुझाव है?
जोड़ा लेखक Dejv, स्रोत
वील, हास्यास्पद कहानी, यह एक त्रुटि के साथ समाप्त हो गया और अंतिम वैध आउटपुट दिखाया गया जिससे निष्पादन (डुह) के समय को बहुत कम किया गया। साथ ही मुझे विश्वास नहीं है कि अगर हम info_schema का उपयोग करने पर फंस गए हैं तो इस समस्या से बाहर निकलने का तरीका है । स्पष्ट रूप से इस तत्व के साथ तीसरे पक्ष के संचालन बेहद समय लेने वाले हैं। मुझे लगता है कि तालिका mytable बनाएं और regex का उपयोग करके मुझे बाधाएं मिलती हैं। हालांकि आपकी मदद के लिए बहुत बहुत धन्यवाद!
जोड़ा लेखक Dejv, स्रोत
कुंआ। यदि, जैसा कि आपने कहा था, निष्पादन का समय अब ​​1 सेकंड से कम है - बस इस लाइन से छुटकारा पाएं।
जोड़ा लेखक Your Common Sense, स्रोत