@pgsql

Страница 355 из 1062
Уйкучу
05.06.2017
08:49:22
Линуксы всю свободную память под дисковый кеш используют
а что вы имеете ввиду под дисковым кешем? swap?

Alex
05.06.2017
08:50:04
Линуксы всю свободную память под дисковый кеш используют
почему тогда при малых значениях, shared_buffers таки лезет в диск ?

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
почему тогда при малых значениях, shared_buffers таки лезет в диск ?
Он лезет в диск, но диск быстро ответит. :)

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
Alexey
05.06.2017
08:56:49
да ладно?

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

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
тут скорее вопрос как запиннить конкретную таблицу, т.е. чтобы она не вымывалась из page cache либо ОС (например backup) или самим постгесом (какой-нибудь шальной full table scan)
пиннить некомильфо, скорее надо накрутить счётчик usage_count в буфер пул для страниц, чтобы они вымывались в последнюю очередь

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
С page cache - это как с ОС договоритесь.
наверно оффтоп, но хотелось бы знать какие есть способы со стороны ОС этим рулить

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

Открутили управляющие ручки в свежих ядрах

Alexey
05.06.2017
09:24:04
Кстати, сейчас в сообществе идёт работа над auto-prewarm - это восстановление буфер пула после рестарта https://www.postgresql.org/message-id/CAD__Ougw7Kc%2B1-cGA8GM0t%2BFuUHqPYR9Aow6OZX48sbH%3DV8BWw%40mail.gmail.com
круто! в xtradb такое появилось в 2010-м, в innodb — в 2013-м. предлагаю сразу реализовать такие вещи в postgresql, потому что рано или поздно эти фичи попросят: 1) сбрасывать/восстанавливать не весь кэш, а определённый процент; 2) блокировать входящие соединения до полного восстановления кэша

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

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
>большое >Санкт-Петербурга и Москвы впрочем как всегда
Мы просто оперируем в опросе конкретными списками компаний, которые, к сожалению, для каждого региона составить трудозатратно. Для тех, кто работает в других регионах, в опросе своя ветка, которая также будет учтена в результатах

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
С админом не согласовано ?

Можно транспонировать other_id в массив и сравнивать с массивом {300,301}. Проверять на вхождение.
насколько успел врубиться я бы искал пересечение двух выборок про 300 и про 301

потому что не считаю массивы - чистым sql #вброс ?

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

Массивы в постгре поддерживаются sql-м

потому что не считаю массивы - чистым 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
да я не настаиваю, в условия задачи вчитаться даже не успел )
есть таблица например: id name other_id 1 name_1 300 2 name_2 301 3 name_3 999 1 name_1 301 2 name_2 999 3 name_3 300 надо узнать всех у кого other_id только in (300,301) т.е id 2,3 и не подходят только 1 подходит

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
select * from table where other_id in (300,301);
да ну не работает это он отдаст id 1,2,3

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
select * from table where other_id in (300,301);
мне надо не все у кого есть эти other_id а нужны все у кого только эти other_id

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
так у Вас ID это не primary key
так я не говорил что оно primary_key

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 а только называется так....

Boris
05.06.2017
12:14:35
подскажите плиз, удалил таблицу. пытаюсь восстановить ее из бэкапа и получаю ошибку

psql:manager_bonus_history.sql:106273: ERROR: relation "manager_bonus_history_pkey" already exists

как пофиксить можно?

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
тут только where b.id is null лишнее, имхо.
не лишнее. Это вычитание при джоине, если делать в лоб по картинке джоинов, которую публиковали выше

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
Оператор проверки вхождения одного массива в другой ))

А что это? Бейсик или яваскрипт?

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