场景
剖析postgresql BE的性能数据,适应于应用GCC编译的场景。
办法
. 编译
关上profiling选项
./configure --enable-profiling
. 执行
$ psqlpostgres=# 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