Size: a a a

pgsql – PostgreSQL

2020 May 27

Ð

Ð in pgsql – PostgreSQL
тех пор ни разу не падал, а до этого регулярно перезагружался
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Yaroslav Schekin
Вот пример:
SELECT x, COUNT(x), array_agg(x)
 FROM (
      SELECT ((i << 20) | (j << 10) | k)::text::xid AS x
        FROM generate_series(0,1023) AS i,
             generate_series(0,1023) AS j,
             generate_series(0,1023) AS k
      ) s
GROUP BY x;

И пояснение (всё © RhodiumToad):

Hashaggregate currently has no way to spill to disk. Hashagg won't be planned if the estimated hashtable size exceeds work_mem,
but at runtime, it'll blow past work_mem and use as much memory as it needs.

xid is a useful built-in example of a non-sortable type for sortable types, the query will usually use a sort and therefore be subject to
work_mem limits. But xid can only be grouped by hashing, so it forces a hashagg plan regardless of work_mem. So the query will try and create a hashtable with a billion entries each of which includes an array build state.
в 13-й версии нуачили спилить через диски…
источник

l

lnuynxa in pgsql – PostgreSQL
Yaroslav Schekin
Вот пример:
SELECT x, COUNT(x), array_agg(x)
 FROM (
      SELECT ((i << 20) | (j << 10) | k)::text::xid AS x
        FROM generate_series(0,1023) AS i,
             generate_series(0,1023) AS j,
             generate_series(0,1023) AS k
      ) s
GROUP BY x;

И пояснение (всё © RhodiumToad):

Hashaggregate currently has no way to spill to disk. Hashagg won't be planned if the estimated hashtable size exceeds work_mem,
but at runtime, it'll blow past work_mem and use as much memory as it needs.

xid is a useful built-in example of a non-sortable type for sortable types, the query will usually use a sort and therefore be subject to
work_mem limits. But xid can only be grouped by hashing, so it forces a hashagg plan regardless of work_mem. So the query will try and create a hashtable with a billion entries each of which includes an array build state.
спасибо, унесу к себе
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Victor Yegorov
в 13-й версии нуачили спилить через диски…
Что приятно, но сейчас никому не поможет. ;)
К тому же, это просто один из примеров, вот в чём суть.
источник

b

blkmrkt in pgsql – PostgreSQL
blkmrkt
Вот такое в логе нашел:

kernel: [41806532.140786] Call Trace:
kernel: [41806532.140807]  dump_stack+0x63/0x8b
kernel: [41806532.140815]  dump_header+0x71/0x285
kernel: [41806532.140822]  oom_kill_process+0x220/0x440
kernel: [41806532.140824]  out_of_memory+0x2d1/0x4f0
kernel: [41806532.140828]  __alloc_pages_slowpath+0xa61/0xe20
kernel: [41806532.140832]  __alloc_pages_nodemask+0x263/0x280
kernel: [41806532.140841]  alloc_pages_current+0x6a/0xe0
kernel: [41806532.140844]  __page_cache_alloc+0x81/0xa0
kernel: [41806532.140847]  filemap_fault+0x378/0x6f0
kernel: [41806532.140851]  ? page_add_file_rmap+0x5b/0x180
kernel: [41806532.140853]  ? filemap_map_pages+0x36c/0x390
kernel: [41806532.140862]  ext4_filemap_fault+0x31/0x44
kernel: [41806532.140866]  __do_fault+0x24/0xf0
kernel: [41806532.140869]  handle_pte_fault+0x883/0xd30
kernel: [41806532.140871]  __handle_mm_fault+0x478/0x5c0
kernel: [41806532.140874]  handle_mm_fault+0xb1/0x1f0
kernel: [41806532.140884]  __do_page_fault+0x250/0x4d0
kernel: [41806532.140887]  do_page_fault+0x2e/0xe0
kernel: [41806532.140890]  ? page_fault+0x2f/0x50
kernel: [41806532.140892]  page_fault+0x45/0x50
В этом стеке ж ничего страшного? Выглядит будто ядро читало файл с диска когда просто закончилась память.
источник

ПЕ

Петр Егоров... in pgsql – PostgreSQL
blkmrkt
Вот такое в логе нашел:

kernel: [41806532.140786] Call Trace:
kernel: [41806532.140807]  dump_stack+0x63/0x8b
kernel: [41806532.140815]  dump_header+0x71/0x285
kernel: [41806532.140822]  oom_kill_process+0x220/0x440
kernel: [41806532.140824]  out_of_memory+0x2d1/0x4f0
kernel: [41806532.140828]  __alloc_pages_slowpath+0xa61/0xe20
kernel: [41806532.140832]  __alloc_pages_nodemask+0x263/0x280
kernel: [41806532.140841]  alloc_pages_current+0x6a/0xe0
kernel: [41806532.140844]  __page_cache_alloc+0x81/0xa0
kernel: [41806532.140847]  filemap_fault+0x378/0x6f0
kernel: [41806532.140851]  ? page_add_file_rmap+0x5b/0x180
kernel: [41806532.140853]  ? filemap_map_pages+0x36c/0x390
kernel: [41806532.140862]  ext4_filemap_fault+0x31/0x44
kernel: [41806532.140866]  __do_fault+0x24/0xf0
kernel: [41806532.140869]  handle_pte_fault+0x883/0xd30
kernel: [41806532.140871]  __handle_mm_fault+0x478/0x5c0
kernel: [41806532.140874]  handle_mm_fault+0xb1/0x1f0
kernel: [41806532.140884]  __do_page_fault+0x250/0x4d0
kernel: [41806532.140887]  do_page_fault+0x2e/0xe0
kernel: [41806532.140890]  ? page_fault+0x2f/0x50
kernel: [41806532.140892]  page_fault+0x45/0x50
Настроить overcommit_memory, включить своп, на крайний случай. Должно помочь
источник

GS

Grigory Smolkin in pgsql – PostgreSQL
blkmrkt
В этом стеке ж ничего страшного? Выглядит будто ядро читало файл с диска когда просто закончилась память.
тут ядро обрабатывает page fault (запрос на выделение памяти), всячески пытается изыскать требуемое, после чего вызывает oom
источник

GS

Grigory Smolkin in pgsql – PostgreSQL
без стека приложения толку от него мало
источник

b

blkmrkt in pgsql – PostgreSQL
Grigory Smolkin
без стека приложения толку от него мало
Спасибо, я так же это понял
источник

QH

Quantum Harmonizer in pgsql – PostgreSQL
Способен ли синтаксис с фигурными скобками выражать пустой массив пустых массивов? Ибо у меня такое
источник
2020 May 28

YS

Yaroslav Schekin in pgsql – PostgreSQL
Так
> SELECT '{}'::int[][] = array[array[]::int[]]
t
(1 row)
и всё, нет? Да и вообще, эти "многомерные" массивы — не более, чем условность:

The current implementation does not enforce the declared number of dimensions either. Arrays of a particular element type are all considered to be of the same type, regardless of size or number of dimensions. So, declaring the array size or number of dimensions in CREATE TABLE is simply documentation; it does not affect run-time behavior.
Из https://www.postgresql.org/docs/current/arrays.html
источник

QH

Quantum Harmonizer in pgsql – PostgreSQL
Yaroslav Schekin
Так
> SELECT '{}'::int[][] = array[array[]::int[]]
t
(1 row)
и всё, нет? Да и вообще, эти "многомерные" массивы — не более, чем условность:

The current implementation does not enforce the declared number of dimensions either. Arrays of a particular element type are all considered to be of the same type, regardless of size or number of dimensions. So, declaring the array size or number of dimensions in CREATE TABLE is simply documentation; it does not affect run-time behavior.
Из https://www.postgresql.org/docs/current/arrays.html
а как быть, чтобы выразить, например {{3, 3, 3}, {2, 2}, {1}, {}}?

> does not enforce the declared number of dimensions either
А это про то, что T[] == T[n]
источник

QH

Quantum Harmonizer in pgsql – PostgreSQL
>  or number of dimensions
хмм, увидел, пойду проверю
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Quantum Harmonizer
а как быть, чтобы выразить, например {{3, 3, 3}, {2, 2}, {1}, {}}?

> does not enforce the declared number of dimensions either
А это про то, что T[] == T[n]
Так это же непрямоугольный "массив" (т.е. просто неправильный литерал), нет?
источник

QH

Quantum Harmonizer in pgsql – PostgreSQL
Yaroslav Schekin
Так это же непрямоугольный "массив" (т.е. просто неправильный литерал), нет?
чёёёёёёёёёёрт 🤦‍♂️
Спасибо.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Quantum Harmonizer
чёёёёёёёёёёрт 🤦‍♂️
Спасибо.
Да не за что! ;)
источник

QH

Quantum Harmonizer in pgsql – PostgreSQL
то есть враки всё, никакой это не массив, а матрица.
Вот блин, на нормальные массивы из ЯП это никак не ложится.
источник

b

blkmrkt in pgsql – PostgreSQL
А постгрес умеет восстанавливаться от неудавшегося malloc? Я к тому что если работать с отключенным overcommit_memory - это как-то поможет сократить падения постмастера из-за одного оборзевшего процесса?
источник

b

blkmrkt in pgsql – PostgreSQL
Доки вот тут говорят что "лучше отключить оверкоммит, но хз почему))0" https://www.postgresql.org/docs/12/kernel-resources.html
источник

ПЕ

Петр Егоров... in pgsql – PostgreSQL
blkmrkt
А постгрес умеет восстанавливаться от неудавшегося malloc? Я к тому что если работать с отключенным overcommit_memory - это как-то поможет сократить падения постмастера из-за одного оборзевшего процесса?
Будет падать только процесс, которому не хватило памяти. Это не будет вызывать падение всего кластера.
источник