How would this deadlock happens?












0















Recently I am handing a SQL issue, I have two transaction, the transaction A first got the Next-Key Locks, and the transaction B tried to get the same lock, so it was waiting, then the transaction A tried to get Insert Intention Locks, so the deadlock happened. But I am confuse that why would this happens?



Here is my table structure:



CREATE TABLE `changeset` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT',
`userId` int(10) NOT NULL COMMENT,
`documentId` varchar(20) NOT NULL,
`memberId` bigint(13) NOT NULL,
`createTime` bigint(13) NOT NULL,
`version` bigint(13) NOT NULL COMMENT,
`changesets` mediumtext,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_documentId_version` (`documentId`,`version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=85771623 DEFAULT CHARSET=utf8


And here is my deadlock log:




(1) TRANSACTION:



TRANSACTION 22640, ACTIVE 66 sec starting index read



mysql tables in use 1, locked 1



LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s)



MySQL thread id 209, OS thread handle 123145559986176, query id 6204
localhost root Sending data



select * from changeset where documentId = '7oO5C_v' and version >=
13 for update



(1) WAITING FOR THIS LOCK TO BE GRANTED:



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22640
lock_mode X waiting



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



(2) TRANSACTION:



TRANSACTION 22639, ACTIVE 95 sec inserting



mysql tables in use 1, locked 1



6 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 1



MySQL thread id 212, OS thread handle 123145561657344, query id 6210
localhost root update insert into changeset values (0, 9, '7oO5C_v',
814, 1, 13, 'x')



(2) HOLDS THE LOCK(S):



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22639
lock_mode X



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



(2) WAITING FOR THIS LOCK TO BE GRANTED:



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22639
lock_mode X locks gap before rec insert intention waiting



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



WE ROLL BACK TRANSACTION (1)











share|improve this question




















  • 1





    Might also be handy for us to see the code that causes the deadlock? At the moment it looks like quite a simple "one transaction has started reading and another transaction is trying to write to the same data area being read"?

    – Caius Jard
    Dec 29 '18 at 7:21













  • What is the isolation level? From the log, you have two long running transactions, the transaction is as simple as you described?

    – Jacob
    Dec 31 '18 at 1:46
















0















Recently I am handing a SQL issue, I have two transaction, the transaction A first got the Next-Key Locks, and the transaction B tried to get the same lock, so it was waiting, then the transaction A tried to get Insert Intention Locks, so the deadlock happened. But I am confuse that why would this happens?



Here is my table structure:



CREATE TABLE `changeset` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT',
`userId` int(10) NOT NULL COMMENT,
`documentId` varchar(20) NOT NULL,
`memberId` bigint(13) NOT NULL,
`createTime` bigint(13) NOT NULL,
`version` bigint(13) NOT NULL COMMENT,
`changesets` mediumtext,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_documentId_version` (`documentId`,`version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=85771623 DEFAULT CHARSET=utf8


And here is my deadlock log:




(1) TRANSACTION:



TRANSACTION 22640, ACTIVE 66 sec starting index read



mysql tables in use 1, locked 1



LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s)



MySQL thread id 209, OS thread handle 123145559986176, query id 6204
localhost root Sending data



select * from changeset where documentId = '7oO5C_v' and version >=
13 for update



(1) WAITING FOR THIS LOCK TO BE GRANTED:



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22640
lock_mode X waiting



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



(2) TRANSACTION:



TRANSACTION 22639, ACTIVE 95 sec inserting



mysql tables in use 1, locked 1



6 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 1



MySQL thread id 212, OS thread handle 123145561657344, query id 6210
localhost root update insert into changeset values (0, 9, '7oO5C_v',
814, 1, 13, 'x')



(2) HOLDS THE LOCK(S):



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22639
lock_mode X



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



(2) WAITING FOR THIS LOCK TO BE GRANTED:



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22639
lock_mode X locks gap before rec insert intention waiting



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



WE ROLL BACK TRANSACTION (1)











share|improve this question




















  • 1





    Might also be handy for us to see the code that causes the deadlock? At the moment it looks like quite a simple "one transaction has started reading and another transaction is trying to write to the same data area being read"?

    – Caius Jard
    Dec 29 '18 at 7:21













  • What is the isolation level? From the log, you have two long running transactions, the transaction is as simple as you described?

    – Jacob
    Dec 31 '18 at 1:46














0












0








0








Recently I am handing a SQL issue, I have two transaction, the transaction A first got the Next-Key Locks, and the transaction B tried to get the same lock, so it was waiting, then the transaction A tried to get Insert Intention Locks, so the deadlock happened. But I am confuse that why would this happens?



Here is my table structure:



CREATE TABLE `changeset` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT',
`userId` int(10) NOT NULL COMMENT,
`documentId` varchar(20) NOT NULL,
`memberId` bigint(13) NOT NULL,
`createTime` bigint(13) NOT NULL,
`version` bigint(13) NOT NULL COMMENT,
`changesets` mediumtext,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_documentId_version` (`documentId`,`version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=85771623 DEFAULT CHARSET=utf8


And here is my deadlock log:




(1) TRANSACTION:



TRANSACTION 22640, ACTIVE 66 sec starting index read



mysql tables in use 1, locked 1



LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s)



MySQL thread id 209, OS thread handle 123145559986176, query id 6204
localhost root Sending data



select * from changeset where documentId = '7oO5C_v' and version >=
13 for update



(1) WAITING FOR THIS LOCK TO BE GRANTED:



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22640
lock_mode X waiting



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



(2) TRANSACTION:



TRANSACTION 22639, ACTIVE 95 sec inserting



mysql tables in use 1, locked 1



6 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 1



MySQL thread id 212, OS thread handle 123145561657344, query id 6210
localhost root update insert into changeset values (0, 9, '7oO5C_v',
814, 1, 13, 'x')



(2) HOLDS THE LOCK(S):



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22639
lock_mode X



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



(2) WAITING FOR THIS LOCK TO BE GRANTED:



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22639
lock_mode X locks gap before rec insert intention waiting



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



WE ROLL BACK TRANSACTION (1)











share|improve this question
















Recently I am handing a SQL issue, I have two transaction, the transaction A first got the Next-Key Locks, and the transaction B tried to get the same lock, so it was waiting, then the transaction A tried to get Insert Intention Locks, so the deadlock happened. But I am confuse that why would this happens?



Here is my table structure:



CREATE TABLE `changeset` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT',
`userId` int(10) NOT NULL COMMENT,
`documentId` varchar(20) NOT NULL,
`memberId` bigint(13) NOT NULL,
`createTime` bigint(13) NOT NULL,
`version` bigint(13) NOT NULL COMMENT,
`changesets` mediumtext,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_documentId_version` (`documentId`,`version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=85771623 DEFAULT CHARSET=utf8


And here is my deadlock log:




(1) TRANSACTION:



TRANSACTION 22640, ACTIVE 66 sec starting index read



mysql tables in use 1, locked 1



LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s)



MySQL thread id 209, OS thread handle 123145559986176, query id 6204
localhost root Sending data



select * from changeset where documentId = '7oO5C_v' and version >=
13 for update



(1) WAITING FOR THIS LOCK TO BE GRANTED:



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22640
lock_mode X waiting



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



(2) TRANSACTION:



TRANSACTION 22639, ACTIVE 95 sec inserting



mysql tables in use 1, locked 1



6 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 1



MySQL thread id 212, OS thread handle 123145561657344, query id 6210
localhost root update insert into changeset values (0, 9, '7oO5C_v',
814, 1, 13, 'x')



(2) HOLDS THE LOCK(S):



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22639
lock_mode X



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



(2) WAITING FOR THIS LOCK TO BE GRANTED:



RECORD LOCKS space id 107 page no 15 n bits 704 index
uniq_documentId_version of table test.changeset trx id 22639
lock_mode X locks gap before rec insert intention waiting



Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format;
info bits 0



0: len 7; hex 3976735431644a; asc 9vsT1dJ;;



1: len 8; hex 8000000000000000; asc ;;



2: len 4; hex 051cbef7; asc ;;



WE ROLL BACK TRANSACTION (1)








mysql sql






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 29 '18 at 2:48









Nick

26.1k101836




26.1k101836










asked Dec 29 '18 at 2:36









DongSheltonDongShelton

1314




1314








  • 1





    Might also be handy for us to see the code that causes the deadlock? At the moment it looks like quite a simple "one transaction has started reading and another transaction is trying to write to the same data area being read"?

    – Caius Jard
    Dec 29 '18 at 7:21













  • What is the isolation level? From the log, you have two long running transactions, the transaction is as simple as you described?

    – Jacob
    Dec 31 '18 at 1:46














  • 1





    Might also be handy for us to see the code that causes the deadlock? At the moment it looks like quite a simple "one transaction has started reading and another transaction is trying to write to the same data area being read"?

    – Caius Jard
    Dec 29 '18 at 7:21













  • What is the isolation level? From the log, you have two long running transactions, the transaction is as simple as you described?

    – Jacob
    Dec 31 '18 at 1:46








1




1





Might also be handy for us to see the code that causes the deadlock? At the moment it looks like quite a simple "one transaction has started reading and another transaction is trying to write to the same data area being read"?

– Caius Jard
Dec 29 '18 at 7:21







Might also be handy for us to see the code that causes the deadlock? At the moment it looks like quite a simple "one transaction has started reading and another transaction is trying to write to the same data area being read"?

– Caius Jard
Dec 29 '18 at 7:21















What is the isolation level? From the log, you have two long running transactions, the transaction is as simple as you described?

– Jacob
Dec 31 '18 at 1:46





What is the isolation level? From the log, you have two long running transactions, the transaction is as simple as you described?

– Jacob
Dec 31 '18 at 1:46












1 Answer
1






active

oldest

votes


















0














Have you used "(nolock) " in your selects?



Select * From Table with (nolock)





share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53966241%2fhow-would-this-deadlock-happens%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Have you used "(nolock) " in your selects?



    Select * From Table with (nolock)





    share|improve this answer






























      0














      Have you used "(nolock) " in your selects?



      Select * From Table with (nolock)





      share|improve this answer




























        0












        0








        0







        Have you used "(nolock) " in your selects?



        Select * From Table with (nolock)





        share|improve this answer















        Have you used "(nolock) " in your selects?



        Select * From Table with (nolock)






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Dec 30 '18 at 13:09

























        answered Dec 29 '18 at 7:26









        RenaRena

        367




        367






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53966241%2fhow-would-this-deadlock-happens%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Monofisismo

            Angular Downloading a file using contenturl with Basic Authentication

            Olmecas