List:Internals« Previous MessageNext Message »
From:Baron Schwartz Date:November 7 2007 9:58pm
Subject:Re: Changing lock output in InnoDB status (bug #29126)
View as plain text  
I agree.  Yesterday I was in the mood to just chop away code I don't 
want.  But I think the following ought to be parameterized:

1) whether to print locks held
2) how many
3) whether to omit the records locked

I think this will take more than just a patch to lock0lock.c though.  As 
such I'm guessing MySQL AB wouldn't want the patch, because it'd be 
better to do this the 5.1 way (pluggably).

Eric Bergen wrote:
> I would rather see verbosity options be something that can be changed
> at runtime instead of compile time.
> 
> On 11/6/07, Baron Schwartz <baron@stripped> wrote:
>> One of my feature requests for InnoDB
>> (http://bugs.mysql.com/bug.php?id=29126) is to disable the verbose lock
>> output in SHOW INNODB STATUS.  It looks to me like it can be done very
>> easily in innobase/lock/lock0lock.c by changing this code:
>>
>> 4172    for (i = 0; i < lock_rec_get_n_bits(lock); i++) {
>> 4173
>> 4174       if (lock_rec_get_nth_bit(lock, i)) {
>> 4175
>> 4176          fprintf(file, "Record lock, heap no %lu ", (ulong) i);
>> 4177
>> 4178          if (page) {
>> 4179             rec_t*   rec
>> 4180                = page_find_rec_with_heap_no(page, i);
>> 4181             offsets = rec_get_offsets(rec, lock->index,
>> 4182                offsets, ULINT_UNDEFINED, &heap);
>> 4183             rec_print_new(file, rec, offsets);
>> 4184          }
>> 4185
>> 4186          putc('\n', file);
>> 4187       }
>> 4188    }
>>
>> I could easily comment that out, but it'd be nice to make a patch others
>> could use.  I think all I need to do is add a #ifdef around that.  But
>> what should I #ifdef with?  I see UNIV_SYNC_DEBUG in lots of places in
>> the source, but maybe there's something better.
>>
>> The other part of that feature request is to always print the locks for
>> each transaction, as is done when the innodb_lock_monitor is enabled.
>> This way I can see locks held, without filling the error log with them.
>>   I think the best way to do that is to add a server variable that will
>> allow that to be configurable, but I doubt that's as easy as the
>> following patch against the 5.0.45 source, which accomplishes both of my
>> desired changes, plus changes the number of locks printed from 10 to 50:
>>
>> baron@tigger mysql-5.0.45 $ diff -ur innobase/lock/lock0lock.c{.orig,}
>> --- innobase/lock/lock0lock.c.orig      2007-11-06 16:50:26.000000000 -0500
>> +++ innobase/lock/lock0lock.c   2007-11-06 17:07:23.000000000 -0500
>> @@ -4169,6 +4169,7 @@
>>   #endif /* UNIV_SYNC_DEBUG */
>>          }
>>
>> +#ifdef UNIV_SYNC_DEBUG
>>          for (i = 0; i < lock_rec_get_n_bits(lock); i++) {
>>
>>                  if (lock_rec_get_nth_bit(lock, i)) {
>> @@ -4186,6 +4187,7 @@
>>                          putc('\n', file);
>>                  }
>>          }
>> +#endif /* UNIV_SYNC_DEBUG */
>>
>>          mtr_commit(&mtr);
>>          if (UNIV_LIKELY_NULL(heap)) {
>> @@ -4357,11 +4359,6 @@
>>                  }
>>          }
>>
>> -       if (!srv_print_innodb_lock_monitor) {
>> -               nth_trx++;
>> -               goto loop;
>> -       }
>> -
>>          i = 0;
>>
>>          /* Look at the note about the trx loop above why we loop here:
>> @@ -4414,9 +4411,9 @@
>>
>>          nth_lock++;
>>
>> -       if (nth_lock >= 10) {
>> +       if (nth_lock >= 50) {
>>                  fputs(
>> -               "10 LOCKS PRINTED FOR THIS TRX: SUPPRESSING FURTHER
>> PRINTS\n",
>> +               "50 LOCKS PRINTED FOR THIS TRX: SUPPRESSING FURTHER
>> PRINTS\n",
>>                          file);
>>
>>                  nth_trx++;
>>
>>
>> Advice is appreciated.  I'll do this one way or another, as I really
>> need to see the locks and not the locked records for day-to-day
>> troubleshooting and admin jobs.  But doing it "the right way" would be
>> nice :-)
>>
>> Thanks
>> Baron

Thread
Changing lock output in InnoDB status (bug #29126)Baron Schwartz6 Nov
  • Re: Changing lock output in InnoDB status (bug #29126)Eric Bergen7 Nov
    • Re: Changing lock output in InnoDB status (bug #29126)Baron Schwartz7 Nov
  • Re: Changing lock output in InnoDB status (bug #29126)Vasil Dimov8 Nov