172 похожих чатов

Подскажите плз, на 4 млрд записей запрос select * from

"Entries" where "Login" LIKE 'something%' выполнялся 32 минуты (поле Login проиндексировано), какие есть способы его ускорить? При этом точное значение ищется за 50-100мс

25 ответов

21 просмотр

Покажите explain analyze

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

Lycanthrope- Автор вопроса
Yaroslav Schekin
Лучше покажите что положено для того, чтобы помога...

Что такое \d+? Ок, запустил explain, видимо ещё 30+ минут :)

Lycanthrope
Что такое \d+? Ок, запустил explain, видимо ещё 30...

Метакоманда в psql. Ну и пока можно просто EXPLAIN, опять-таки.

Lycanthrope- Автор вопроса
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"

Lycanthrope
PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_6...

Видно, что индекс не используется. Давайте \d+. ;) И с такой версией PostgreSQL можно (лучше) сразу показывать EXPLAIN (ANALYZE, BUFFERS, SETTINGS /*, VERBOSE*/) SELECT ...

Lycanthrope
PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_6...

select * from pg_stats where tablename='Entries' and attname='Login'; select name,setting from pg_settings where name~'cost';

Lycanthrope- Автор вопроса
Lycanthrope
PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_6...

Что-то не могу запустить psql (я юзаю докер контейнер): # psql psql: error: FATAL: role "root" does not exist

Lycanthrope- Автор вопроса
Guzya
select * from pg_stats where tablename='Entries' a...

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

Lycanthrope
Что-то не могу запустить psql (я юзаю докер контей...

Ну так root и не является пользователем в postgres (не должен, по крайней мере). Вы заходите под тем пользователем, который используется приложением.

Lycanthrope
autovacuum_vacuum_cost_delay,2 autovacuum_vacuum_c...

Похоже на стандартные настройки... вообще, tuning почти наверняка следует заняться.

Lycanthrope- Автор вопроса
Yaroslav Schekin
Видно, что индекс не используется. Давайте \d+. ;)...

разобрался, нужно было создать роль. https://pastebin.com/raw/PhhT2d3E

Lycanthrope
разобрался, нужно было создать роль. https://paste...

Так, а encoding / collation у этой базы какой (можно посмотреть с помощью \l)?

Lycanthrope
UTF8 | en_US.utf8

Неподходящий у Вас индекс для этого запроса, в таком случае. Нужен с varchar_pattern_ops, см. https://www.postgresql.org/docs/current/indexes-opclass.html

Lycanthrope
разобрался, нужно было создать роль. https://paste...

Не уверен, что b-tree умеет like обрабатывать. Нашел такую тему https://www.sql.ru/forum/1053727/pomogite-sostavit-indeks-dlya-zaprosov-vida-like-text

Lycanthrope- Автор вопроса
Yaroslav Schekin
Неподходящий у Вас индекс для этого запроса, в так...

Такой? CREATE INDEX some_index ON my_table (Login varchar_pattern_ops);

Lycanthrope- Автор вопроса
Yaroslav Schekin
Да, примерно так.

Спасибо. А вообще, мб я не ту СУБД выбрал и мне нужно какую-нибудь key-value базу брать? (ещё нюанс в том, что пары key-value должны быть уникальными, в sql я могу просто запросом лишнее поудалять, а в key-value как-то сложно всё это)

Lycanthrope
Спасибо. А вообще, мб я не ту СУБД выбрал и мне ну...

Да не за что. Вообще, можно C locale сразу использовать для таких полей (кому какое дело, как именно сортируются Login-ы в результатах запросов? ;) ). > А вообще, мб я не ту СУБД выбрал и мне нужно какую-нибудь key-value базу брать? Это уж Вам виднее, какие требования. IMNSHO, нужны Вам реляционка + ACID + SQL — берите PostgreSQL, а если нет — не берите. ;)

Lycanthrope- Автор вопроса
b s
> LeakEntries ух негодник

действительно, не хочу платить бабки, чтобы проверить, утекли ли мои данные = негодник)

Guzya
Не уверен, что b-tree умеет like обрабатывать. Наш...

Когда-то давно мы с Федей написали расширение wildspeed для этого, которое индексирует все перестановки, поэтому пригодно для коротких строк https://github.com/postgrespro/wildspeed

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта