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

MySQL संग्रहीत प्रक्रिया समस्याएं पैदा कर रही है?

आप इस प्रश्न के साथ बहुत कम कर सकते हैं।

इसे आजमाएं:

  1. एक PRIMARY KEY बनाएं categoryIds (categoryId) . पर

    • सुनिश्चित करें कि supplier (supplied_id) एक PRIMARY KEY है

    • सुनिश्चित करें कि category_product (ProductID, CategoryID) (इस क्रम में) एक PRIMARY KEY है , या आपके पास ProductID . के साथ एक अनुक्रमणिका है अग्रणी।

अपडेट करें:

अगर यह INSERT है जो समस्या का कारण बनता है और product_search_query एक MyISAM . में तालिका समस्या MyISAM . के साथ हो सकती है लॉक करना।

MyISAM पूरे टेबल को लॉक कर देता है अगर वह टेबल के बीच में एक फ्री ब्लॉक में एक रो डालने का फैसला करता है जो टाइमआउट का कारण बन सकता है।

INSERT DELAYED using का उपयोग करके देखें इसके बजाय:

IF @resultsFound > 0 THEN
    INSERT DELAYED INTO product_search_query (QueryText, CategoryId) VALUES (keywords, topLevelCategoryId);
END IF;

यह अभिलेखों को सम्मिलन कतार में रखेगा और तुरंत वापस आ जाएगा। रिकॉर्ड बाद में एसिंक्रोनस रूप से जोड़ दिया जाएगा।

ध्यान दें कि यदि कमांड जारी होने के बाद सर्वर की मृत्यु हो जाती है, लेकिन वास्तव में रिकॉर्ड डालने से पहले आप जानकारी खो सकते हैं।

अपडेट करें:

चूँकि आपकी तालिका InnoDB है , यह टेबल लॉकिंग के साथ एक समस्या हो सकती है। INSERT DELAYED InnoDB पर समर्थित नहीं है ।

क्वेरी की प्रकृति के आधार पर, DML InnoDB . पर क्वेरीज़ टेबल में गैप लॉक हो सकता है जो इंसर्ट को लॉक कर देगा।

उदाहरण के लिए:

CREATE TABLE t_lock (id INT NOT NULL PRIMARY KEY, val INT NOT NULL) ENGINE=InnoDB;
INSERT
INTO    t_lock
VALUES
        (1, 1),
        (2, 2);

यह क्वेरी ref करती है स्कैन करता है और लॉक को अलग-अलग रिकॉर्ड पर रखता है:

-- Session 1
START TRANSACTION;
UPDATE  t_lock
SET     val = 3
WHERE   id IN (1, 2)

-- Session 2
START TRANSACTION;
INSERT
INTO    t_lock 
VALUES  (3, 3)
-- Success

यह क्वेरी, ऐसा ही करते हुए, एक range करती है कुंजी मान 2 . के बाद स्कैन करें और गैप लॉक लगाएं , जो कुंजी मान डालने नहीं देगा 3 :

-- Session 1
START TRANSACTION;
UPDATE  t_lock
SET     val = 3
WHERE   id BETWEEN 1 AND 2

-- Session 2
START TRANSACTION;
INSERT
INTO    t_lock 
VALUES  (3, 3)
-- Locks


  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. SQL सर्वर संख्यात्मक कार्यों पर एक त्वरित नज़र

  3. PHP MySQL डीबी से परिणामों के क्रम को उलट देता है

  4. किसी अन्य तालिका से MySQL में सम्मिलित करें

  5. PHP/MySQL डेटाबेस क्वेरी वास्तव में कैसे काम करती हैं?