
Andrew
09.12.2017
06:09:07
ДОброе утро господа
есть проблема
кончилось место на диске
умер postgres
the database system is in recovery mode
как теперь норм запустится?
если расширить диск и просто стартануть
норм будет?

Artem
09.12.2017
06:44:18
Да

Artem
09.12.2017
08:59:55
Любой приличный сервер Интел с SSD в 10 рейде вывезет подобную нагрузку.

Google

Darafei
09.12.2017
09:04:32
а расскажите, неужели ssd и правда нужно в рейд пихать? :)

Айтуар
09.12.2017
09:07:14

Artem
09.12.2017
09:17:10
Я нет, поэтому и пихаем в рейд :)

Darafei
09.12.2017
09:17:43

Artem
09.12.2017
09:19:53
У меня был опыт работы в хостинг провайдере, с 3-4к серверами по всему миру, поэтому скажу так, вылетают они и парами, и тройками , но чаще всего в одиночку.
И никогда не угадаешь, кто и когда.

Айтуар
09.12.2017
09:20:26

Artem
09.12.2017
09:20:59
И Интел ssd не самые лучшие, по случаям отказа.
Samsung Pro конечно в фаворе
Но ведь все хотят экономить, когда у тебя несколько тысяч серверов с SSD, поэтому ищут компромисс между стоимостью и часами работы.
Кстати Круикалы тоже неплохо

Сергей
09.12.2017
09:23:49
https://stackshare.io/thumbtack/scaling-postgresql-at-thumbtack-load-balancing-and-health-checks

Google

Diskord
09.12.2017
09:54:27
Привет. В чём разница между таблицей и композитным типом?

Yaroslav
09.12.2017
10:21:22

Diskord
09.12.2017
10:22:03
Ищу способ создать вложенные таблицы
Если так можно

Yaroslav
09.12.2017
10:22:38

Diskord
09.12.2017
10:22:48
ну мне по заданию надо

Yaroslav
09.12.2017
10:24:49

Diskord
09.12.2017
10:26:20
что-то вроде этого
http://www.orafaq.com/wiki/NESTED_TABLE

Yaroslav
09.12.2017
10:36:38
что-то вроде этого
http://www.orafaq.com/wiki/NESTED_TABLE
Наверное, массивы композитных типов —- это самое похожее, что есть в PostgreSQL:
CREATE TABLE nested_sub(a int NOT NULL, b text NOT NULL);
CREATE TABLE nested(nested_id int NOT NULL, subtable nested_sub[]);
INSERT INTO nested(nested_id, subtable) VALUES (1, ARRAY[(1,'a'), (2,'b')]::nested_sub[]);
INSERT INTO nested(nested_id, subtable) VALUES (2, ARRAY[(3,'c'), (4,'d'), (5,'e')]::nested_sub[]);
SELECT *
FROM nested
CROSS JOIN unnest(nested.subtable) AS s;
А вообще, в реляционной модели для этого есть связанные таблицы в внешними ключами, а nested tables —- это что-то нетрадиционное. ;)


Diskord
09.12.2017
10:38:24
Наверное, массивы композитных типов —- это самое похожее, что есть в PostgreSQL:
CREATE TABLE nested_sub(a int NOT NULL, b text NOT NULL);
CREATE TABLE nested(nested_id int NOT NULL, subtable nested_sub[]);
INSERT INTO nested(nested_id, subtable) VALUES (1, ARRAY[(1,'a'), (2,'b')]::nested_sub[]);
INSERT INTO nested(nested_id, subtable) VALUES (2, ARRAY[(3,'c'), (4,'d'), (5,'e')]::nested_sub[]);
SELECT *
FROM nested
CROSS JOIN unnest(nested.subtable) AS s;
А вообще, в реляционной модели для этого есть связанные таблицы в внешними ключами, а nested tables —- это что-то нетрадиционное. ;)
Я делал через массивы, похоже что это единственный вариант

Yaroslav
09.12.2017
10:39:34

Mihail
09.12.2017
15:30:26
Товарищи, подскажите пожалуйста по задаче. Нужно выбрать базу данных для хранения сообщений для веб чата. Тут очень важна скорость записи и чтения. Посоветуйте, насколько целесообразно использовать postgres в сравнении к примеру с mongodb?

Сергей
09.12.2017
15:31:16
В чате надо очень много писать к пг только один сервер на запись работает, а Кассандра работает в мультимастер режиме

Darafei
09.12.2017
15:35:03

Mihail
09.12.2017
15:39:43
Мы планируем 50 тысяч пользователей постоянно. Хранить вечер. Честно говоря я не прям хорошо разбираюсь в базах. Очень хотелось бы услышать предложения знающих людей. Обязательно изучу информацию про Кассандру?
Хранить вечно. Опечатка

Darafei
09.12.2017
15:41:59

Сергей
09.12.2017
15:42:44
У каучбейс очень плохая документация

Google

Сергей
09.12.2017
15:43:29
Изучал его полтора года назад
Там документация в духе "да у нас есть материал вью , вот вам простейший пример, а как их использовать и что они умеют сами догадываетесь или купите наши курсы "

Alex
09.12.2017
15:52:09

Diskord
09.12.2017
16:11:08

Alex
09.12.2017
17:13:49
Нету поэтому приходится импровизировать сериализацией в жсон /массив, а потом превращением в таблицу на тему там поискать чегонить

Аггей
09.12.2017
18:07:30
Отказоустойчивость конечно хороша... Удобный вэб интерфейс, но реально использовать только как key-value... Для запросов по полям нужен проклятый primary index
У нас сейчас в проде 7 нод. В одном из бакетов 500 млн документов... Перевели на использование как kv. Значения ключей и "поисковых" полей в pg
Отказались от использования поиска по полям документа - когда primary index перевалил за 1,5 тб

Vladimir
09.12.2017
18:20:16
Couchbase - весьма странная вещь

Artem
09.12.2017
19:02:03
А кто посоветует, что лучше всего использовать для хранения изображений размером до 7-10 Mb?

Kirill
09.12.2017
19:03:12
Жёсткий диск

xPushkin
09.12.2017
19:03:17

Artem
09.12.2017
19:07:13
если файловая система, то что использовать для удаленного доступа - sshfs, nfs, cifs? Дело в том, что есть несколько инстансов приложения и потому локально хранить не вариант.

Kirill
09.12.2017
19:18:42
А, просто не работайте с файлами как с локальными, можете что-то модное и молодежное использовать или просто то что работает, например http://nginx.org/en/docs/http/ngx_http_dav_module.html, метаданные храните в БД (размер, разрешение, где файл лежит и т.д.) и всё у вас будет - ОК

Vladimir
09.12.2017
19:19:44
s3 webdav

Artem
09.12.2017
19:28:57
ок, спасибо за советы

Yura
09.12.2017
20:20:38
Ceph с erasure coding, если спереди есть кэш, или чтение не слишком интенсивное.
Если кто-то поможет настроить swift, то его можно попробовать. Я не осилил, к своему стыду.

Google

Yura
09.12.2017
20:24:27
Ну или S3 :-)

Аггей
09.12.2017
20:27:18
И при этом подход к записи / чтению для приложения не изменится


Yura
09.12.2017
20:35:39
Не слишком это сколько и на каком оборудовании? - так сказать из вашего опыта
Ну, у меня опыт был специфический: 11 тачек в схеме 8+3 суммарным объемом под петабайт. Перед ним кэш. Из кластера в кэш постоянный поток ~2 гигабита/сек, и заливка в кластер 1 гигабита / сек. Чувстовал он себя при этом спокойно, особо не напрягаясь.
По цифрам могу врать в любую сторону. Было это год назад, а память у меня не очень :-(
Кэш умножал трафик примерно 1:15.
Основные проблемы были с равномерной заливкой в кластер. Нужно сразу побескопоиться о равномерном распределении placement group, пока данных нет. Но в тот момент я не догадался об этом.

Аггей
09.12.2017
20:37:16
Кэш - схд с ssd?
Или просто ssd?

Yura
09.12.2017
20:40:39
Кэш - схд с ssd?
Нет, тупо тачки с 16тью винтами каждая и 64 гигабайта памяти. Кэша было много. Но и кластер сефа был где-то 1/4 от сего стораджа. Ставили эксперимент с хранением с erasure coding, чтобы уменьшить кол-во необходимого железа.

Alex
09.12.2017
20:41:00
А чо там с констстентностью будет файлов и меты? Не сьедет ничего если краш будет одного из компонентов? Синкать ж придется каким то образом?

Yura
09.12.2017
20:42:02
Что понравилось в сефе - это не убиваемость. Сыпались диски, была битая память. Но после замены все класстер оживал.
Но у админа должны быть стальные яйца.
Возможно часть файлов побилась. После проверки решили, что статистически 99.99% файлов точно целые. На тотальную проверку решили забить, благо специфика позволяла.
В целом, прочитав про Swift, мне показалось, что он больше бы подошел (для хранения веб-контента). Но он слишком тесно связан с openshift, и по туториалу с официальной доки я его поднять не смог :-( Знакомый админ сказал "не расстраивайся, я сам только за шесть часов его смог поднять". Т.е. с моим "админским" опытом этот провал не слишком постыден.


Alex
09.12.2017
21:13:27
А как ceph поможет с acid если данные хоть как нибудь важны и фотка сегодняшнего обеда не должна быть повторена завтра или не дай бог платье совпало с подружкиным? В том же пг есть несколько механизмов работы с raw данными - bytea ,largeobject. В других БД и того круче типа Filestream и FileTable. Бекап централизован, не надо обмазываться всякими rsync и прочими bash скриптами. Зато репликация и прочие вкусняшки прям из коробки . Перфоманс обмазать кешем для блобов и заниматься лишь его инвалидацией если из коробки не идет.

Dmitriy
10.12.2017
00:22:27
Кто в курсе как поставить ограничение в postgres, чтобы нельзя было добавлять несколько значений с одним ID для одного пользователя?
http://joxi.ru/a2X8K5h1ev3w2g

Pavel
10.12.2017
00:31:37
UNIQUE INDEX ON (master_id, service_id)

Dmitriy
10.12.2017
00:43:56
а так не верно ?
ALTER TABLE master_service ADD CONSTRAINT uniqueServiceForMaster UNIQUE (master_id, service_id);

Pavel
10.12.2017
00:47:48
Можно и так
https://stackoverflow.com/questions/23542794/postgres-unique-constraint-vs-index

Dmitriy
10.12.2017
00:50:16
спасибо, теперь хоть понял что читать куда смотреть ?

Google


Yura
10.12.2017
06:11:24
А как ceph поможет с acid если данные хоть как нибудь важны и фотка сегодняшнего обеда не должна быть повторена завтра или не дай бог платье совпало с подружкиным? В том же пг есть несколько механизмов работы с raw данными - bytea ,largeobject. В других БД и того круче типа Filestream и FileTable. Бекап централизован, не надо обмазываться всякими rsync и прочими bash скриптами. Зато репликация и прочие вкусняшки прям из коробки . Перфоманс обмазать кешем для блобов и заниматься лишь его инвалидацией если из коробки не идет.
Ни фига не понял :-( Ceph - это "сторадж объектов" (как они себя называют), а по сути, сторадж blob-ов. Т.е. позволяет залить блоб по выбранному тобой имени, и скачать блоб по этому имени. Без erasure-coding можно произвольно переписывать содержимое блоба, с erasure-coding вроде только аппендить.
Проверки уникальности нет. Все равно придется где-то имена блобов хранить, так там же сохрани и sha-256 от содержимого,и повесь уникальный индекс.
Бэкап 1 петабайта.... Я бы с удовольствием посмотрел на это. Потому и выбирался erasure coding, чтобы можно было переживать смерть нескольких машин без смерти кластера целиком, при этом имея replication factor меньше двух.
"Перформанс обмазан кэшем" - я как бы сразу сказал, что кэш нужен в стороне. Вообще, у ceph есть возможность организовать прозрачно многослойное хранение, с слоем из реплицированного неймспейса с быстрыми дисками спереди, и erasure coding с емкими дисками сзади. В этом случае, заливка идет вначале в быстрый слой, и прочитанные обьекты тоже поднимаются в быстрый слой, а старые обьекты из быстрого переносятся в емкий. Мы этим не пользовались, т.к. у нас был уже готовый кэш. Я думаю, что современный nginx с proxy-cache спокойно справится с задачей кэширования.
А на уровне отдельной тачки работает кэш операционной системы. Думаю, делает он это не намного хуже, чем shared_buffers постгресса. (по сети гуляет мнение, что даже лучше. Я с этим мнением не вполне согласен)


Artem
11.12.2017
08:39:54
коллеги, а не подскажете ссыль на хаутушку по развертыванию и конфигурации pgpool под Postgres-9.6?
мне собственно нужна реализация балансировки нагрузки, и вариант файловера

Vadim
11.12.2017
09:13:12
не надо файловер делать на pgpool, балансинг (с некоторыми оговорками) это максимум что можно из него выжать. Все остальное он делает достаточно плохо.
Ставится из репозитория(Можно собрать руками, если хочется прям свежак):
yum install http://www.pgpool.net/yum/rpms/3.6/redhat/rhel-7-x86_64/pgpool-II-pg96-3.6.6-1pgdg.rhel7.x86_64.rpm
pgpool -v
pgpool-II version 3.6.6 (subaruboshi)
по балансингу в документации все неплохо описано:
http://www.pgpool.net/docs/latest/en/html/runtime-config-load-balancing.html
http://www.pgpool.net/docs/latest/en/html/runtime-config-running-mode.html#RUNTIME-CONFIG-MASTER-SLAVE-MODE

Diskord
11.12.2017
09:26:51
Почему-то не хочет копировать через COPY FROM из csv, пишет что отказано в доступе, хотя все родительские папки и сама csv с chmod +777, а вот если я csv кидаю в папку кластера то копирует нормально, я так понимаю нужно в настройках что-то поменять, может кто знает куда глянуть?

Ilia
11.12.2017
09:32:14
Проверь
sudo -u postgress cat thefile | head

Sergey
11.12.2017
09:33:32
selinux?

Diskord
11.12.2017
09:38:37
да вроде нет


Dmitry
11.12.2017
09:52:24
[root@c8a8e7a77573 /]# /etc/init.d/postgresql-9.6 initdb
Initializing database: [ OK ]
[root@c8a8e7a77573 /]# /etc/init.d/postgresql-9.6 start
Starting postgresql-9.6 service:
сборка 9.6 с yum.postgresql.org для centos 6
бажная, не работает service start
77 ? S 0:00 /bin/sh /sbin/service postgresql-9.6 start
84 ? S 0:00 \_ /bin/sh /etc/init.d/postgresql-9.6 start
97 ? S 0:00 \_ runuser -l postgres -c /usr/pgsql-9.6/bin/postmaster -D '/var/lib/pgsql/9.6/data' »"/var/lib/pgsql/9.6/pgstartup.log" 2>&1
98 ? Ss 0:00 \_ -bash -c /usr/pgsql-9.6/bin/postmaster -D '/var/lib/pgsql/9.6/data' »"/var/lib/pgsql/9.6/pgstartup.log" 2>&1
121 ? S 0:00 \_ /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data
122 ? Ss 0:00 \_ postgres: logger process
124 ? Ss 0:00 \_ postgres: checkpointer process
125 ? Ss 0:00 \_ postgres: writer process
126 ? Ss 0:00 \_ postgres: wal writer process
127 ? Ss 0:00 \_ postgres: autovacuum launcher process
128 ? Ss 0:00 \_ postgres: stats collector process
не демонизируется