@pgsql

Страница 198 из 1062
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
монструозно. стоит разбить на хп.

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

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

Alibek
18.12.2016
11:48:50
это сделает запрос быстрее? :)
Ну если про stable не забыть, то не должно быть медленнее​. Зато код понятнее станет

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
Триггеры тормозить не будут, ведь триггер обработка 1 значения, а если в миллион значений и т.п., т.е. поток?
не понял вопроса) в миллион значений что? должна быть всегда пара (инсерт транзакции, апдейт баланса)

не должно быть 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
Эм, обновление данных с сайта(пример), но сайт перерос 1-20к юзеров и теперь там 100к пользователей, не зачухается триггер с такими объёмами
у нас биллинг так балансы на триггерах и обновляет. нормально. и lock делается в хранимой процедуре которая в триггере вызывается. только там оракловая база.

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
если кто-то из конкурентов опоздает обновить именно этот баланс между update; commit - получит rollback
в рид коммитед получит вейт и перезапишет очевидно человеку нужно делать +diff чтобы такого не произошло

но вы тут немного ложную надежду даете

Alibek
19.12.2016
00:07:30
всё там же, https://github.com/Komzpa/fastmap - в explain_analyze_buffers.txt лежит угадай что :)
Ну судя по аналайз - планировшик выбирает скан по 10млн строк (вместо 40k с nested loop) - думаю можно ещё оптимизировать.

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

blkmrkt
19.12.2016
01:23:06
это само приложение должно сказать, а не выполняемый удаленно sql код
просто у меня консольная утилита принимает 2 uri: src и dest, и после установления подключения она должна себя вести немного иначе, если она общается с одним и тем же процессом через 2 подключения

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
А кратко про блокировки и МВЦЦ в постгресе как-то вот совсем не вырисовывается.

Mike Chuguniy
19.12.2016
12:15:15
я пока не готов к большим объемам
Там, на самом деле совсем немного.

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

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
лок на селект держится только до конца селекта
Селекты вообще не блокирующие, если это не mssql?

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
На oracle есть ORA-01555
Есть. Но это следствие CR и реализации его через undo слоты

И возникает только если те таблицы по которым идет селект очень активно меняются во время чтения

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
Какого рода реплика? У нас оракл с мвью-репликами. Блокировок нет. Понятно что совсем не посгрес. Но sql стандарт должен быть одинаковый
Ну тут скорее сама реплика подвиснуть может. Если открыта транзакция на чтение а WAL пытается поменять/удалить запись которая должна быть видима этой транзакции .

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