Bug #109598 Set of innodb_buffer_pool_in_core_file=0 in my.cnf doesn't take effect
Submitted: 12 Jan 2023 7:54 Modified: 12 Jan 2023 14:45
Reporter: jie xu Email Updates:
Status: Not a Bug Impact on me:
None 
Category:MySQL Server Severity:S3 (Non-critical)
Version:8.0 OS:Any
Assigned to: CPU Architecture:Any
Tags: innodb_buffer_pool_in_core_file

[12 Jan 2023 7:54] jie xu
Description:
Set of innodb_buffer_pool_in_core_file=0 in my.cnf doesn't take effect.
Because the buf_pool_should_madvise only update when innodb_buffer_pool_in_core_file is changed.

How to repeat:
Set innodb_buffer_pool_in_core_file=0 in my.cnf and start MySQL.
when MySQL is crash, core file still dump buffer pool.

Suggested fix:
Call buf_pool_update_madvise() after buffer pool init.
[12 Jan 2023 10:06] huahua xu
Hi jie xu,

Whether the system variable `core_file` is set at server startup using options on the command line or in an option file:

1. core_file=0 in my.cnf 
2. --core-file on the command line
[12 Jan 2023 13:24] MySQL Verification Team
Hi Mr. xu,

Thank you for your bug report.

However, what you describe is expected behaviour.

Disabling innodb_buffer_pool_in_core_file takes effect only if the core_file variable is enabled and the operating system supports the MADV_DONTDUMP non-POSIX extension to the madvise() system call.

That is how it works ....

This is all described in the chapter 15.8.3.7.

Not a bug.
[12 Jan 2023 13:47] jie xu
Thank for you reply.

Of course i know how innodb_buffer_pool_in_core_file works.

I set the core_file variable, and my operating system supports the MADV_DONTDUMP non-POSIX extension to the madvise() system call.

I means if you set innodb_buffer_pool_in_core_file=0 in my.cnf and not on the command line, it wouldn't take effect.

you can try this.
[12 Jan 2023 13:57] MySQL Verification Team
Hi,

Try using OFF and if that does not work, try on the command line ......
[12 Jan 2023 13:57] MySQL Verification Team
Also, please try 8.0.31 and the OS that supports that call .....
[12 Jan 2023 14:12] jie xu
Thank for you reply again...

My MySQL version is 8.0.13 and i check the MySQL 8.0.31 source code.
The buf_pool_update_madvise() still only called by innodb_srv_buffer_pool_in_core_file_update.

That means buf_pool_should_madvise only update when innodb_buffer_pool_in_core_file is changed.

And i set innodb_buffer_pool_in_core_file=OFF in my.cnf and start MySQL still doesn't work.
If i set innodb_buffer_pool_in_core_file=OFF on the command line; it works, the buffer pool doesn't dump into core file.
[12 Jan 2023 14:20] MySQL Verification Team
Hi ,

I have set my buffer pool to 2 Gb, turned core_file to ON and innodb_buffer_pool_in_core_file to OFF and crashed the server.

I got a core file that was smaller then 100 Mb.

Can't repeat.
[12 Jan 2023 14:26] jie xu
Sorry, I check MySQL 8.0.13 source code again.

That update buf_pool_should_madvise in buf_pool_init().

That would works.

Thank you!!!
[12 Jan 2023 14:28] jie xu
Not 8.0.13, 8.0.31 source code would be ok.

The 8.0.13 source code has this problem.
[12 Jan 2023 14:45] jie xu
I try this on MySQL 8.0.31, that works.

Thank you!