Bug #99158 x$memory_global_by_current_bytes is not same as memory_global_by_current_bytes
Submitted: 2 Apr 2020 10:35 Modified: 2 Apr 2020 11:34
Reporter: lalit Choudhary Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: SYS Schema Severity:S3 (Non-critical)
Version:8.0, 8.0.19 OS:Any
Assigned to: CPU Architecture:Any

[2 Apr 2020 10:35] lalit Choudhary
Description:
in sys schema x$memory_global_by_current_bytes view is not same as memory_global_by_current_bytes.

Create View: CREATE ALGORITHM=MERGE DEFINER=`mysql.sys`@`localhost` SQL SECURITY INVOKER VIEW `x$memory_global_by_current_bytes` (`event_name`,`current_count`,`current_alloc`,`current_avg_alloc`,`high_count`,`high_alloc`,`high_avg_alloc`) AS select `performance_schema`.`memory_summary_global_by_event_name`.`EVENT_NAME` AS `event_name`,`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_COUNT_USED` AS `current_count`,`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` AS `current_alloc`,ifnull((`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` / nullif(`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_COUNT_USED`,0)),0) AS `current_avg_alloc`,`performance_schema`.`memory_summary_global_by_event_name`.`HIGH_COUNT_USED` AS `high_count`,`performance_schema`.`memory_summary_global_by_event_name`.`HIGH_NUMBER_OF_BYTES_USED` AS `high_alloc`,ifnull((`performance_schema`.`memory_summary_global_by_event_name`.`HIGH_NUMBER_OF_BYTES_USED` / nullif(`performance_schema`.`memory_summary_global_by_event_name`.`HIGH_COUNT_USED`,0)),0) AS `high_avg_alloc` from `performance_schema`.`memory_summary_global_by_event_name` where (`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` > 0) order by `performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` desc
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci

The problem here is if we query the memory_global_by_current_bytes and x$memory_global_by_current_bytes Views they give different results for memory usage which may be confusing for users.
ref: https://dev.mysql.com/doc/refman/8.0/en/sys-memory-global-by-current-bytes.html

Example:

> SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area, SUM(current_alloc/1024/1024) AS current_allocMb FROM sys.memory_global_by_current_bytes GROUP BY SUBSTRING_INDEX(event_name,'/',2) ORDER BY SUM(current_alloc) DESC;
+---------------------------+--------------------------+
| code_area                 | current_allocMb          |
+---------------------------+--------------------------+
| memory/sql                |     0.009774971008300782 |
| memory/performance_schema |    0.0075833797454833984 |
| memory/innodb             |     0.006267375946044922 |
| memory/mysys              |    0.0009424877166748047 |
| memory/myisam             |      0.00066375732421875 |
| memory/mysqld_openssl     |   0.00021210670471191406 |
| memory/csv                |      0.00008392333984375 |
| memory/blackhole          |      0.00008392333984375 |
| memory/vio                |       0.0000152587890625 |
| memory/mysqlx             | 0.0000029659271240234374 |
| memory/temptable          |    0.0000019073486328125 |
+---------------------------+--------------------------+
11 rows in set (0.00 sec)

> SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area, SUM(current_alloc/1024/1024) AS current_allocMb FROM sys.x$memory_global_by_current_bytes GROUP BY SUBSTRING_INDEX(event_name,'/',2) ORDER BY SUM(current_alloc) DESC;
+---------------------------+-----------------+
| code_area                 | current_allocMb |
+---------------------------+-----------------+
| memory/sql                |    892.37761780 |
| memory/innodb             |    604.44603543 |
| memory/performance_schema |    276.61473088 |
| memory/mysys              |      8.63545609 |
| memory/temptable          |      2.00000000 |
| memory/mysqld_openssl     |      0.21719551 |
| memory/mysqlx             |      0.00303650 |
| memory/myisam             |      0.00066376 |
| memory/csv                |      0.00008392 |
| memory/blackhole          |      0.00008392 |
| memory/vio                |      0.00001526 |
+---------------------------+-----------------+
11 rows in set (0.01 sec)

How to repeat:
Example:

> SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area, SUM(current_alloc/1024/1024) AS current_allocMb FROM sys.memory_global_by_current_bytes GROUP BY SUBSTRING_INDEX(event_name,'/',2) ORDER BY SUM(current_alloc) DESC;
+---------------------------+--------------------------+
| code_area                 | current_allocMb          |
+---------------------------+--------------------------+
| memory/sql                |     0.009774971008300782 |
| memory/performance_schema |    0.0075833797454833984 |
| memory/innodb             |     0.006267375946044922 |
| memory/mysys              |    0.0009424877166748047 |
| memory/myisam             |      0.00066375732421875 |
| memory/mysqld_openssl     |   0.00021210670471191406 |
| memory/csv                |      0.00008392333984375 |
| memory/blackhole          |      0.00008392333984375 |
| memory/vio                |       0.0000152587890625 |
| memory/mysqlx             | 0.0000029659271240234374 |
| memory/temptable          |    0.0000019073486328125 |
+---------------------------+--------------------------+
11 rows in set (0.00 sec)

> SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area, SUM(current_alloc/1024/1024) AS current_allocMb FROM sys.x$memory_global_by_current_bytes GROUP BY SUBSTRING_INDEX(event_name,'/',2) ORDER BY SUM(current_alloc) DESC;
+---------------------------+-----------------+
| code_area                 | current_allocMb |
+---------------------------+-----------------+
| memory/sql                |    892.37761780 |
| memory/innodb             |    604.44603543 |
| memory/performance_schema |    276.61473088 |
| memory/mysys              |      8.63545609 |
| memory/temptable          |      2.00000000 |
| memory/mysqld_openssl     |      0.21719551 |
| memory/mysqlx             |      0.00303650 |
| memory/myisam             |      0.00066376 |
| memory/csv                |      0.00008392 |
| memory/blackhole          |      0.00008392 |
| memory/vio                |      0.00001526 |
+---------------------------+-----------------+
11 rows in set (0.01 sec)
[2 Apr 2020 11:34] MySQL Verification Team
Hello lalit,

Thank you for the report and feedback.

regards,
Umesh