@pgsql

Страница 94 из 1062
Айтуар
19.09.2016
06:47:01
а ну ок, я скрипт запустил, нашел уже штук 500 битых записей
Мне повезло, у меня было только 2. Удалил их. Всё заработало.

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
как вы умудрились тосты загосить!? диски сдохли?
oom killer начал убивать процессы постгреса, после того как покончил с кривым скриптом питона. это мне хороший урок думать много раз прежде чем запускать фигню на сервере с бд

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
Анастасия ты как думаешь? Для меня такое поведение непонятно. Транзакция ведь в итоге не закоммичена.
ты так говоришь, как будто pg работает в сферическом вакууме, а не на реальном железе и софте, в том числе и в ядре/модулях нет ошибок

меня всегда смешило отношение разработчиков 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
именно поэтому oracle использует raw-девайсы? :)
подозреваю, что оракл использует raw-devices потому, что может.

Айтуар
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
а так да, кругом пони и смайлики и все хорошо
это называется unix way в частности и слои абстракций в целом

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

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

blkmrkt
19.09.2016
12:17:17
а разве WAL/VACUUM не должен это вычестить?
вакуум тоже падает с той же ошибкой

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, не должны они в тупле храниться вроде

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);

Google
Anastasia
19.09.2016
16:50:10
у меня при таком запросе как раз падал ))
при каком таком? при поиске в pg_class?

blkmrkt
19.09.2016
16:50:43
для начала. уверены, что именно на той таблице проблемы ищете? with toast as (select oid from pg_class where relname = 'pg_toast_16455') select relname from pg_class where reltoastrelid = (select oid from toast);
reltuples: 3.89846e+08 Это похоже все туплы которые в той базе есть. Что за фигня с названием pg_toast_16455? Я думал они секвенциально на куски как-то делятся...

откуда вообще интересно эта цифра 16455 взялась

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

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

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

blkmrkt
19.09.2016
16:54:29
reltuples: 3.89846e+08 Это похоже все туплы которые в той базе есть. Что за фигня с названием pg_toast_16455? Я думал они секвенциально на куски как-то делятся...
select * from pg_class where relname = 'pg_toast_16455': а вот видимо reltuples: 9.39638e+06 которые слишком жирные чтоб поместиться в 8кб, да? Как бы id записей узнать отсюда, да перебирать только их?

Айтуар
19.09.2016
16:57:08
а собирать из сорцов не нужно для этого?
не zero_damaged_pages = on достаточно

blkmrkt
19.09.2016
16:58:59
не zero_damaged_pages = on достаточно
окей, запустил снова c этим флагом

Sergey
19.09.2016
17:11:20
postgresql.conf

Возможно потребуется рестарт. Параметр описан в документации

Страница 94 из 1062