|
|
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
Подскажите почему не срабатывает boolean индекс при выборке false ? Я уже даже добавил отрицательный индекс и все равно идет Seq Scan. Vacuum Analyze делал. 9.5 версия. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 13:41 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
nateless, Потому что при mem_pool = true планировщик ожидает получить 35210 записей, а при mem_pool = false - 117331903 записей. Вот он и считает, что для false дешевле сделать sec scan. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 13:48 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
Павел Лузанов, Хм, а как можно оптимизировать что бы он давал все таки по индексу? так как выборка по seq scan занимает минуту, а надо не больше 10ms уложиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 13:49 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
nateless, А кто сказал, что по индексу будет быстрее? 1. сколько записей в таблице? 2. Что показывает select reltuples from pg_class where oid = 'trx'::regclass; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 13:56 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
natelessПавел Лузанов, Хм, а как можно оптимизировать что бы он давал все таки по индексу? так как выборка по seq scan занимает минуту, а надо не больше 10ms уложиться. А приведите-ка EXPLAIN ANALYZE SELECT... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 13:59 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
nateless, а ваш HDD сможет прочесть 117331903 вайт за 10мс? и да 117331903 ещё умножать на ширину записи надо. недумается что будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:00 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
Вдруг что-нибудь будет заметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:00 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
Павел Лузанов, Около 116М и каждый день добавляется около 200к, сначала они все поступают как mem_pool=true потом переходят в false. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:01 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
nateless, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:03 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
ХЗ. Вакуум как настраивался? Может попробовать поагрессивнее настроить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:06 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
ОКТОГЕН, Он не срабатывает, так как сразу после ваакума он все равно делает seq scan, так что смысла играться с вакумом пока не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:08 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
nateless, то есть в запросе SHOW ALL; Что показывают строчки, начинающиеся на autovacuum? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:09 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
natelessОКТОГЕН, Он не срабатывает, так как сразу после ваакума он все равно делает seq scan, так что смысла играться с вакумом пока не вижу. Ок. А он один раз срабатывает, или постоянно потоком идут запросы такого вида? Если запросы вызываются потоком, то смысл вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:10 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
Индекс включить можно через предварительное отключение: set enable_seqscan to off; Но должно стать еще хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:11 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
ОКТОГЕН, Пробовали останавливать апдейты так что после вакума не было новых записей когда делали проверку, поэтому и думаю что он тут не причем. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:11 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
nateless, Планировщик всё правильно делает. Индекс не всегда означает, что будет быстрее. В вашем случае 99% записей. Если вы заставите базу идти через индекс, то она будет читать и 99% индеса, и 99% таблицы. Это потому, что видимость данных храниться в таблице. А так — читается только таблица, что очевидно быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:27 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
nateless, а если попробовать Код: sql 1. (т.е. *, а не id) index only scan появляется в плане? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:31 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
Возможно, вы упёрлись в дисковую систему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:32 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
Alexiusnateless, а если попробовать Код: sql 1. (т.е. *, а не id) index only scan появляется в плане? Чтобы он отрабатывал, надо чтоб успевались все необходимые биты проставляться. Это только после вакуума возможно, даже после вставки. А если поле поменялось в большой части записей - тем более работать не будет. Вот для архивных таблиц - это - тема, что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:35 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
ОКТОГЕН, ТС не говорил что какие-то проблемы с вакуумом у него, тем более что руками vacuum запускался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:39 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
vyegorov, Есть какие-то варианты ускорить выполнение? Может партицирование? Будем пробовать кешировать число на сервисе, но хотелось бы исполнение запроса не в минуту как сейчас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:41 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
nateless, Если таблица часто меняется, то IOS вряд ли можно выжать, иначе — подбирайте запрос с индексом так, чтобы оно завелось. Если приблизительно сойдёт, то можно из статистики тащить: pg_stats.most_common_freqs[X] * pg_class.reltuples (где Х — индекс для значения `false` из `most_common_vals`). Но это будет очень приблизительно. А так — через триггера поддерживайте актуальные счётчики во вспомогательной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 14:55 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
vyegorov<>А так — через триггера поддерживайте актуальные счётчики во вспомогательной таблице. только именно в таблице, а не как тут один, на говнохабре, статью не так давно тискал -- в сиквенсах каунты считал. даже миша тюрин, и тот -- автора обматерил. а давно ли сам таймстамп как ид транзакции пользовал. на таблицах каунтов 2 техники. с очередями и без. (вторая -- с подбором кучек ). обе они, к сожалению , пухнут индексами изрядно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 15:08 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
qwwq, А можно подробнее про две техники? (ссылками на статьи было бы замечательно.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 15:14 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
vyegorovqwwq, А можно подробнее про две техники? (ссылками на статьи было бы замечательно.)да примитивно: 1. с очередями на уникъю. 2. без уникъю, с джобом [тикером] подбора кучи , заменой подобранного на 1 свежую запись с SUM(). -- 1-е -- стандарт вообще. -- 2.-е даже 1с умеют. я 2 делал без тикера, но с дополнительной нагрузкой на вставку . лочил no wait то, что было свободно, и подбирал в общую кучку. понятно, что это затратнее разделения труда. правда я не каунты считал, а карту срезов для отложенного сбора статистики составлял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 15:59 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
qwwq, Я делал что-то такое: - брал advisory_lock() на условное число - считал max(batch_id) + 1 и добавлял такую запись - отпускал advisory_lock() Это какой из 2-х типов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 17:01 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
vyegorovqwwq, Я делал что-то такое: - брал advisory_lock() на условное число - считал max(batch_id) + 1 и добавлял такую запись - отпускал advisory_lock() Это какой из 2-х типов? А. сами определите -- есть у вас очередь на ресурс (1) или нет (2) Б. а занахера ? это точно в задаче ведения каунтов по табличкам ? очевидно, что нет. очевидно, вы лочите ресурс, которого ещё нет в таблице. т.е. вы генерите "сиквенс без дырок" а могли бы лочить тот, который есть -- предыдущий batch_id, например. И только в случае отсутствия предыдущего -- лочить что-то ещё (не обязательно адвайзори -- мало ли в базе неиспользуемых (для святого дела лока) ресурсов. да хоть oid вашей таблички в pg_class). 2-й тип вам не лочит чтение [select sum(cnt) from counts where tablename ='mytable' ], или запись. задачи консистентного и чтения и записи одновременно там нет. как только она появляется -- возвращается очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 17:15 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
qwwq, Я понимаю, что если я повешу AFTER U/I/D триггер, в котором буду править (как надо) счётчик, то я получаю 1-й тип, поскольку сессии будут блокироваться на запись к единственной записи счётчика. Это так? А 2-й тип — это асинхронное изменение по таймеру, что-то вроде сбора статистики в ПЖ, но только под свои нужды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 17:22 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
vyegorov<> А 2-й тип — это асинхронное изменение по таймеру, что-то вроде сбора статистики в ПЖ, но только под свои нужды. "вы не поняли" (Сс) 2-й тип -- это синхронный сбор статистики в таблице статистики без уникъю, асинхронно в ней происходит только реорганизация кучек (из 10-ка записей вида (tablename,count) организуется одна (tablename,sum(count))). чтение из неё всегда синхронно снабжает вас консистентными данными о commited каунтах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 17:43 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
qwwq... асинхронно в ней происходит только реорганизация кучек (из 10-ка записей вида (tablename,count) организуется одна (tablename,sum(count))). чтение из неё всегда синхронно снабжает вас консистентными данными о commited каунтах. Имеется в виду параллельный сбор данных по частям (для скорости) с последующим обобщением? (Я не владею терминологией, и потому туплю.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 19:59 |
|
||
|
Не срабатывае boolean индекс при false
|
|||
|---|---|---|---|
|
#18+
vyegorov, имеетсяв виду то же , что и с уникъю , но без уникъю. -- чтобы конкуренты в очередях не стояли. а наделанные ими кучки подбирает воркер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 20:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=53&tid=1997353]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 492ms |

| 0 / 0 |
