Size: a a a

pgsql – PostgreSQL

2021 January 22

ЮЖ

Юрий Журавлев... in pgsql – PostgreSQL
Добрый день. Появилась задача по переходу на  PostgreSQL с MS SQl + организовать отказоустойчивую схему в связке Windows server 2019 + PostgreSQL + WSFC.  
Описание текущей инфраструктуры:
2 сервера:
один в роли APP (публикация собственной CRM)
Второй в роли DB (хранилище баз данных)
Купили 2 мощных сервера.
Задачи:
1) Реализовать объединение ролей 2-х  серверов на одном (APP+DB server)
2) Второй сервер определить как secondary в горячем резерве средствами WinSRV (WSFC)
3) Организовать отказоустойчивость PostgreSQL
Вопросы:
1) Возможно ли штатными средствами postgreSQL сделать горячий резерв? Или может посоветуете что нибудь для реализации?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Юрий Журавлев
Добрый день. Появилась задача по переходу на  PostgreSQL с MS SQl + организовать отказоустойчивую схему в связке Windows server 2019 + PostgreSQL + WSFC.  
Описание текущей инфраструктуры:
2 сервера:
один в роли APP (публикация собственной CRM)
Второй в роли DB (хранилище баз данных)
Купили 2 мощных сервера.
Задачи:
1) Реализовать объединение ролей 2-х  серверов на одном (APP+DB server)
2) Второй сервер определить как secondary в горячем резерве средствами WinSRV (WSFC)
3) Организовать отказоустойчивость PostgreSQL
Вопросы:
1) Возможно ли штатными средствами postgreSQL сделать горячий резерв? Или может посоветуете что нибудь для реализации?
> в связке Windows server 2019 + PostgreSQL + WSFC

Может, не стоит (пока не поздно), а? ;)

> 1) Возможно ли штатными средствами postgreSQL сделать горячий резерв?

Да. См. https://www.postgresql.org/docs/current/high-availability.html

> Или может посоветуете что нибудь для реализации?

Не факт, что на windows "стандартные" решения для этого работают (patroni, repmgr и т.п.).
Можете поискать, впрочем...
источник

ЮЖ

Юрий Журавлев... in pgsql – PostgreSQL
Yaroslav Schekin
> в связке Windows server 2019 + PostgreSQL + WSFC

Может, не стоит (пока не поздно), а? ;)

> 1) Возможно ли штатными средствами postgreSQL сделать горячий резерв?

Да. См. https://www.postgresql.org/docs/current/high-availability.html

> Или может посоветуете что нибудь для реализации?

Не факт, что на windows "стандартные" решения для этого работают (patroni, repmgr и т.п.).
Можете поискать, впрочем...
Благодарю, возьмем на изучение, если будут вопросы - буду задавать.
источник

ЯТ

Я Акула Туруруру... in pgsql – PostgreSQL
Подскажите плз, на 4 млрд записей запрос select * from "Entries" where "Login" LIKE 'something%' выполнялся 32 минуты (поле Login проиндексировано), какие есть способы его ускорить? При этом точное значение ищется за 50-100мс
источник

ГА

Георгий Ава... in pgsql – PostgreSQL
Я Акула Туруруру
Подскажите плз, на 4 млрд записей запрос select * from "Entries" where "Login" LIKE 'something%' выполнялся 32 минуты (поле Login проиндексировано), какие есть способы его ускорить? При этом точное значение ищется за 50-100мс
Покажите explain analyze
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Я Акула Туруруру
Подскажите плз, на 4 млрд записей запрос select * from "Entries" where "Login" LIKE 'something%' выполнялся 32 минуты (поле Login проиндексировано), какие есть способы его ускорить? При этом точное значение ищется за 50-100мс
Лучше покажите что положено для того, чтобы помогать в таких случаях. ;)
1. Полную версию PosgreSQL ("SELECT version();").
2. Запрос и план — именно EXPLAIN (ANALYZE, BUFFERS)
3. \d+ таблицы
Всё текстом, конечно (можно на paste site).

В данном случае сначала можно просто EXPLAIN, остальное обязательно.
источник

ЯТ

Я Акула Туруруру... in pgsql – PostgreSQL
Yaroslav Schekin
Лучше покажите что положено для того, чтобы помогать в таких случаях. ;)
1. Полную версию PosgreSQL ("SELECT version();").
2. Запрос и план — именно EXPLAIN (ANALYZE, BUFFERS)
3. \d+ таблицы
Всё текстом, конечно (можно на paste site).

В данном случае сначала можно просто EXPLAIN, остальное обязательно.
Что такое \d+? Ок, запустил explain, видимо ещё 30+ минут :)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Я Акула Туруруру
Что такое \d+? Ок, запустил explain, видимо ещё 30+ минут :)
Метакоманда в psql.
Ну и пока можно просто EXPLAIN, опять-таки.
источник

ЯТ

Я Акула Туруруру... in pgsql – PostgreSQL
Yaroslav Schekin
Метакоманда в psql.
Ну и пока можно просто EXPLAIN, опять-таки.
PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit


Gather  (cost=1000.00..61233670.30 rows=401943 width=48)
 Workers Planned: 2
"  ->  Parallel Seq Scan on ""LeakEntries""  (cost=0.00..61192476.00 rows=167476 width=48)"
"        Filter: ((""Login"")::text ~~ 'Execute error%'::text)"
JIT:
 Functions: 2
"  Options: Inlining true, Optimization true, Expressions true, Deforming true"
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Я Акула Туруруру
PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit


Gather  (cost=1000.00..61233670.30 rows=401943 width=48)
 Workers Planned: 2
"  ->  Parallel Seq Scan on ""LeakEntries""  (cost=0.00..61192476.00 rows=167476 width=48)"
"        Filter: ((""Login"")::text ~~ 'Execute error%'::text)"
JIT:
 Functions: 2
"  Options: Inlining true, Optimization true, Expressions true, Deforming true"
Видно, что индекс не используется.
Давайте \d+. ;)
И с такой версией PostgreSQL можно (лучше) сразу показывать EXPLAIN  (ANALYZE, BUFFERS, SETTINGS /*, VERBOSE*/) SELECT ...
источник

ГА

Георгий Ава... in pgsql – PostgreSQL
Я Акула Туруруру
PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit


Gather  (cost=1000.00..61233670.30 rows=401943 width=48)
 Workers Planned: 2
"  ->  Parallel Seq Scan on ""LeakEntries""  (cost=0.00..61192476.00 rows=167476 width=48)"
"        Filter: ((""Login"")::text ~~ 'Execute error%'::text)"
JIT:
 Functions: 2
"  Options: Inlining true, Optimization true, Expressions true, Deforming true"
select * from pg_stats where tablename='Entries' and attname='Login';
select name,setting from pg_settings where name~'cost';
источник

ЯТ

Я Акула Туруруру... in pgsql – PostgreSQL
Я Акула Туруруру
PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit


Gather  (cost=1000.00..61233670.30 rows=401943 width=48)
 Workers Planned: 2
"  ->  Parallel Seq Scan on ""LeakEntries""  (cost=0.00..61192476.00 rows=167476 width=48)"
"        Filter: ((""Login"")::text ~~ 'Execute error%'::text)"
JIT:
 Functions: 2
"  Options: Inlining true, Optimization true, Expressions true, Deforming true"
Что-то не могу запустить psql (я юзаю докер контейнер):

# psql                                                                                                                                                                
psql: error: FATAL:  role "root" does not exist
источник

ЯТ

Я Акула Туруруру... in pgsql – PostgreSQL
Георгий Ава
select * from pg_stats where tablename='Entries' and attname='Login';
select name,setting from pg_settings where name~'cost';
autovacuum_vacuum_cost_delay,2
autovacuum_vacuum_cost_limit,-1
cpu_index_tuple_cost,0.005
cpu_operator_cost,0.0025
cpu_tuple_cost,0.01
jit_above_cost,100000
jit_inline_above_cost,500000
jit_optimize_above_cost,500000
parallel_setup_cost,1000
parallel_tuple_cost,0.1
random_page_cost,4
seq_page_cost,1
vacuum_cost_delay,0
vacuum_cost_limit,200
vacuum_cost_page_dirty,20
vacuum_cost_page_hit,1
vacuum_cost_page_miss,10
источник

ГА

Георгий Ава... in pgsql – PostgreSQL
Я Акула Туруруру
Что-то не могу запустить psql (я юзаю докер контейнер):

# psql                                                                                                                                                                
psql: error: FATAL:  role "root" does not exist
sudo -u postgres psql
источник

DS

David Shiko in pgsql – PostgreSQL
Всем привет. Подскажите пожалуйста, как можно сделать такой запрос корректным?
SELECT CURRENT_DATE - INTERVAL (SELECT value FROM users WHERE id = 10) YEAR
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Я Акула Туруруру
Что-то не могу запустить psql (я юзаю докер контейнер):

# psql                                                                                                                                                                
psql: error: FATAL:  role "root" does not exist
Ну так root и не является пользователем в postgres (не должен, по крайней мере).
Вы заходите под тем пользователем, который используется приложением.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Я Акула Туруруру
autovacuum_vacuum_cost_delay,2
autovacuum_vacuum_cost_limit,-1
cpu_index_tuple_cost,0.005
cpu_operator_cost,0.0025
cpu_tuple_cost,0.01
jit_above_cost,100000
jit_inline_above_cost,500000
jit_optimize_above_cost,500000
parallel_setup_cost,1000
parallel_tuple_cost,0.1
random_page_cost,4
seq_page_cost,1
vacuum_cost_delay,0
vacuum_cost_limit,200
vacuum_cost_page_dirty,20
vacuum_cost_page_hit,1
vacuum_cost_page_miss,10
Похоже на стандартные настройки... вообще, tuning почти наверняка следует заняться.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
David Shiko
Всем привет. Подскажите пожалуйста, как можно сделать такой запрос корректным?
SELECT CURRENT_DATE - INTERVAL (SELECT value FROM users WHERE id = 10) YEAR
Вот так, например:
SELECT CURRENT_DATE - (SELECT value FROM users WHERE id = 10) * interval '1 year';
источник

DS

David Shiko in pgsql – PostgreSQL
Yaroslav Schekin
Вот так, например:
SELECT CURRENT_DATE - (SELECT value FROM users WHERE id = 10) * interval '1 year';
Спасибо!
источник

ЯТ

Я Акула Туруруру... in pgsql – PostgreSQL
Yaroslav Schekin
Видно, что индекс не используется.
Давайте \d+. ;)
И с такой версией PostgreSQL можно (лучше) сразу показывать EXPLAIN  (ANALYZE, BUFFERS, SETTINGS /*, VERBOSE*/) SELECT ...
разобрался, нужно было создать роль.
https://pastebin.com/raw/PhhT2d3E
источник