
Anton [Mgn, az09@osm]
05.06.2017
08:48:43

Уйкучу
05.06.2017
08:49:22

Alex
05.06.2017
08:50:04

Anton [Mgn, az09@osm]
05.06.2017
08:50:28
conf:
# - Memory
shared_buffers = 192GB
huge_pages = try
temp_buffers = 1GB
work_mem = 10GB
maintenance_work_mem = 20GB
база 194ГБ. озу 512

Google

Darafei
05.06.2017
08:50:29

dmitriy
05.06.2017
08:50:50
Page cache погуглите, в Википедии тоже наверно есть статья

Alex
05.06.2017
08:50:59
на практике вот "быстро" бывает иногда совсем не быстрым )

Vadim
05.06.2017
08:51:40
vm.swapiness=1 )

Darafei
05.06.2017
08:51:41
Ну это как любой кеш, повезло-не повезло

Alexey
05.06.2017
08:52:13
тут скорее вопрос как запиннить конкретную таблицу, т.е. чтобы она не вымывалась из page cache либо ОС (например backup) или самим постгесом (какой-нибудь шальной full table scan)

Igor
05.06.2017
08:52:20
меня пугали, что при высоких shared buffers появляется bottleneck между ним и диском, и постгресу слишком долго сохраняться на диск
это правда?

Anton [Mgn, az09@osm]
05.06.2017
08:53:08
вот, а мне как раз сохраняться не надо )

Alexey
05.06.2017
08:53:18
InnoDB, например, не умеет пиннить таблицы так же, как и PostgreSQL. но она не полагается на page cache, и есть ручки, которые можно крутить, чтобы горячие данные защитить от table scan

Igor
05.06.2017
08:53:47

Darafei
05.06.2017
08:55:21
Существует базы, которые не надо бекапить
R/O, разворачиваемое из дампа

Google

Sergey
05.06.2017
08:56:27

Alexey
05.06.2017
08:56:49
да ладно?
а как называется буфер, который для full table scan? а с page cache что?

Maksim
05.06.2017
09:00:32

Петр
05.06.2017
09:03:13

Sergey
05.06.2017
09:04:03
С page cache - это как с ОС договоритесь.

Alexey
05.06.2017
09:05:26
ну вот иногда с ОС тяжеловато договориться. для неё это всё black box

Maksim
05.06.2017
09:05:32

Alexey
05.06.2017
09:06:39
вот InnoDB так и делает. однако иногда хочется именно запиннить и именно конкретную таблицу
но глобально можно играться с innodb_old_blocks_pct и innodb_old_blocks_time

Maksim
05.06.2017
09:12:46
Кстати, сейчас в сообществе идёт работа над auto-prewarm - это восстановление буфер пула после рестарта https://www.postgresql.org/message-id/CAD__Ougw7Kc%2B1-cGA8GM0t%2BFuUHqPYR9Aow6OZX48sbH%3DV8BWw%40mail.gmail.com

Anton [Mgn, az09@osm]
05.06.2017
09:21:06

Sergey
05.06.2017
09:23:26
Боюсь это надо хорошо знать конкретный сорт Linux'а. В своё время задать размер dentry cache мне не удалось.
Открутили управляющие ручки в свежих ядрах

Alexey
05.06.2017
09:24:04

Anton [Mgn, az09@osm]
05.06.2017
09:25:38

Sergey
05.06.2017
09:27:08
?
Buffer Ring Replacement Strategy
---------------------------------
When running a query that needs to access a large number of pages just once,
such as VACUUM or a large sequential scan, a different strategy is used.
A page that has been touched only by such a scan is unlikely to be needed
again soon, so instead of running the normal clock sweep algorithm and
blowing out the entire buffer cache, a small ring of buffers is allocated
using the normal clock sweep algorithm and those buffers are reused for the
whole scan. This also implies that much of the write traffic caused by such
a statement will be done by the backend itself and not pushed off onto other
processes.
src/backend/storage/buffer/README

Maksim
05.06.2017
09:28:22

Alexey
05.06.2017
09:42:37

Google

Ярослава
05.06.2017
11:03:38
Мы, группа студентов факультета социологии СПбГУ, проводим большое исследование рейтинга IT работодателей Санкт-Петербурга и Москвы, а также предпочтений IT специалистов касательно работодателей в целом. Пожалуйста, поддержите нас, пройдя опрос по ссылке http://sgiz.mobi/s3/63243b734400
Опрос состоит только из закрытых вопросов и займет 5 минут.
Результаты опроса планируется опубликовать на habrahabr.ru в блоге “Моего круга” и в группе https://vk.com/jugru
С админом согласовано

Anton [Mgn, az09@osm]
05.06.2017
11:06:46
>большое
>Санкт-Петербурга и Москвы
впрочем как всегда

Уйкучу
05.06.2017
11:15:37

Ярослава
05.06.2017
11:18:15
>большое
>Санкт-Петербурга и Москвы
впрочем как всегда
Мы просто оперируем в опросе конкретными списками компаний, которые, к сожалению, для каждого региона составить трудозатратно. Для тех, кто работает в других регионах, в опросе своя ветка, которая также будет учтена в результатах

Anton [Mgn, az09@osm]
05.06.2017
11:19:05

Alex
05.06.2017
11:24:54
вроде не время для лаб

Dmitry
05.06.2017
11:30:18
Можно транспонировать other_id в массив и сравнивать с массивом {300,301}. Проверять на вхождение.
Вот вам и решение на чистом sql

Lev
05.06.2017
11:30:48
http://www.postgresqltutorial.com/postgresql-in/

Anton [Mgn, az09@osm]
05.06.2017
11:37:47
С админом не согласовано ?
потому что не считаю массивы - чистым sql
#вброс ?

Dmitry
05.06.2017
11:41:53
Нужно было ТОЛЬКО 300 или 301. Просто пересечие не прокатит, как мне кажется...
Массивы в постгре поддерживаются sql-м

Lev
05.06.2017
11:45:02
да и вообще прошлый век. Предлагаю, загнать в jsonb) '{"exclude": [300, 301]}'::jsonb

Anton [Mgn, az09@osm]
05.06.2017
11:46:36
да я не настаиваю, в условия задачи вчитаться даже не успел )

Dmitry
05.06.2017
11:53:25
Там же задача была запрос написать, а не структуру данных поменять )
Кстати, массивы стандартом поддерживаются : http://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html

Andrew
05.06.2017
12:01:09

Google

Sergey
05.06.2017
12:02:32
select * from table where other_id in (300,301);
select * from table where other_id between 300 and 301;

Andrew
05.06.2017
12:03:00

Egor
05.06.2017
12:03:39
а, да, вижу

Andrew
05.06.2017
12:04:11
с чего вдруг-то?
потому-что у id 1 2 3 есть other id 300 и 301
но у 2 и 3 есть еще и 999
а надо только тех у кого 300 и 301 могут быть

Sergey
05.06.2017
12:04:38
select * from table where other_id in (300,301);

Andrew
05.06.2017
12:05:17

Admin
ERROR: S client not available

Sergey
05.06.2017
12:05:36
select * from table where other_id = 300 or other_id = 301;

Andrew
05.06.2017
12:05:52

Sergey
05.06.2017
12:06:29
с чего это?

Andrew
05.06.2017
12:07:05
с чего это?
потому-что id 2 имеет у себя other_id 301 и еще 999
тоже самое и с 3

Sergey
05.06.2017
12:08:02
так у Вас ID это не primary key

Egor
05.06.2017
12:08:09
каунтом посчитай вхождения "не 300" и "не 301" отфильтруй по 0

Andrew
05.06.2017
12:08:31

Egor
05.06.2017
12:08:41
Выбрать сначала id которые имеют 300, 301, а затем проверить что их нет в списке id у которых это поле 300 и 301

Sergey
05.06.2017
12:08:53
убивать за такой дизайн......

Lev
05.06.2017
12:09:06
select a.id from (select id from table where other_id in (300,301)) a left join (select id from table where other_id not in (300,301))b on a.id=b.id where b.id is null;

Egor
05.06.2017
12:09:10
У которых это поле не 300 и 301

Google

Andrew
05.06.2017
12:09:26

Sergey
05.06.2017
12:09:29
id на самом деле не id а только называется так....

Andrew
05.06.2017
12:09:32

Boris
05.06.2017
12:14:35
подскажите плиз, удалил таблицу. пытаюсь восстановить ее из бэкапа и получаю ошибку
psql:manager_bonus_history.sql:106273: ERROR: relation "manager_bonus_history_pkey" already exists
как пофиксить можно?

Sergey
05.06.2017
12:14:56

Egor
05.06.2017
12:15:13
select a.id from table where a.id in (select id from table where other_id=300 or id=301) and not in (select id from table where other_id not in (300,301);
А так не будет работать?

Anton [Mgn, az09@osm]
05.06.2017
12:15:44

Lev
05.06.2017
12:16:02

Sergey
05.06.2017
12:19:10
так просто не нужно left писать.

Dmitry
05.06.2017
12:19:57
with t (id, name, other_id) as (select * from (
values (1, 'name_1', 300),
(2, 'name_2', 301),
(3, 'name_3', 999),
(1, 'name_1', 301),
(2, 'name_2', 999),
(3, 'name_3', 300)
) as foo)
select id, name
from ( select id, name, array_agg(other_id) as arr
from t group by id, name) as t2
where arr <@ array[300, 301];

Sergey
05.06.2017
12:19:59
select a.id from (select id from table where other_id in (300,301)) a join (select id from table where other_id not in (300,301))b on a.id=b.id

Dmitry
05.06.2017
12:20:04
Вот решение

Anton [Mgn, az09@osm]
05.06.2017
12:21:41
<@ птица какая-то )
как это можно называть чистым sql ))

Dmitry
05.06.2017
12:22:18
Оператор проверки вхождения одного массива в другой ))
А что это? Бейсик или яваскрипт?