Description:
When running SHOW INNODB STATUS, if the last deadlock has ~64K worth of record lock details, it will fill up the 64k (?) buffer, and you will see only semaphores, last foreign key error, and the truncated details of the last deadlock error.
The only way I know to restore the remaining sections of output (transactions, file I/O, insert buffer, log, buffer pool & memory, row operations) is to create a small deadlock manually. I don't think it's cleared by restarting the db, but even if so, that's not practical on a production server.
How to repeat:
Force a deadlock where the deadlock process has at least about 45-50 row locks. Do a show innodb status. The output will be never get past the deadlock details, like this:
Record lock, heap no 45 PHYSICAL RECORD: n_fields 42; compact format; info bits 32
0: len 8; hex 800000000eb828ff; asc ( ;; 1: len 6; hex 00026a62d4f9; asc jb ;; 2: len 7; hex 0000485be01a09; asc H[ ;; 3: len 4; hex 0061d79f; asc a ;; 4: len 4; hex 800059c9; asc Y ;; 5: len 4; hex 81326783; asc 2g ;; 6: len 4; hex 80000036; asc 6;; 7: len 4; hex 80000006; asc ;; 8: len 4; hex 80000004; asc ;; 9: len 2; hex 656e; asc en;; 10: len 4; hex 00000000; asc ;; 11: SQL NULL; 12: SQL NULL; 13: SQL NULL; 14: len 1; hex 56; asc V;; 15: len 19; hex 32393134363630303032343935323236363430; asc 2914660002495226640;; 16: SQL NULL; 17: len 4; hex 9e155540; asc U@;; 18: SQL NULL; 19: len 4; hex 9e155540; asc U@;; 20: SQL NULL; 21: len 4; hex 00000000; asc ;; 22: SQL NULL; 23: SQL NULL; 24: len 4; hex 00000000; asc ;; 25: SQL NULL; 26: SQL NULL; 27: len 4; hex 80000000; asc ;; 28: len 4; hex 8c2e3a3e; asc .:>;; 29: SQL NULL; 30: SQL NULL; 31: SQL NULL; 32: len 4; hex 000080bf; asc ;; 33: len 4; hex 1f851542; asc B;; 34: SQL NULL; 35: len 1; hex 03; asc ;; 36: len 4; hex 482bc74e; asc H+ N;; 37: len 4; hex 482bc74e; asc H+ N;; 38: len 4; hex 482bc1e8; asc H+ ;; 39: len 2; hex 8021; asc !;; 40: SQL NULL; 41: len 4; hex 80000021; asc !;;
Suggested fix:
To me this seems like a general problem of mixing low-level details that only a programmer would want with statistics that are important for a DBA for day to day operations. The latter data should really be in a table somewhere so you don't have to do string parsing for your diagnostic and monitoring tools to get key statistics (e.g. cacti).
I'm sure this is a well known and long standing issue. Be that as it may, my suggestions in order of preference, would be:
1) move all the key stats into discrete columns in a table.
2) provide a command to clear out this low-level diagnostic data.
3) increase the output limit from what I presume to be 64k -- use a TEXT field??