关于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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理