po 2. 5. 2022 v 16:02 odesílatel Pavel Stehule <pavel.steh...@gmail.com>
napsal:

>
>
> po 2. 5. 2022 v 15:28 odesílatel Matthias van de Meent <
> boekewurm+postg...@gmail.com> napsal:
>
>> On Mon, 2 May 2022 at 11:00, Pavel Stehule <pavel.steh...@gmail.com>
>> wrote:
>> >
>> > Hi
>> >
>> > I found a query that is significantly slower with more memory
>>
>> Which PostgreSQL version did you use? Did you enable assert checking?
>> Do you have an example database setup to work with?
>>
>> > plan 2
>> >  QUERY PLAN
>> > ----------------
>> >  Nested Loop Anti Join  (cost=46.53..2914.58 rows=1 width=16) (actual
>> time=18.306..23.065 rows=32 loops=1)
>> > ...
>> >  Execution Time: 451.161 ms
>>
>> Truly strange; especially the 418ms difference between execution time
>> and the root node's "actual time". I haven't really seen such
>> differences happen, except when concurrent locks were held at the
>> table / index level.
>>
>> > plan 1 - fast https://explain.depesz.com/s/XM1f
>> >
>> > plan 2 - slow https://explain.depesz.com/s/2rBw
>> >
>> > Strange - the time of last row is +/- same, but execution time is 10x
>> worse
>>
>> The only difference between the two plans that I see is that plan 1
>> doesn't use memoization, whereas plan 2 does use 2 memoize plan nodes
>> (one of 66 misses; one of 342 misses). The only "expensive" operation
>> that I see in memoize nodes is the check for memory size in
>> assert-enabled builds; and that should have very low overhead
>> considering that the size of the memoized data is only 8kB and 25kB
>> respectively.
>>
>
> This is PostgreSQL 14 used in production environment
>
>  (2022-05-02 15:37:29) prd_aukro=# show debug_assertions ;
> ┌──────────────────┐
> │ debug_assertions │
> ├──────────────────┤
> │ off              │
> └──────────────────┘
> (1 řádka)
>
> Čas: 0,295 ms
> (2022-05-02 15:37:35) prd_aukro=# select version();
>
> ┌────────────────────────────────────────────────────────────────────────────────────────────────────────┐
> │                                                version
>                               │
>
> ├────────────────────────────────────────────────────────────────────────────────────────────────────────┤
> │ PostgreSQL 14.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0
> 20210514 (Red Hat 8.5.0-4), 64-bit │
>
> └────────────────────────────────────────────────────────────────────────────────────────────────────────┘
> (1 řádka)
> Čas: 0,629 ms
>
> there is just shared buffers changed to 32GB and work_mem to 70MB.
> Unfortunately - it is in production environment with customer data, so I
> cannot to play too much
>
> This is perf of slow
>
>   25,94%  postmaster  [kernel.kallsyms]  [k] clear_page_erms
>   11,06%  postmaster  [kernel.kallsyms]  [k] page_fault
>    5,51%  postmaster  [kernel.kallsyms]  [k] prepare_exit_to_usermode
>    5,18%  postmaster  [kernel.kallsyms]  [k] __list_del_entry_valid
>    5,15%  postmaster  libc-2.28.so       [.] __memset_avx2_erms
>    3,99%  postmaster  [kernel.kallsyms]  [k] unmap_page_range
>    3,07%  postmaster  postgres           [.] hash_search_with_hash_value
>    2,73%  postmaster  [kernel.kallsyms]  [k] cgroup_throttle_swaprate
>    2,49%  postmaster  postgres           [.] heap_page_prune_opt
>    1,92%  postmaster  [kernel.kallsyms]  [k] try_charge
>    1,85%  postmaster  [kernel.kallsyms]  [k]
> swapgs_restore_regs_and_return_to_usermode
>    1,82%  postmaster  [kernel.kallsyms]  [k] error_entry
>    1,73%  postmaster  postgres           [.] _bt_checkkeys
>    1,48%  postmaster  [kernel.kallsyms]  [k] free_pcppages_bulk
>    1,35%  postmaster  [kernel.kallsyms]  [k] get_page_from_freelist
>    1,20%  postmaster  [kernel.kallsyms]  [k] __pagevec_lru_add_fn
>    1,08%  postmaster  [kernel.kallsyms]  [k]
> percpu_ref_put_many.constprop.84
>    1,08%  postmaster  postgres           [.] 0x00000000003c1be6
>    1,06%  postmaster  [kernel.kallsyms]  [k] get_mem_cgroup_from_mm.part.49
>    0,86%  postmaster  [kernel.kallsyms]  [k] __handle_mm_fault
>    0,79%  postmaster  [kernel.kallsyms]  [k] mem_cgroup_charge
>    0,70%  postmaster  [kernel.kallsyms]  [k] release_pages
>    0,61%  postmaster  postgres           [.] _bt_checkpage
>    0,61%  postmaster  [kernel.kallsyms]  [k] free_pages_and_swap_cache
>    0,60%  postmaster  [kernel.kallsyms]  [k] handle_mm_fault
>    0,57%  postmaster  postgres           [.] tbm_iterate
>    0,56%  postmaster  [kernel.kallsyms]  [k] __count_memcg_events.part.70
>    0,55%  postmaster  [kernel.kallsyms]  [k] __mod_memcg_lruvec_state
>    0,52%  postmaster  postgres           [.] 0x000000000015f6e5
>    0,50%  postmaster  [kernel.kallsyms]  [k] prep_new_page
>    0,49%  postmaster  [kernel.kallsyms]  [k] __do_page_fault
>    0,46%  postmaster  [kernel.kallsyms]  [k] _raw_spin_lock
>    0,44%  postmaster  [kernel.kallsyms]  [k] do_anonymous_page
>
> This is fast
>
>   21,13%  postmaster  postgres           [.] hash_search_with_hash_value
>   15,33%  postmaster  postgres           [.] heap_page_prune_opt
>   10,22%  postmaster  libc-2.28.so       [.] __memset_avx2_erms
>   10,00%  postmaster  postgres           [.] _bt_checkkeys
>    6,23%  postmaster  postgres           [.] 0x00000000003c1be6
>    4,94%  postmaster  postgres           [.] _bt_checkpage
>    2,85%  postmaster  postgres           [.] tbm_iterate
>    2,31%  postmaster  postgres           [.] nocache_index_getattr
>    2,13%  postmaster  postgres           [.] pg_qsort
>    1,58%  postmaster  postgres           [.] heap_hot_search_buffer
>    1,58%  postmaster  postgres           [.] FunctionCall2Coll
>    1,58%  postmaster  postgres           [.] 0x000000000015f6e5
>    1,17%  postmaster  postgres           [.] LWLockRelease
>    0,85%  postmaster  libc-2.28.so       [.] __memcmp_avx2_movbe
>    0,64%  postmaster  postgres           [.] 0x00000000003e4233
>    0,54%  postmaster  postgres           [.] hash_bytes
>    0,53%  postmaster  postgres           [.] 0x0000000000306fbb
>    0,53%  postmaster  postgres           [.] LWLockAcquire
>    0,42%  postmaster  postgres           [.] 0x00000000003c1c6f
>    0,42%  postmaster  postgres           [.] _bt_compare
>
>
It looks so memoization allocate lot of memory - maybe there are some
temporal memory leak

 Performance counter stats for process id '4004464':

             84,26 msec task-clock                #    0,012 CPUs utilized

                 3      context-switches          #    0,036 K/sec

                 0      cpu-migrations            #    0,000 K/sec

                19      page-faults               #    0,225 K/sec

                 0      cycles                    #    0,000 GHz

       106 873 995      instructions

        20 225 431      branches                  #  240,026 M/sec

           348 834      branch-misses             #    1,72% of all
branches

       7,106142051 seconds time elapsed

 Performance counter stats for process id '4004464':

          1 116,97 msec task-clock                #    0,214 CPUs utilized

                 4      context-switches          #    0,004 K/sec

                 0      cpu-migrations            #    0,000 K/sec

            99 349      page-faults               #    0,089 M/sec

                 0      cycles                    #    0,000 GHz

       478 842 411      instructions

        89 495 015      branches                  #   80,123 M/sec

         1 014 763      branch-misses             #    1,13% of all
branches

       5,221116331 seconds time elapsed

Regards

Pavel


>
>
>
> Regards
>
> Pavel
>
>

Reply via email to