
Dan
17.12.2016
22:29:04
У меня два вопроса.
1. Доколе?
2. можно узнать подробнее что-нибудь про "сборку postgres" от команды 1с? что это за сборка и чем оно отличается от простого postgres?

Sergey
17.12.2016
22:30:22
ну нет, хотя почти да ;)

Google

Dan
17.12.2016
22:31:19
Справедливо.

Darafei
17.12.2016
23:32:06
а я тут запрос накорябал, может кто глянуть, что ещё докрутить можно?
запрос: https://github.com/Komzpa/fastmap/blob/master/fastmap.sql
эксплейн: https://github.com/Komzpa/fastmap/blob/master/explain_analyze_buffers.txt
схема: https://wiki.openstreetmap.org/w/images/5/58/OSM_DB_Schema_2016-12-13.svg

Alibek
18.12.2016
05:12:31
монструозно. стоит разбить на хп.

キリル
18.12.2016
06:34:32
@PostgreSQL_1C_Linux

Darafei
18.12.2016
06:37:44

JustLooKeD
18.12.2016
07:12:15
Доброго времени суток

Andy
18.12.2016
09:29:02
Добрый день! А подскажите, пожалуйста, где можно почитать про момента типа когда postgres запускает перестройку индексов, как хранятся внутренние типы и тд. Postgresql under hood

Павел П.
18.12.2016
09:38:59

Andy
18.12.2016
09:40:05
Спасибо, посмотрю

Alibek
18.12.2016
11:48:50

Darafei
18.12.2016
12:03:03
после распиливания стало 12 секунд вместо 1.2, stable написан

Alibek
18.12.2016
14:11:14
Покажи. Может не всё так печально.

Google

Darafei
18.12.2016
14:13:39
всё там же, https://github.com/Komzpa/fastmap - в explain_analyze_buffers.txt лежит угадай что :)
до 5 секунд дорезал кое-как

Dmitry
18.12.2016
15:28:32
привет всем!
подскажите, пожалуйста, в какую сторону гуглить такую ситуацию:
у меня 2 таблицы:
- денежные балансы пользователей
- денежные транзакции на балансах
по сути при созздании транзации изменяется сумма баланса (таблица с балансами является кеширующей, в плане итогового значения баланса)
я понимаю, что во время создания денежной транзакции я должен локать строку баланса пользователя и пробоводить инсерт в таблице транзакций и апдейт строки в таблице балансов в одной транзакции
но есть идея это все реализовать как функцию в бд, вызываюмой триггером
подскажите, пожалуйста, как лучше сделать или как загуглить

Александр
18.12.2016
15:30:52
Триггеры тормозить не будут, ведь триггер обработка 1 значения, а если в миллион значений и т.п., т.е. поток?

Dmitry
18.12.2016
15:32:15
не должно быть 5 транзакций, 1 апдейт баланса

Александр
18.12.2016
15:33:52
Эм, обновление данных с сайта(пример), но сайт перерос 1-20к юзеров и теперь там 100к пользователей, не зачухается триггер с такими объёмами

Dmitry
18.12.2016
15:35:06
понял
тогда на уровне приложения стоит ставить лок, верно?

Fike
18.12.2016
15:59:54
если вести все в event sourcing, то баланс и аудит транзакций сольются в единое целое с минимальными требованиями по синхронизации
но там свои заморочки

キリル
18.12.2016
17:54:33

Akzhan
18.12.2016
18:19:08
зачем вообще триггера и явные блокировки на баланс?
1) не факт, что вам нужно кэширование балансов, но если реально нужно
2) клиент - begin; insert billi-op, update balalance set amount = amount + diff; commit;

Dmitry
18.12.2016
18:22:07
Надо блокировать строку, которая апдейтится
А так это решение и выбрал да, спасибо)

Akzhan
18.12.2016
18:25:39
Эм, при апдейте по дизайну никакого расхождения быть не может. Строка баланса все равно неявно блокируется до окончания транзакции

Dmitry
18.12.2016
18:27:21

Akzhan
18.12.2016
18:28:20
begin; insert; update (ставится блокировка на строку balalance или формируетя новая версия); commit - все записано верно.
если кто-то из конкурентов опоздает обновить именно этот баланс между update; commit - получит rollback

キリル
18.12.2016
18:29:34

Google

Dmitry
18.12.2016
18:30:11
Проверить

Akzhan
18.12.2016
18:33:05
почитайте на досуге про уровни изоляции транзакций и все

Dmitry
18.12.2016
18:33:29

Evgeniy
18.12.2016
22:00:50
но вы тут немного ложную надежду даете

Alibek
19.12.2016
00:07:30

blkmrkt
19.12.2016
00:58:02
как средствами sql, имея 2 подключения, определить, установлены ли они к одному и тому же кластеру? может какой хеш можно селектнуть или ид уникальный процессу?

Fike
19.12.2016
01:20:53

blkmrkt
19.12.2016
01:23:06

Fike
19.12.2016
01:24:57
дай ей дополнительный флаг запуска

blkmrkt
19.12.2016
01:25:42


Zarina
19.12.2016
12:02:54
Ребята всем привет! Меня зовут Зарина, HR-менеджер компании Digsolab http://digsolab.ru Мы сейчас ищем специалиста по обработке данных и ETL-решениям на Python.
- Проектирование и разработка ETL процессов на Python для наполнения DWH компании данными из различных источников (MySQL, API Google Analytics / Яндекс.Метрики, API рекламных площадок, Google Spreadsheets, лог-файлы).
Сейчас мы используем для написания ETL фреймворк Luigi и аналитическую БД Amazon Redshift в качестве Data Mart. - Внедрение и поддержка разработанных решений;
- Разработка систем мониторинга ключевых показателей работы бизнеса и эффективности рекламных кампаний клиентов компании. Офис: 2 мин ходьбы от ст.м. Водный стадион. Готовы рассматривать кандидатов, которые только хотят писать на питоне, или имеют мин опыт на нем, преимуществом будет опыт создания ETL систем. Присылайте резюме в личку или на почту: zarina.mulyukova@gmail.com


Dmitry
19.12.2016
12:03:43
Раз лок есть, то достаточно, на мой взгляд, в апдейте написать так: set amount = amount + 100
Если добавили 100 единиц денег

Fike
19.12.2016
12:05:20
насколько понимаю, между SELECT x и UPDATE x = <вычисленное значение> имеет право пройти транзакция
лок на селект держится только до конца селекта
если я ничего не путаю

Google

Fike
19.12.2016
12:05:54
формат с x = x + Y должен вполне себе сработать

Evgeniy
19.12.2016
12:07:04
с +100 будет работать, с =100 получите жопу
я только об этом

Dmitry
19.12.2016
12:07:22
Меня по сути волновала ситуация, чтобы 2 одновременных запроса не пытались писать в одно и то же время
И судя по доке и эксперименту апдейт ставит лок на строку, пока не завершится транзакция

Admin
ERROR: S client not available

Dmitry
19.12.2016
12:07:33

Fike
19.12.2016
12:08:19
Если кто в теме - расскажите про локи, кстати. Я знаю только то, что в основе MVCC лежат снапшоты, но, например, через какие механизмы будет отслеживаться такой конфликт - локи или идентификаторы транзакций, скажем - не знаю.

Evgeniy
19.12.2016
12:09:04
мвцц через идентификаторы
через локи это не мвцц а 2pl

Fike
19.12.2016
12:10:17
2pl?

Dmitry
19.12.2016
12:10:54
2pl?
https://en.m.wikipedia.org/wiki/Two-phase_locking

Fike
19.12.2016
12:11:03
данке

Mike Chuguniy
19.12.2016
12:13:37
https://postgrespro.ru/education/courses/DBA2
02. Изоляция транзакций
03. Страницы и версии строк
04. Снимки и блокировки
Там же ссылки на видео и материалы курса.

Fike
19.12.2016
12:14:24
я пока не готов к большим объемам

Mike Chuguniy
19.12.2016
12:14:55
А кратко про блокировки и МВЦЦ в постгресе как-то вот совсем не вырисовывается.

Dmitry
19.12.2016
12:14:57

Mike Chuguniy
19.12.2016
12:15:15
Там, на самом деле совсем немного.
Мало того. В более сжатом виде материала по блокировкам и МВЦЦ в постгресе мне не встречалось. При этом материал вполне себе достаточен для понимания.

blkmrkt
19.12.2016
15:50:31

Google

Darafei
19.12.2016
15:56:56
есть рутовые права есть, можно соорудить такое -
create TEMP table machine_id (id uuid);
copy machine_id from '/etc/machine-id';
select * from machine_id;
или если можно писать, то сделать таблицу с хешом с одной стороны и дропнуть с другой

Петр
19.12.2016
17:23:42
можно fdw пользовать (что по идее то же самое copy), можно plperlu и пр.

Akzhan
19.12.2016
17:24:29
кстати, в примере с blalance update amount = amount + 100 скорее всего и блокировки жёсткой не даст, оба updatе попадут в очередь и будут выполнены по очереди на commit (грубо говоря), и не будет rollback. типичная оптимизация подобных ситуаций со стороны СУБД.

キリル
19.12.2016
18:03:11

Yury
19.12.2016
18:07:23

キリル
19.12.2016
18:12:30
если только не на реплике...
Какого рода реплика? У нас оракл с мвью-репликами. Блокировок нет. Понятно что совсем не посгрес. Но sql стандарт должен быть одинаковый

Sergey
19.12.2016
18:15:22
На oracle есть ORA-01555

Dmitry
19.12.2016
18:15:46
тут есть cron со скрипт-киллером, прям под себя

キリル
19.12.2016
18:17:42
И возникает только если те таблицы по которым идет селект очень активно меняются во время чтения

Sergey
19.12.2016
18:20:30
В postgres - реплике идеологически та же беда. Накатка логов меняет те таблицы по которым идёт select

キリル
19.12.2016
18:22:36
Это логично. Да

Sergey
19.12.2016
18:24:38
И оно либо на некоторую глубину отстаёт max_standby_streaming_delay либо запрещает мастеру подчищать нужные для запроса на реплике mvcc-данные через hot_standby_feedback

Yury
19.12.2016
18:25:33