st 4. 5. 2022 v 2:15 odesílatel David Rowley <dgrowle...@gmail.com> napsal:

> On Tue, 3 May 2022 at 17:02, Pavel Stehule <pavel.steh...@gmail.com>
> wrote:
> > út 3. 5. 2022 v 6:57 odesílatel Tom Lane <t...@sss.pgh.pa.us> napsal:
> >> You sure there's not something taking an exclusive lock on one of these
> >> tables every so often?
> >
> > I am almost sure, I can see this issue only every time when I set a
> higher work mem. I don't see this issue in other cases.
>
> hmm, I don't think the query being blocked on a table lock would cause
> this behaviour. As far as I know, all table locks should be obtained
> before the timer starts for the "Execution Time" timer in EXPLAIN
> ANALYZE.  However, locks are obtained on indexes at executor startup,
> so if there was some delay in obtaining a lock on the index it would
> show up this way.  I just don't know of anything that obtains a
> conflicting lock on an index without the same conflicting lock on the
> table that the index belongs to.
>
> I do agree that the perf report does indicate that the extra time is
> taken due to some large amount of memory being allocated. I just can't
> quite see how that would happen in Memoize given that
> estimate_num_groups() clamps the distinct estimate as the number of
> input rows, which is 91 in both cases in your problem query.
>
> Are you able to run the Memoize query in psql with \watch 0.1 for a
> few seconds while you do:
>
> perf record --call-graph dwarf --pid <pid> sleep 2
>
> then send along the perf report.
>
> I locally hacked build_hash_table() in nodeMemoize.c to make the
> hashtable 100 million elements and I see my perf report for a trivial
> Memoize query come up as:
>
> +   99.98%     0.00%  postgres  postgres           [.] _start
> +   99.98%     0.00%  postgres  libc.so.6          [.]
> __libc_start_main_alias_2 (inlined)
> +   99.98%     0.00%  postgres  libc.so.6          [.]
> __libc_start_call_main
> +   99.98%     0.00%  postgres  postgres           [.] main
> +   99.98%     0.00%  postgres  postgres           [.] PostmasterMain
> +   99.98%     0.00%  postgres  postgres           [.] ServerLoop
> +   99.98%     0.00%  postgres  postgres           [.] BackendStartup
> (inlined)
> +   99.98%     0.00%  postgres  postgres           [.] BackendRun (inlined)
> +   99.98%     0.00%  postgres  postgres           [.] PostgresMain
> +   99.98%     0.00%  postgres  postgres           [.] exec_simple_query
> +   99.98%     0.00%  postgres  postgres           [.] PortalRun
> +   99.98%     0.00%  postgres  postgres           [.] FillPortalStore
> +   99.98%     0.00%  postgres  postgres           [.] PortalRunUtility
> +   99.98%     0.00%  postgres  postgres           [.]
> standard_ProcessUtility
> +   99.98%     0.00%  postgres  postgres           [.] ExplainQuery
> +   99.98%     0.00%  postgres  postgres           [.] ExplainOneQuery
> +   99.95%     0.00%  postgres  postgres           [.] ExplainOnePlan
> +   87.87%     0.00%  postgres  postgres           [.]
> standard_ExecutorStart
> +   87.87%     0.00%  postgres  postgres           [.] InitPlan (inlined)
> +   87.87%     0.00%  postgres  postgres           [.] ExecInitNode
> +   87.87%     0.00%  postgres  postgres           [.] ExecInitNestLoop
> +   87.87%     0.00%  postgres  postgres           [.] ExecInitMemoize
> +   87.87%     0.00%  postgres  postgres           [.]
> build_hash_table (inlined) <----
> +   87.87%     0.00%  postgres  postgres           [.] memoize_create
> (inlined)
> +   87.87%     0.00%  postgres  postgres           [.]
> memoize_allocate (inlined)
> +   87.87%     0.00%  postgres  postgres           [.]
> MemoryContextAllocExtended
> +   87.87%     0.00%  postgres  postgres           [.] memset (inlined)
>
> Failing that, are you able to pg_dump these tables and load them into
> a PostgreSQL instance that you can play around with and patch?
> Provided you can actually recreate the problem on that instance.
>

+   71,98%    14,36%  postmaster  [kernel.kallsyms]      [k] page_fault
                                                         ▒
+   70,19%     6,59%  postmaster  libc-2.28.so           [.]
__memset_avx2_erms                                                      ▒
+   68,20%     0,00%  postmaster  postgres               [.] ExecInitNode
                                                         ▒
+   68,20%     0,00%  postmaster  postgres               [.]
ExecInitNestLoop                                                        ▒
+   68,13%     0,00%  postmaster  postgres               [.]
ExecInitMemoize                                                         ▒
+   68,13%     0,00%  postmaster  postgres               [.]
MemoryContextAllocExtended                                              ▒
+   63,20%     0,00%  postmaster  postgres               [.]
0x0000000000776b89                                                      ▒
+   63,20%     0,00%  postmaster  postgres               [.] PostgresMain
                                                         ◆
+   63,03%     0,00%  postmaster  postgres               [.]
0x00000000007f48ca                                                      ▒
+   63,03%     0,00%  postmaster  postgres               [.] PortalRun
                                                          ▒
+   63,03%     0,00%  postmaster  postgres               [.]
0x00000000007f83ae                                                      ▒
+   63,03%     0,00%  postmaster  postgres               [.]
0x00000000007f7fee                                                      ▒
+   63,03%     0,00%  postmaster  pg_stat_statements.so  [.]
0x00007f5579b599c6                                                      ▒
+   63,03%     0,00%  postmaster  postgres               [.]
standard_ProcessUtility                                                 ▒
+   63,03%     0,00%  postmaster  postgres               [.] ExplainQuery
                                                         ▒
+   62,83%     0,00%  postmaster  postgres               [.]
0x000000000062e83c                                                      ▒
+   62,83%     0,00%  postmaster  postgres               [.] ExplainOnePlan
                                                         ▒
+   57,47%     0,14%  postmaster  [kernel.kallsyms]      [k] do_page_fault
                                                          ▒
+   57,23%     0,51%  postmaster  [kernel.kallsyms]      [k]
__do_page_fault                                                         ▒
+   55,61%     0,71%  postmaster  [kernel.kallsyms]      [k]
handle_mm_fault                                                         ▒
+   55,19%     0,00%  postmaster  pg_stat_statements.so  [.]
0x00007f5579b5ad2c                                                      ▒
+   55,19%     0,00%  postmaster  postgres               [.]
standard_ExecutorStart                                                  ▒
+   54,78%     0,87%  postmaster  [kernel.kallsyms]      [k]
__handle_mm_fault                                                       ▒
+   53,54%     0,37%  postmaster  [kernel.kallsyms]      [k]
do_anonymous_page                                                       ▒
+   36,36%     0,21%  postmaster  [kernel.kallsyms]      [k]
alloc_pages_vma                                                         ▒
+   35,99%     0,31%  postmaster  [kernel.kallsyms]      [k]
__alloc_pages_nodemask                                                  ▒
+   35,40%     1,06%  postmaster  [kernel.kallsyms]      [k]
get_page_from_freelist                                                  ▒
+   27,71%     0,62%  postmaster  [kernel.kallsyms]      [k] prep_new_page
                                                          ▒
+   27,09%    26,99%  postmaster  [kernel.kallsyms]      [k]
clear_page_erms                                                         ▒
+   11,24%     2,29%  postmaster  [kernel.kallsyms]      [k]
swapgs_restore_regs_and_return_to_usermode                              ▒
+    8,95%     6,87%  postmaster  [kernel.kallsyms]      [k]
prepare_exit_to_usermode                                                ▒
+    7,83%     1,01%  postmaster  [kernel.kallsyms]      [k]
mem_cgroup_charge



>
> David
>

Reply via email to