Обсуждение: overhead of expression evaluation
Hi
just for curiosity - I tested simple script
postgres=# do
$$
declare s bigint = 0;
begin
for i in 1..1000000000 loop
s := s + i;
end loop;
raise notice '%', s;
end;
$$;
$$
declare s bigint = 0;
begin
for i in 1..1000000000 loop
s := s + i;
end loop;
raise notice '%', s;
end;
$$;
to see a overhead of some components
5,72% plpgsql.so [.] exec_assign_value
5,59% postgres [.] GetSnapshotData
4,94% plpgsql.so [.] exec_eval_simple_expr
4,84% postgres [.] AllocSetAlloc
3,61% postgres [.] ResourceOwnerForgetPlanCacheRef
2,95% postgres [.] choose_custom_plan
2,94% postgres [.] GetUserId
2,92% postgres [.] GetCachedPlan
2,87% postgres [.] LWLockAttemptLock
2,85% postgres [.] memset@plt
2,76% postgres [.] LWLockRelease
2,70% postgres [.] AllocSetFree
2,42% plpgsql.so [.] assign_simple_var
2,36% postgres [.] ExecInterpExpr
2,35% postgres [.] PopActiveSnapshot
2,27% postgres [.] OverrideSearchPathMatchesCurrent
2,22% plpgsql.so [.] plpgsql_param_eval_var
2,21% plpgsql.so [.] exec_stmt
1,89% libc-2.27.so [.] __memset_sse2_unaligned_erms
1,75% postgres [.] PushActiveSnapshot
1,74% postgres [.] AcquireExecutorLocks
1,67% postgres [.] CopySnapshot
1,64% postgres [.] CheckCachedPlan
1,56% postgres [.] RevalidateCachedQuery
1,55% postgres [.] MemoryContextAlloc
1,53% postgres [.] pfree
1,50% postgres [.] ResourceArrayRemove
1,43% postgres [.] LWLockAcquire
1,40% postgres [.] SPI_plan_get_cached_plan
5,59% postgres [.] GetSnapshotData
4,94% plpgsql.so [.] exec_eval_simple_expr
4,84% postgres [.] AllocSetAlloc
3,61% postgres [.] ResourceOwnerForgetPlanCacheRef
2,95% postgres [.] choose_custom_plan
2,94% postgres [.] GetUserId
2,92% postgres [.] GetCachedPlan
2,87% postgres [.] LWLockAttemptLock
2,85% postgres [.] memset@plt
2,76% postgres [.] LWLockRelease
2,70% postgres [.] AllocSetFree
2,42% plpgsql.so [.] assign_simple_var
2,36% postgres [.] ExecInterpExpr
2,35% postgres [.] PopActiveSnapshot
2,27% postgres [.] OverrideSearchPathMatchesCurrent
2,22% plpgsql.so [.] plpgsql_param_eval_var
2,21% plpgsql.so [.] exec_stmt
1,89% libc-2.27.so [.] __memset_sse2_unaligned_erms
1,75% postgres [.] PushActiveSnapshot
1,74% postgres [.] AcquireExecutorLocks
1,67% postgres [.] CopySnapshot
1,64% postgres [.] CheckCachedPlan
1,56% postgres [.] RevalidateCachedQuery
1,55% postgres [.] MemoryContextAlloc
1,53% postgres [.] pfree
1,50% postgres [.] ResourceArrayRemove
1,43% postgres [.] LWLockAcquire
1,40% postgres [.] SPI_plan_get_cached_plan
Regards
Pavel
2018-05-17 11:32 GMT+02:00 Pavel Stehule <pavel.stehule@gmail.com>:
Hijust for curiosity - I tested simple scriptpostgres=# do
$$
declare s bigint = 0;
begin
for i in 1..1000000000 loop
s := s + i;
end loop;
raise notice '%', s;
end;
$$;to see a overhead of some components5,72% plpgsql.so[.] exec_assign_value
5,59% postgres[.] GetSnapshotData
4,94% plpgsql.so[.] exec_eval_simple_expr
4,84% postgres[.] AllocSetAlloc
3,61% postgres[.] ResourceOwnerForgetPlanCacheRe f
2,95% postgres[.] choose_custom_plan
2,94% postgres[.] GetUserId
2,92% postgres[.] GetCachedPlan
2,87% postgres[.] LWLockAttemptLock
2,85% postgres[.] memset@plt
2,76% postgres[.] LWLockRelease
2,70% postgres[.] AllocSetFree
2,42% plpgsql.so[.] assign_simple_var
2,36% postgres[.] ExecInterpExpr
2,35% postgres[.] PopActiveSnapshot
2,27% postgres[.] OverrideSearchPathMatchesCurre nt
2,22% plpgsql.so[.] plpgsql_param_eval_var
2,21% plpgsql.so[.] exec_stmt
1,89% libc-2.27.so[.] __memset_sse2_unaligned_erms
1,75% postgres[.] PushActiveSnapshot
1,74% postgres[.] AcquireExecutorLocks
1,67% postgres[.] CopySnapshot
1,64% postgres[.] CheckCachedPlan
1,56% postgres[.] RevalidateCachedQuery
1,55% postgres[.] MemoryContextAlloc
1,53% postgres[.] pfree
1,50% postgres[.] ResourceArrayRemove
1,43% postgres[.] LWLockAcquire
1,40% postgres[.] SPI_plan_get_cached_plan
maybe we need some new kind of function, that doesn't requires snapshots, user info, locks - and the plan can be stored directly instead using plan cache.
Hard to believe, what necessary be done before we want to calculate two numbers.
Regards
Pavel
RegardsPavel