乐趣区

关于postgresql:postgresql-profiling

场景

剖析 postgresql BE 的性能数据,适应于应用 GCC 编译的场景。

办法

. 编译

关上 profiling 选项

./configure --enable-profiling

. 执行

$ psql
postgres=# create table t1(id int);
postgres=# insert into t1 values(1);
postgres=# insert into t1 values(2);
postgres=# \q

psql 退出后,其对应的 BE 也随之退出。BE 退出后产生相应的 gmon.out 文件,默认在数据目录的 gprof/$PID 目录下

data/dn6/gprof/26516/gmon.out

. 转换

将 gmon.out 转换成可读的格局

gprof ./install/bin/postgres ./data/dn6/gprof/26516/gmon.out > gp.out

格局阐明

. 第一局部

各个函数的耗时排名。

column 意义
% time 本函数耗时所占的比例
self seconds 本函数本身的耗时,循环,零碎调用,零碎库函数调用 (如 memset) 等。留神,不蕴含其调用的子函数的耗时。
Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls   s/call   s/call  name    
 32.34      2.61     2.61    75262     0.00     0.00  handle_sync
 11.15      3.51     0.90   109412     0.00     0.00  base_yyparse
  4.71      3.89     0.38  2083921     0.00     0.00  SearchCatCacheInternal
  4.58      4.26     0.37  2940109     0.00     0.00  core_yylex
  4.21      4.60     0.34 13442073     0.00     0.00  AllocSetAlloc
  2.73      4.82     0.22  1627890     0.00     0.00  hash_search_with_hash_value
  2.60      5.03     0.21  4517373     0.00     0.00  MemoryContextAllocZeroAligned
  1.24      5.13     0.10  1297178     0.00     0.00  hash_bytes

. 第二局部

各个函数的堆栈状况,依照函数耗时排名排列。这里的函数耗时,与第一局部不同,是蕴含其子函数的耗时的。

column 意义
index 排名(蕴含子函数的耗时)
% time 本函数耗时所占的比例
self 同第一局部中的 ’self seconds’。本函数本身的耗时。
children 其调用的子函数的耗时。
called 被调用的次数。

上面例子,为 hgds_handle_sync 的信息。上面是其子函数信息,依照耗时排序。下面是其 caller 的信息。

index % time    self  children    called     name
-----------------------------------------------
                2.61    0.46   75262/75262       PostgresMain [6]
[8]     38.0    2.61    0.46   75262         handle_sync [8]
                0.01    0.33   71509/307849      dist_extended_msg [15]
                0.00    0.06   71509/71509       handle_result [81]
                0.05    0.00   75262/82932       IsTransactionBlock [90]
                0.01    0.00   75262/75262       dlist_is_empty [206]
                0.00    0.00   75262/1496363     errstart [106]
                0.00    0.00    3836/7670        cl_bind_dist_info [526]
-----------------------------------------------

. 第三局部

函数 index 信息。

Index by function name

 [1385] AbortBufferIO        [121] SearchSysCache1         [8] handle_sync
 [726] AbortOutOfAnyTransaction [1010] SearchSysCache2  [1039] hash_combine64

总结

通过 profiling 信息,能够剖析哪些函数奉献了更多的耗时,以便针对性的优化。也能够针对两个版本的数据进行比照,查找新增的性能杀手,进行优化。

参考资料

pgbuild

退出移动版