लॉक टेबल आकार - mysql से अधिक ताले की संख्या के साथ MYSQL सम्मिलित क्वेरी विफल रहता है

तालिका तालिका 1 में 1500000 पंक्तियां हैं और इसमें 80 फ़ील्ड हैं और मैं फ़ील्ड 1 और फ़ील्ड 2 और आईडी फ़ील्ड के आधार पर डुप्लिकेट को हटाना चाहता हूं इसलिए मैंने अधिकतम विकल्प का उपयोग किया।

विकल्प 1: विकल्प डालें

insert into table2_unique
select * from table1 a
where  a.id = ( select max(b.id) from table1 b
where a.field1 = b.field1
and a.field2 = b.field2 );

लेकिन नीचे दी गई त्रुटि के कारण क्वेरी विफल हो जाती है।

Error Code: 1206. The total number of locks exceeds the lock table size

कथन की व्याख्या करें:

id  select_type table   partitions  type    possible_keys   key key_len ref rows    filtered    Extra
1   INSERT  table2  NULL    ALL NULL    NULL    NULL    NULL    NULL    NULL    NULL
1   PRIMARY a   NULL    ALL NULL    NULL    NULL    NULL    1387764 100 Using where
2   DEPENDENT SUBQUERY  b   NULL    ref field1x,field2x field1x 39  a.field1    537 10  Using where

विकल्प 2 हटाएं विवरण:

DELETE n1 FROM table1 n1, table1 n2 WHERE n1.id > n2.id AND n1.field1 = n2.field1 and n1.field2 and n2.field2

जब मैं निष्पादित करता हूं तो डेडलॉक हुआ।

मैं बफर पूल आकार को बढ़ाने में सक्षम नहीं हूं, कृपया मुझे बताएं कि क्या मैं क्वेरी को अलग-अलग तरीके से लिखूंगा।

उत्तर:

जवाब के लिए 0 № 1

मुझे यकीन नहीं है कि यह ताले को कैसे प्रभावित करेगा लेकिन mysql में निर्भर उप-प्रश्नों (यानी भविष्यवाणी की गई) का उपयोग करके मेरे अनुभव में कभी भी अच्छा काम नहीं किया है। मैंने पहली क्वेरी को इस तरह लिखा होगा:

insert into table2_unique (id, col1, col2, ...col79)
select a.id, a.col1, a.col2, ...a.col79
from table1 a
Inner join (
Select max(b.id) as id
From table1 b
Group by b.col1, b.col2
) As dedup
On a.id=dedup.id;

एक जॉइन का उपयोग करके एक टेबल को अपडेट करने का प्रयास करना हमेशा थोड़ा सा है। जब यह एक आत्म-जुड़ता है, तो यह आश्चर्य की बात नहीं है कि यह विफल हो जाता है। एक अस्थायी तालिका का उपयोग करना और ऑपरेशन को 2 चरणों में विभाजित करना इससे बचाता है।


जवाब के लिए 0 № 2

My.ini फ़ाइल में INNODB_BUFFER_POOL_SIZE को बढ़ाया और उस निर्दिष्ट मात्रा के लिए 27 मिनट में क्वेरी चली।


संबंधित सवाल
सबसे लोकप्रिय