| Bug #90264 | Some file operations in mf_iocache2.c are not instrumented | ||
|---|---|---|---|
| Submitted: | 30 Mar 2018 15:54 | Modified: | 3 Sep 2018 22:09 |
| Reporter: | Yura Sorokin (OCA) | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Performance Schema | Severity: | S3 (Non-critical) |
| Version: | 5.5.59, 5.6.39, 5.7.21 | OS: | Any |
| Assigned to: | Marc ALFF | CPU Architecture: | Any |
| Tags: | Contribution | ||
[30 Mar 2018 17:20]
Yura Sorokin
Patch for 5.5 (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: bug90264-5_5.diff (application/octet-stream, text), 5.04 KiB.
[30 Mar 2018 17:20]
Yura Sorokin
Patch for 5.6 (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: bug90264-5_6.diff (application/octet-stream, text), 5.22 KiB.
[30 Mar 2018 17:21]
Yura Sorokin
Patch for 5.7 (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: bug90264-5_7.diff (application/octet-stream, text), 7.42 KiB.
[31 Mar 2018 4:58]
MySQL Verification Team
Hello Yura Sorokin, Thank you for the report and contribution. Thanks, Umesh
[20 Aug 2018 14:07]
Marc ALFF
Hi Yura Sorokin, Thanks for : - the bug report, - the contribution with the fix. Regards, -- Marc Alff
[3 Sep 2018 22:09]
Paul DuBois
Posted by developer: Fixed in 5.5.62, 5.6.42, 5.7.24, 8.0.13. Previously, file I/O performed in the I/O cache in the mysys library was not instrumented, affecting in particular file I/O statistics reported by the Performance Schema about the binary log index file. Now, this I/O is instrumented and Performance Schema statistics are accurate. Thanks to Yura Sorokin for the contribution.

Description: my_b_append_tell(), my_b_fill() and my_b_filelength() functions from 'mf_iocache2.c' use non-instrumented file tell/seek/read functions (my_tell(), my_seek() and my_read()) instead of their instrumented version (mysql_file_tell(), mysql_file_seek() and mysql_file_read()). This causes inaccurate statistics in PERFORMANCE_SCHEMA. How to repeat: Run ./mysql-test/mtr --debug-server perfschema.relaylog "============ Performance schema on master ============" select substring(file_name, locate("master-", file_name)) as FILE_NAME, EVENT_NAME, if (count_read > 0, "MANY", "NONE") as COUNT_READ, if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE from performance_schema.file_summary_by_instance where file_name like "%master-%" order by file_name; This query (and similar) should return 'MANY' for 'COUNT_READ' and 'SUM_NUMBER_OF_BYTES_READ' instead of 'NONE' Suggested fix: Change my_tell() / my_seek() / my_read() to mysql_file_tell() / mysql_file_seek() / mysql_file_read() in 'mf_iocache2.c'. See the attached patches.