
Ilya
24.08.2017
09:17:38
еще раз для тех кто в танке. постгре вычисляет какой индекс зайдет лучше. его и юзает

Anufant
24.08.2017
09:40:32
причем в поиск загребется и то где время не нужное.
Но как объянить, что по этому индексу, если выборка происходит, то довольно быстро? Я вообще думал, что составной индекс в данном случае будет рабоать лучше, потому что условно говоря будет тот же самый временной, но не по всему множеству записей, а по сильно ограниченному.
индекс время-тип пробовали? :)
Не пробовал, но пока не понимаю, как он вообще может помощь, мне кажется это тоже самой, что индекс только времени, только с лишними данными

Ildar
24.08.2017
10:32:09

Google

Anufant
24.08.2017
10:35:24
может быть вам посмотреть в сторону partial index-а?
Если я правильно понимаю, мой индекс как раз и был partial, ведь там было условие object_type <> ‘type1’. Я еще пробовал создать индекс where object_type=‘type2’ ( интересуемый меня тип ), но это не изменило ситуацию. Возможно, конечно, что я где-то в процессе делал ошибки или забывал запускать команду Analyze, для исключения этого надо будет еще раз все телодвижения повторить

Darafei
24.08.2017
10:37:07

Anufant
24.08.2017
10:39:36
есть object_type = ‘type2’

Darafei
24.08.2017
10:40:40
а если дописать object_type <> ‘type1’ and object_type = ‘type2’?

Anufant
24.08.2017
10:41:42
попробую
спасибо

Darafei
24.08.2017
10:43:12
вообще, вот например в постгисе всё иногда плохо с эстимациями
и нужный план там иногда можно получить методом where (a.geom && b.geom) and (a.geom && b.geom)

Timur
24.08.2017
10:44:58
Всем привет. Подскажите, как вы решаете подобные задачи: Есть индекс, используемый очень редко, но все-же используемый. Весит много, в связи с объемом таблицы - хорошо бы его похерить. Найти какой именно запрос и какой именно кусок приложения его юзает не удалось ни в коде, ни в pg_stat_statements. Можно ли как-то по - человечески узнать, какой именно запрос заставляет планировщик дергать данный индекс?

Maxim
24.08.2017
10:45:58
Привет! Кто может немножко помочь с pgool?
Есть две ноды postgresql в разных городах. Настроена нативная репликация (master/slave). Если одну ноду добавить в рядом расположенный pgpool, все хорошо. Если добавить вторую(slave в другой стране) - все начинает очень тормозить.
Вопрос-почему?

Darafei
24.08.2017
10:49:25

Anton [Mgn, az09@osm]
24.08.2017
11:01:20

Artem
24.08.2017
11:08:24

Google

Maxim
24.08.2017
11:09:37
С сетью все хорошо. Да и пусть убегает(отстает максимум на 3 сек), на slave не должны запросы идти. В логах ничего интересного(

Kirill
24.08.2017
11:34:17

Timur
24.08.2017
11:38:35
Да, спасибо, попробую грохнуть его и отследить запрос.

Айтуар
24.08.2017
11:41:06
А кто использовал в качестве хранилища для холодных партиций NFS шару?
И вообще это не убьёт БД если шара например отвалится или не примонтируется при старте сервака?

Dmitry
24.08.2017
11:50:33

Darafei
24.08.2017
11:51:20

Айтуар
24.08.2017
11:51:21

ildus
24.08.2017
11:51:25

Dmitry
24.08.2017
11:51:30

Айтуар
24.08.2017
11:52:04
доступ только через NFS, там бекапы храним. Думал может и холодные данные туда же запихнуть в отдельный tablespace. Чтобы не делать бекапы этих партиций.

Ilya
24.08.2017
11:55:16
а если чтото размонтируется или ктото свич дернет?

Darafei
24.08.2017
11:55:16
если такое и творить, то я бы делал отдельный постгрес для NFS и отдельный для остального

Ilya
24.08.2017
11:55:39
есть подозрение что бд пизданецо

Айтуар
24.08.2017
11:56:38

Ilya
24.08.2017
11:57:21
я б на другой сервер партиции кидал

Ildar
24.08.2017
11:57:40
возможно будет ругаться, что каннот рид блок № такой-то. Вряд ли при этом упадет весь клястер

Darafei
24.08.2017
11:59:09

Айтуар
24.08.2017
11:59:12
Не буду экперименты ставить всё таки это прод )

Darafei
24.08.2017
12:00:34
из наших сегодняшних логов вот:
[2017-08-24 09:49:39] ERROR: could not read block 4325446 in file "pg_tblspc/16400/PG_10_201707211/16402/782904863.33": Input/output error
[2017-08-24 09:49:39] server closed the connection unexpectedly
[2017-08-24 09:49:39] This probably means the server terminated abnormally
[2017-08-24 09:49:39] before or while processing the request.
[2017-08-24 09:49:39] no connection to the server
[2017-08-24 09:49:39] connection to server was lost

Айтуар
24.08.2017
12:01:15

Google

Darafei
24.08.2017
12:01:31
нет, у нас своя атмосфера

Alexander
24.08.2017
12:01:48
диск сбойнул?

Darafei
24.08.2017
12:06:01
файлики покорраптили

Айтуар
24.08.2017
12:06:50

Darafei
24.08.2017
12:09:24
кажется, да
вкусности ещё, правда, не опробовали

Айтуар
24.08.2017
12:15:35

Darafei
24.08.2017
12:18:14
вот из отпуска вернусь и буду катить в прод :)

Anton [Mgn, az09@osm]
24.08.2017
12:33:32
10 катить (потому что круглая), а 11 - вколачивать?))

Петр
24.08.2017
15:01:37
ребята накидайте несколько годных способов редактирования больших файлов (десятки/сотни ГБ)

mb
24.08.2017
15:02:24
А что будете изменять?

Dmitry
24.08.2017
15:03:01

Alex
24.08.2017
15:03:04
vim

Алексей
24.08.2017
15:03:16
sed -i ?

Dmitry
24.08.2017
15:03:28
grep + sed

Alex
24.08.2017
15:03:31
sed вот тоже говорят неплох +1

Петр
24.08.2017
15:04:07
что еще кроме этого

Dmitry
24.08.2017
15:04:13
emacs

Алексей
24.08.2017
15:04:34

Петр
24.08.2017
15:05:13

Google

Петр
24.08.2017
15:05:30
лан, ничего нового похоже нет

Алексей
24.08.2017
15:06:04

Dmitry
24.08.2017
15:06:28

mb
24.08.2017
15:15:42

Admin
ERROR: S client not available

Nikolay
24.08.2017
15:17:36
Коллеги, добрый день, кто может объяснить момент по рекурсивным запросам?

Anatoliy
24.08.2017
15:20:32
Вы задавайте вопрос, а вам кто сможет - поможет

Arthur
24.08.2017
15:20:35

Nikolay
24.08.2017
15:28:24
Мне не понятно, что означают "аргументы" в скобках после BRANCH,
WITH RECURSIVE BRANCH(IDPARENTCATEGORY, IDCATEGORY, LEVEL) AS (...). В доках про это ничего не написано.
А пытаюсь я решить следующую задачу: есть таблица-"дерево" с полями id, tree_node_id и другими информационными. Нужно выбрать всех родителей по заданному id. Рабочий запрос получился таким:
WITH RECURSIVE tree_nodes_rec AS (
SELECT id, tree_node_id, name FROM tree_nodes WHERE id=29
UNION
SELECT
tn.id, tn.tree_node_id, tn.name
FROM
tree_nodes_rec AS tnr,
tree_nodes AS tn
WHERE tn.id = tnr.tree_node_id
)
SELECT * FROM tree_nodes_rec;
Я ищу способ перенести WHERE id=29 в последний селект, чтобы получить SELECT * FROM tree_nodes_rec WHERE id=29; возможно ли так сделать или я трачу время впустую?


Dmitry
24.08.2017
15:31:09
Мне не понятно, что означают "аргументы" в скобках после BRANCH,
WITH RECURSIVE BRANCH(IDPARENTCATEGORY, IDCATEGORY, LEVEL) AS (...). В доках про это ничего не написано.
А пытаюсь я решить следующую задачу: есть таблица-"дерево" с полями id, tree_node_id и другими информационными. Нужно выбрать всех родителей по заданному id. Рабочий запрос получился таким:
WITH RECURSIVE tree_nodes_rec AS (
SELECT id, tree_node_id, name FROM tree_nodes WHERE id=29
UNION
SELECT
tn.id, tn.tree_node_id, tn.name
FROM
tree_nodes_rec AS tnr,
tree_nodes AS tn
WHERE tn.id = tnr.tree_node_id
)
SELECT * FROM tree_nodes_rec;
Я ищу способ перенести WHERE id=29 в последний селект, чтобы получить SELECT * FROM tree_nodes_rec WHERE id=29; возможно ли так сделать или я трачу время впустую?
Это не аргументы, это шапка таблицы временной
если бы ее не было, нельзя было бы обращаться по имени к результатам предыдущих итераций

Nikolay
24.08.2017
15:35:36


Dmitry
24.08.2017
15:39:21
Мне не понятно, что означают "аргументы" в скобках после BRANCH,
WITH RECURSIVE BRANCH(IDPARENTCATEGORY, IDCATEGORY, LEVEL) AS (...). В доках про это ничего не написано.
А пытаюсь я решить следующую задачу: есть таблица-"дерево" с полями id, tree_node_id и другими информационными. Нужно выбрать всех родителей по заданному id. Рабочий запрос получился таким:
WITH RECURSIVE tree_nodes_rec AS (
SELECT id, tree_node_id, name FROM tree_nodes WHERE id=29
UNION
SELECT
tn.id, tn.tree_node_id, tn.name
FROM
tree_nodes_rec AS tnr,
tree_nodes AS tn
WHERE tn.id = tnr.tree_node_id
)
SELECT * FROM tree_nodes_rec;
Я ищу способ перенести WHERE id=29 в последний селект, чтобы получить SELECT * FROM tree_nodes_rec WHERE id=29; возможно ли так сделать или я трачу время впустую?
я думаю, что перенести в последний select не выйдет, т.к. WITH не может принимать параметров

Nikolay
24.08.2017
15:42:00

Dmitry
24.08.2017
15:42:50
можно сделать функцию и вынести значение (29) в аргументы

Nikolay
24.08.2017
15:45:22
хорошая идея. А в конце концов сработает ли подстановка в этом запросе?
WITH RECURSIVE tree_nodes_rec AS (... WHERE id=$1...) ...;
Ну это на случай если не мудрить и оставить как есть.

Dmitry
24.08.2017
15:54:13
срабатывают обычные rewrite rules для view
http://sqlfiddle.postgrespro.ru/#!17//1320

Google

Nikolay
24.08.2017
15:59:11
Примерно понятно, спасибо
Кому интересно:
WITH RECURSIVE tree_nodes_rec(idbr, tree_node_id, name, woof) AS (
SELECT id AS idbr, tree_node_id, name, false AS woof FROM tree_nodes
UNION ALL
SELECT
tnr.idbr, tn.tree_node_id, tn.name, NOT woof
FROM
tree_nodes_rec AS tnr,
tree_nodes AS tn
WHERE tn.id = tnr.tree_node_id
)
SELECT idbr, tree_node_id, name, woof FROM tree_nodes_rec WHERE idbr=29;
Вот как разрешилось

Dmitry
24.08.2017
16:08:21
Кому интересно:
WITH RECURSIVE tree_nodes_rec(idbr, tree_node_id, name, woof) AS (
SELECT id AS idbr, tree_node_id, name, false AS woof FROM tree_nodes
UNION ALL
SELECT
tnr.idbr, tn.tree_node_id, tn.name, NOT woof
FROM
tree_nodes_rec AS tnr,
tree_nodes AS tn
WHERE tn.id = tnr.tree_node_id
)
SELECT idbr, tree_node_id, name, woof FROM tree_nodes_rec WHERE idbr=29;
Вот как разрешилось
если у вас большая таблица tree_nodes, это будет не эффективно

Nikolay
24.08.2017
16:09:17
Насколько большая? В принципе в ней простые менюшки, каталоги магазина (отсилы 100-200 позиций)
а как обычно поступают тогда, чтобы повысить эффективность?

Dmitry
24.08.2017
16:11:11
ну как раз поместить условие глубже в запрос
чем меньше строк окажется в рабочей таблице после нулевой итерации, тем лучше
https://postgrespro.ru/docs/postgrespro/9.6/queries-with
см. Вычисление рекурсивного запроса

Nikolay
24.08.2017
16:22:40
Все, разобрался, огромнейшая благодарность

Anton [Mgn, az09@osm]
24.08.2017
17:47:29
тогда уж сразу notepad.exe
Вот вы смеетесь а волковкоммандер умел оочень большие файлы редактировать например. Во времена когда "640 кб хватит на всё" приходилось выкручиваться
Ну как большие, в досе то

Dmitry
24.08.2017
18:13:00

Ilya
24.08.2017
18:26:11

Anton [Mgn, az09@osm]
24.08.2017
18:28:28