Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL 5.6 . में वैश्विक क्वेरी टाइमआउट

ऐसा लगता है कि कोई समकक्ष नहीं है से max_execution_time MySQL में संस्करण 5.7.4 और 5.7.8 से पहले (सेटिंग ने अपना नाम बदल दिया)। आप क्या कर सकते हैं अपनी खुद की आवधिक नौकरी बनाएं जो जांचता है कि प्रश्न समय से अधिक हो गए हैं और मैन्युअल रूप से उन्हें मार देते हैं। दुर्भाग्य से यह बिल्कुल वैसा नहीं है जैसा कि नए MySQL संस्करण करते हैं:कमांड जानकारी का निरीक्षण किए बिना आप सभी प्रश्नों को समाप्त कर देंगे, न कि केवल SELECT पढ़ें , और सत्र स्तर पर इसे नियंत्रित करना लगभग असंभव है।

ऐसा करने का एक तरीका यह होगा कि एक संग्रहीत प्रक्रिया<बनाई जाए। /ए> जो प्रक्रिया सूची को क्वेरी करता है और मारता है जैसी ज़रूरत। ऐसी संग्रहित प्रक्रिया कुछ इस तरह दिख सकती है:

DELIMITER //
CREATE PROCEDURE stmt_timeout_killer (timeout INT)
BEGIN
    DECLARE query_id INT;
    DECLARE done INT DEFAULT FALSE;

    DECLARE curs CURSOR FOR
    SELECT id
    FROM information_schema.processlist
    WHERE command = 'Query' AND time >= timeout;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    -- Ignore ER_NO_SUCH_THREAD, in case the query finished between
    -- checking the process list and actually killing threads
    DECLARE CONTINUE HANDLER FOR 1094 BEGIN END;

    OPEN curs;

    read_loop: LOOP
        FETCH curs INTO query_id;

        IF done THEN
            LEAVE read_loop;
        END IF;

        -- Prevent suicide
        IF query_id != CONNECTION_ID() THEN
            KILL QUERY query_id;
        END IF;
    END LOOP;

    CLOSE curs;
END//
DELIMITER ;

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

# Somewhere suitable
engine.execute(text("CALL stmt_timeout_killer(:timeout)"), timeout=30)

कैसे और कहाँ वास्तव में आपके वास्तविक आवेदन पर बहुत अधिक निर्भर करता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. हाइबरनेट मैपिंग MySQL डेटटाइम

  2. मैसकल कंडीशनल काउंट

  3. हैवी जॉइन के साथ MySQL क्वेरी को ऑप्टिमाइज़ करना

  4. MySQL ग्रुप बाय एंड ऑर्डर बाय

  5. MySQL क्रेडेंशियल्स को www निर्देशिका के बाहर क्यों रखें?