diff -Naur orig/mysql_ patched/mysql_ --- orig/mysql_ 2017-01-22 14:04:50.707839434 +0100 +++ patched/mysql_ 2017-01-22 14:04:33.299777182 +0100 @@ -882,8 +882,11 @@ if $graph_name =~ /innodb_/ && $data->{_innodb_disabled}; for my $ds (@{$graph->{data_sources}}) { - printf "%s.value %s\n", - clean_fieldname($ds->{name}), $data->{$ds->{name}}; + my $value = exists $ds->{value} + ? $ds->{value}($data) + : $data->{$ds->{name}}; + + printf "%s.value %s\n", clean_fieldname($ds->{name}), defined($value) ? $value : 'U'; } return 0; @@ -1072,6 +1075,7 @@ my %section_map = ( 'BUFFER POOL AND MEMORY' => \&parse_buffer_pool_and_memory, + 'INDIVIDUAL BUFFER POOL INFO' => \&skip, 'FILE I/O' => \&parse_file_io, 'INSERT BUFFER AND ADAPTIVE HASH INDEX' => \&parse_insert_buffer_and_adaptive_hash_index, @@ -1213,17 +1217,30 @@ sub parse_insert_buffer_and_adaptive_hash_index { parse_section( sub { - m/\G(\d+) inserts, (\d+) merged recs, (\d+) merges\n/gc && do { - $data->{ib_ibuf_inserts} = $1; - $data->{ib_ibuf_merged_rec} = $2; - $data->{ib_ibuf_merges} = $3; - return 1; - }; + # MySQL < 5.5 + m/\G(\d+) inserts, (\d+) merged recs, (\d+) merges\n/gc && do { + $data->{ib_ibuf_inserts} = $1; + $data->{ib_ibuf_merged_rec} = $2; + $data->{ib_ibuf_merges} = $3; + return 1; + }; + # MySQL >= 5.5 + m/\Gmerged operations:\n insert (\d+), delete mark \d+, delete \d+\ndiscarded operations:\n insert (\d+), delete mark \d+, delete \d+\n/gc && do { + $data->{ib_ibuf_inserts} = $1; + $data->{ib_ibuf_merged_rec} = $1 + $2; + return 1; + }; + m/\GIbuf: size (\d+), free list len (\d+), seg size (\d+),(?: (\d+) merges)?\n/gc && do { + $data->{ib_ibuf_size} = $1; + $data->{ib_ibuf_free_len} = $2; + $data->{ib_ibuf_seg_size} = $3; + $data->{ib_ibuf_merges} = $4 if defined $4; # MySQL >= 5.5 + return 1; + }; } ); } - sub parse_log { parse_section( sub {