2 টি সহজ সন্নিবেশ অনুসন্ধানের জন্য মাইএসকিউএল InnoDB ডেডলক


10

এই দুটি sertোকানো প্রশ্নের জন্য আমার একটি অচলাবস্থা রয়েছে:

insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.596', 180, 4, 181, 561)

insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.611', 180, 4, 181, 563)

এখানে ইনোডিবি অবস্থান:

------------------------
LATEST DETECTED DEADLOCK
------------------------
2014-12-23 15:47:11 1f4c
*** (1) TRANSACTION:
TRANSACTION 19896526, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1248, 3 row lock(s), undo log entries 1
MySQL thread id 17988, OS thread handle 0x17bc, query id 5701353 localhost 127.0.0.1 root update
insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition,  nextClubId, account_id) values (0, '2014-12-23 15:47:11.596', 180, 4, 181, 561)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 49735 page no 4 n bits 72 index `UK_cagoa3q409gsukj51ltiokjoh` of   table `db`.`playerclub` trx id 19896526 lock_mode X insert intention waiting
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
 0: len 8; hex 73757072656d756d; asc supremum;;

*** (2) TRANSACTION:
TRANSACTION 19896542, ACTIVE 0 sec inserting, thread declared inside InnoDB 5000
mysql tables in use 1, locked 1
5 lock struct(s), heap size 1248, 3 row lock(s), undo log entries 1
MySQL thread id 17979, OS thread handle 0x1f4c, query id 5701360 localhost 127.0.0.1    root update
insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition,   nextClubId, account_id) values (0, '2014-12-23 15:47:11.611', 180, 4, 181, 563)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 49735 page no 4 n bits 72 index `UK_cagoa3q409gsukj51ltiokjoh` of   table `db`.`playerclub` trx id 19896542 lock_mode X
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
 0: len 8; hex 73757072656d756d; asc supremum;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 49735 page no 4 n bits 72 index `UK_cagoa3q409gsukj51ltiokjoh` of    table `db`.`playerclub` trx id 19896542 lock_mode X insert intention waiting
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
 0: len 8; hex 73757072656d756d; asc supremum;;

*** WE ROLL BACK TRANSACTION (2)

এই টেবিলের একমাত্র ফোরইগেন কী হ'ল "অ্যাকাউন্ট_আইডি"।

কোন ধারনা?

সম্পাদনা: এখানে আমার প্লেয়ারক্লাবের তথ্য:

CREATE TABLE `PlayerClub` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `modifiedBy` bigint(20) DEFAULT NULL,
  `timeCreated` datetime NOT NULL,
  `account_id` bigint(20) DEFAULT NULL,
  `currentClubId` bigint(20) DEFAULT NULL,
  `endingLevelPosition` int(11) NOT NULL,
  `nextClubId` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UK_cagoa3q409gsukj51ltiokjoh` (`account_id`),
  KEY `FK_cagoa3q409gsukj51ltiokjoh` (`account_id`),
  CONSTRAINT `FK_cagoa3q409gsukj51ltiokjoh` FOREIGN KEY (`account_id`) REFERENCES   `PlayerAccount` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1

অচলাবস্থাকে আঘাত করার আগে প্রতিটি লেনদেনে আপনি আর কী করেছিলেন?
মাইকেল - স্ক্যালবট

আপনি যদি প্রতিটি সন্নিবেশের পরে প্রতিশ্রুতি জারি করেন এবং চেষ্টা করেন তবে? আসুন আমাদের জানান ..
নওয়াজ সোহেল

SHOW CREATE TABLE PlayerClubঅনুগ্রহ. এটি সাধারণত সূচকের সাথে সম্পর্কিত।
জেহাদ কেরিয়াকি

উত্তর:


13

বিষয়গুলি এখানে রয়েছে

এখানে দুটি INSERT রয়েছে

insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.596', 180, 4, 181, 561)
insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.611', 180, 4, 181, 563)

আপনার দুটি লাইন এখানে SHOW ENGINE INNODB STATUS\G

RECORD LOCKS space id 49735 page no 4 n bits 72 index `UK_cagoa3q409gsukj51ltiokjoh` of   table `db`.`playerclub` trx id 19896526 lock_mode X insert intention waiting
RECORD LOCKS space id 49735 page no 4 n bits 72 index `UK_cagoa3q409gsukj51ltiokjoh` of   table `db`.`playerclub` trx id 19896542 lock_mode X

পর্যবেক্ষণ

আপনি দুটি পৃথক অ্যাকাউন্ট_আইডিসহ একটি INSERT করছেন: 561 এবং 563।

এগুলি অনন্য এবং তাদের সমস্যা নেই, তাই না? ভুল !!!

ইনোডিবি'র ক্লাস্টারড ইনডেক্সের কারণে এখনও একটি অচলাবস্থা থাকতে পারে। কেন?

আপনার দুটি INSERTs ফিরে দেখুন। PRIMARY KEYউপর আইডি নির্দিষ্ট না। এটি অবশ্যই স্বয়ংক্রিয়ভাবে উত্পন্ন করা উচিত। প্রাথমিক কী (অনন্য বা অদ্বিতীয়) ব্যতীত অন্য কোনও কীতে প্রাথমিক কী সংযুক্ত থাকবে।

একটি গৌণ সূচক এবং আ প্রাথমিক কী কীভাবে জড়িত সে সম্পর্কে দয়া করে মাইএসকিউএল ডকুমেন্টেশনটি নোট করুন :

ক্লাস্টারড ইনডেক্স ব্যতীত অন্যান্য সমস্ত সূচকগুলি মাধ্যমিক সূচক হিসাবে পরিচিত। InnoDB- এ, একটি গৌণ সূচকের প্রতিটি রেকর্ডে সারিটির জন্য প্রাথমিক কী কলামগুলি এবং সেইসাথে মাধ্যমিক সূচকের জন্য নির্দিষ্ট কলামগুলি রয়েছে। ক্লাস্টারড ইনডেক্সে সারিটি অনুসন্ধান করার জন্য InnoDB এই প্রাথমিক কী মানটি ব্যবহার করে।

যদি প্রাথমিক কীটি দীর্ঘ হয় তবে গৌণ সূচকগুলি আরও স্থান ব্যবহার করে, তাই একটি সংক্ষিপ্ত প্রাথমিক কী থাকা সুবিধাজনক।

যদিও আপনি ACCOUNT_ID 561 এবং 563 ঢোকাতে হয়, ফণা আপনি সন্নিবেশ হয় অধীনে 561-(id)এবং 563-(id)মধ্যে UK_cagoa3q409gsukj51ltiokjohসূচী। PRIMARY KEYবোতলের হয়ে যতক্ষণ না কারণ সেকেন্ডারি ইনডেক্স অপেক্ষা করতে হয়েছে idকলাম auto_generated করা হয়।

সুপারিশ

আপনার কাছে দুটি প্রার্থী কী সহ একটি টেবিল রয়েছে

  • PRIMARY KEY চালু id
  • UNIQUE KEY চালু UK_cagoa3q409gsukj51ltiokjoh

যেহেতু উভয়ই তাই BIGINT, আপনি এই অচলাবস্থার পরিস্থিতি এড়িয়ে যাওয়ার পাশাপাশি পারফরম্যান্স বাড়াতে এবং একটি ছোট PlayerClubটেবিল idরাখতে পারেন এবং তবুও স্বতন্ত্রতা বজায় রাখতে পারেন UK_cagoa3q409gsukj51ltiokjoh


1
কেবলমাত্র সরানোর পরে এই টেবিলের একমাত্র ফরিয়েন কীটি হ'ল "অ্যাকাউন্ট_আইডি" অচলাবস্থা বন্ধ হবে।
আরবানলেগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.