
Айтуар
19.09.2016
06:47:01

Yury
19.09.2016
07:35:44
как вы умудрились тосты загосить!? диски сдохли?

Айтуар
19.09.2016
07:38:04
у меня такое было когда alter был с добавлением столбца с дефолтным значением, и в это время закончилось место.

Alex
19.09.2016
08:56:30
А вот кто-нибудь может сказать в чем заключались фиксы для постгреса под 1с ? или где почитать про это можно ?

Google

Alex
19.09.2016
08:56:51
(есть мысль что это может пригодиться и не в 1с)

Sergey
19.09.2016
09:02:47
на pgconf 2016 был доклад на эту тему.

Vadim
19.09.2016
09:08:16
https://pgconf.ru/2016/90069
там Федя Сигаев рассказывает про фиксы

Alex
19.09.2016
09:09:44
спасиб!

blkmrkt
19.09.2016
10:14:39

Vadim
19.09.2016
10:19:26
в документашке постгреса есть про ООМ
sysctl -w vm.overcommit_memory=2
17.4.3. Чрезмерное выделение памяти в Linux

Yury
19.09.2016
10:53:05
Анастасия ты как думаешь? Для меня такое поведение непонятно. Транзакция ведь в итоге не закоммичена.

Dmitry
19.09.2016
11:02:05
меня всегда смешило отношение разработчиков PostgreSQL: ну а кто что-то без ведома pg может в PGDATA изменить.

Paul
19.09.2016
11:15:27

Google

Paul
19.09.2016
11:15:35
так же, как они не могут не верить оперативной памяти
иначе им прийдется писать свою ОС с нуля, как сделали в mongo (последней это, кстати, не помогло)

Dmitry
19.09.2016
11:16:16
именно поэтому oracle использует raw-девайсы? :)
:D
не верить не может, но должен быть готовым

Paul
19.09.2016
11:16:44

Айтуар
19.09.2016
11:16:55
ха прикольно, БД с интегрированной ОС

Paul
19.09.2016
11:17:05

Dmitry
19.09.2016
11:17:21
бывают даже процессоры с "поддержкой" sql ;)
смотри oracle m7

Yury
19.09.2016
11:17:22
Если писать как говорит Дима можно поднять надёжность процентов на 20-30 но при этом сильно понизив производительность и в несколько раз увеличив кодовую базу.
Каждый должен заниматься своим делом.

Dmitry
19.09.2016
11:18:20
а так да, кругом пони и смайлики и все хорошо

Yury
19.09.2016
11:20:34
и fast food на каждом углу
быстро дёшево и... не шибко надёжно и вкусно это вполне конкретная потребность экономики. Я не говорю что нету другого подхода и областей... просто Postrges явно старается скорее быть на гране этого направления.
ИМХО конечно

Paul
19.09.2016
11:22:55
те же mongo сделали свою ОС и запускают код в ней. Но сделана она ужасно а инструментов отладки там нет вовсе

Dmitry
19.09.2016
11:24:06
zvercd из убунты чтоли сделали?

blkmrkt
19.09.2016
12:17:17

Yury
19.09.2016
12:17:36
удачи!

blkmrkt
19.09.2016
12:19:00
спасибо ?

Google

Dmitriy
19.09.2016
12:32:36
а разве WAL/VACUUM не должен это вычестить?
а если убился какой-нибудь процесс vacuum'a, или bgwriter'a/wall writer'a?
Транзакция была закоммичена, просто данные корректно не сохранились. Тем более что в той ситуации, как я помню было fsync=off
и чексуммы выключены, скорее всего

Dmitry
19.09.2016
12:34:08
fsync=off

Fike
19.09.2016
12:34:49
fsync=off is web scale

Paul
19.09.2016
12:40:48

Fike
19.09.2016
12:41:12
mongo-scale

Vadim
19.09.2016
12:45:16
оракл рав девайс не особо развивает, в ASM пошел

blkmrkt
19.09.2016
16:22:06
Ну блин. Все битые туплы удалил, но трансфер таблицы снова зафейлился на том же pg_toast_16455:
pg_dump: Dumping the contents of table "profiles" failed: PQgetResult() failed.
pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 38645199 in pg_toast_16455
Нельзя никак найти oid/id тупла по toast id? Гугл говорит что только перебор, но он 9 часов занял в последний раз, и уже не знаю что делать...

Yury
19.09.2016
16:28:50
а ты pg_dump в каком режиме запускаешь?

blkmrkt
19.09.2016
16:33:33
вот такой вот пайп pg_dump -d vw -O -t profiles -F c -v | ssh postgres@serveraddress "pg_restore -d vw"
А вот таким скриптом отбираю айдишники мертвых туплов:
DO $f$
declare
curid INT := 0;
vcontent TEXT;
badid INT;
begin
FOR badid IN SELECT id FROM profiles LOOP
curid = curid + 1;
if curid % 1000000 = 0 then
raise notice '% rows inspected', curid;
end if;
begin
SELECT profile
INTO vcontent
FROM profiles where id = badid;
vcontent := substr(vcontent::text,1000,2000);
exception
when others then
raise notice 'data for id % is corrupt', badid;
continue;
end;
end loop;
end;
$f$;

Yury
19.09.2016
16:38:31
но этот скрипт не помог как я смотрю?
т.е. в таблице нету тюплов с мёртвыми тостами, а pg_dump всёравно ругается?

Айтуар
19.09.2016
16:39:06
я думаю лучше select *
т.к. ты отбираешь только один столбец в данных
а повреждения могут быть в других

blkmrkt
19.09.2016
16:39:56
ну он 1251 мертвую запись нашел, я сделал DELETE их по id, а pg_backup все равно крашится на том же toast id что и в первый раз. Дропнуть бы все записи которые в этом тост ид куски хранят, только вот как определить какие у них ид?

Yury
19.09.2016
16:40:25
и может быть скажу ересь, но можно попробовать сдампить в plain формате... оно не должно тогда залезать никуда куда не нужно.

Айтуар
19.09.2016
16:40:57
сделать скрипт где select * from profiles where id=по циклу

Anastasia
19.09.2016
16:41:23
а ошибка точно та же, что и в первый раз?
тоже pg_toast_16455?

Google

blkmrkt
19.09.2016
16:41:41
я думаю лучше select *
ох точно, сейчас попробую. но другие колонки в записях только int и timestamp, не должны они в тупле храниться вроде

Айтуар
19.09.2016
16:42:07

Yury
19.09.2016
16:42:27

blkmrkt
19.09.2016
16:42:34

Yury
19.09.2016
16:43:48
Рекламмный лозунг: "TOAST - Впихнём невпихуеммое!"

Айтуар
19.09.2016
16:44:19
впихнём - вроде слитно пишеться ))

Yury
19.09.2016
16:44:51
подумал что есть такое слово - пихнём

Айтуар
19.09.2016
16:44:54
и невпихуемое - с одной "м" ))

Yury
19.09.2016
16:45:13
а вот тут я хотел бы 10 м поставить

blkmrkt
19.09.2016
16:45:20
интересно вот - а если случится обратное - отвалится сам тупл, а его тосты останутся, тогда уже точно не получится вычислить такой тост и удалить его с диска?

Айтуар
19.09.2016
16:46:12
можно, только руками придёться файлы ковырять

blkmrkt
19.09.2016
16:46:15

Айтуар
19.09.2016
16:46:50
ага ))

blkmrkt
19.09.2016
16:46:53
жуть. следует наверное книжку какую про устройсто постгреса почитать или доки, полезно знать

Айтуар
19.09.2016
16:48:17

Anastasia
19.09.2016
16:48:18
для начала. уверены, что именно на той таблице проблемы ищете?
with toast as (select oid from pg_class where relname = 'pg_toast_16455')
select relname from pg_class where reltoastrelid = (select oid from toast);

Айтуар
19.09.2016
16:49:12

blkmrkt
19.09.2016
16:49:13
запрос работает, таблица profiles

Google

Anastasia
19.09.2016
16:50:10

blkmrkt
19.09.2016
16:50:43
откуда вообще интересно эта цифра 16455 взялась

Anastasia
19.09.2016
16:51:39
это oid вашей таблички.
pg_toast_'tableoid'

blkmrkt
19.09.2016
16:52:02
ох, теперь многое стало понятно

Айтуар
19.09.2016
16:52:40

Sergey
19.09.2016
16:53:04
Если не бороться за "убитые" данные можно включить zero_damaged_pages

Айтуар
19.09.2016
16:53:59

blkmrkt
19.09.2016
16:54:29

Айтуар
19.09.2016
16:57:08

blkmrkt
19.09.2016
16:58:59

Sergey
19.09.2016
17:11:20
postgresql.conf
Возможно потребуется рестарт. Параметр описан в документации

Stanislav
19.09.2016
17:47:07