gdb跟踪postgresql全局变量的值

1,问题引出

src/backend/storage/buffer/buf_init.c 文件中的NBuffers 怎么来的?

Size
BufferShmemSize(void)
{
	Size		size = 0;

	/* size of buffer descriptors */
	size = add_size(size, mul_size(NBuffers, sizeof(BufferDescPadded)));

2,gdb跟踪

posb@fed1:/posb> gdb /posb/in/bin/postgres 
GNU gdb (GDB) Fedora 12.1-1.fc36
......
Reading symbols from /posb/in/bin/postgres...
(gdb) watch NBuffers
Hardware watchpoint 1: NBuffers
(gdb) r
Starting program: /posb/in/bin/postgres 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Hardware watchpoint 1: NBuffers

Old value = 1000
New value = 1024
InitializeOneGUCOption (gconf=0xebdb10 <ConfigureNamesInt+3024>) at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:5735
5735					conf->gen.extra = conf->reset_extra = extra;
(gdb) c
Continuing.

Hardware watchpoint 1: NBuffers

Old value = 1024
New value = 16384
set_config_option (name=0x1132a28 "shared_buffers", value=0x1132a48 "128MB", context=context@entry=PGC_POSTMASTER, source=source@entry=PGC_S_FILE, action=action@entry=GUC_ACTION_SET, changeVal=<optimized out>, changeVal@entry=true, elevel=15, is_reload=false) at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:7671
7671						set_extra_field(&conf->gen, &conf->gen.extra,
(gdb) l
7666							push_old_value(&conf->gen, action);
7667	
7668						if (conf->assign_hook)
7669							conf->assign_hook(newval, newextra);
7670						*conf->variable = newval;

NBuffers 第一次设置为默认值。配置文件中有shared_buffers时,NBuffers会再一次设置。

再一次gdb

(gdb) b set_config_option
Breakpoint 2 at 0xaaff9b: file /posb/postgresql-14.4/src/backend/utils/misc/guc.c, line 7284.
(gdb) r
Breakpoint 2, set_config_option (name=0x1132970 "max_connections", value=0x1132990 "100", context=context@entry=PGC_POSTMASTER, source=source@entry=PGC_S_FILE, action=action@entry=GUC_ACTION_SET, changeVal=changeVal@entry=true, elevel=0, is_reload=false) at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:7284
7284	{
(gdb) 
Continuing.

Breakpoint 2, set_config_option (name=0x1132a28 "shared_buffers", value=0x1132a48 "128MB", context=context@entry=PGC_POSTMASTER, source=source@entry=PGC_S_FILE, action=action@entry=GUC_ACTION_SET, changeVal=changeVal@entry=true, elevel=0, is_reload=false) at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:7284
7284	{
(gdb) s
7287		void	   *newextra = NULL;
......
convert_to_base_unit (value=value@entry=128, unit=0x1132a4b "MB", base_unit=base_unit@entry=8192, base_value=base_value@entry=0x7fffffffdff8) at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:6622
6622	{
(gdb) s
6646		for (i = 0; *table[i].unit; i++)
(gdb) 
6648			if (base_unit == table[i].base_unit &&
(gdb) 
6651				double		cvalue = value * table[i].multiplier;
(gdb) p value
$13 = 128
(gdb) p i
$10 = 17
(gdb) p table[17]
$11 = {
  unit = "MB\000",
  base_unit = 8192,
  multiplier = 128
}
(gdb) p cvalue 
$12 = 16384
(gdb) bt
#0  convert_to_base_unit (value=value@entry=128, unit=<optimized out>, base_unit=base_unit@entry=8192, 
    base_value=base_value@entry=0x7fffffffdff8) at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:6660
#1  0x0000000000aae5f2 in parse_int (value=value@entry=0x1132a48 "128MB", result=result@entry=0x7fffffffe0c8, flags=8192, 
    hintmsg=hintmsg@entry=0x7fffffffe048) at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:6868
#2  0x0000000000aaf9e1 in parse_and_validate_value (record=record@entry=0xebdb10 <ConfigureNamesInt+3024>, 
    name=name@entry=0x1132a28 "shared_buffers", value=value@entry=0x1132a48 "128MB", source=source@entry=PGC_S_FILE, 
    elevel=elevel@entry=15, newval=newval@entry=0x7fffffffe0c8, newextra=0x7fffffffe0c0)
    at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:7109
#3  0x0000000000ab0af5 in set_config_option (name=0x1132a28 "shared_buffers", value=0x1132a48 "128MB", 
    context=context@entry=PGC_POSTMASTER, source=source@entry=PGC_S_FILE, action=action@entry=GUC_ACTION_SET, changeVal=<optimized out>, 
    changeVal@entry=true, elevel=15, is_reload=false) at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:7623
#4  0x0000000000ab89d3 in ProcessConfigFileInternal (context=context@entry=PGC_POSTMASTER, applySettings=applySettings@entry=true, 
    elevel=elevel@entry=15) at /posb/build_dir/src/backend/utils/misc/guc-file.l:441
#5  0x0000000000ab8cd9 in ProcessConfigFile (context=context@entry=PGC_POSTMASTER)
    at /posb/build_dir/src/backend/utils/misc/guc-file.l:155
#6  0x0000000000ab8f24 in SelectConfigFiles (userDoption=userDoption@entry=0x0, progname=0x110f2a0 "postgres")
    at /posb/postgresql-14.4/src/backend/utils/misc/guc.c:5918
#7  0x000000000083f5ce in PostmasterMain (argc=argc@entry=1, argv=argv@entry=0x110fee0)
    at /posb/postgresql-14.4/src/backend/postmaster/postmaster.c:886
#8  0x000000000075a4ce in main (argc=1, argv=0x110fee0) at /posb/postgresql-14.4/src/backend/main/main.c:209
(gdb) 

parse_int 处理 shared_buffers,如果没有加单位(MB),直接用参数数值设置NBuffers。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值