отрабатывается, результат запроса 15 МБ.
explain (analyze,buffers) SELECT OAV."ID",OAV."TEXT_VALUE" FROM public."AO_8542F1_IFJ_OBJ_ATTR_VAL" OAV JOIN public."AO_8542F1_IFJ_OBJ_ATTR" OA ON OA."ID" = OAV."OBJECT_ATTRIBUTE_ID" WHERE OA."OBJECT_TYPE_ATTRIBUTE_ID" IN (529, 10, 506, 143) ;
QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Gather (cost=1000.57..712718.82 rows=599184 width=34) (actual time=0.474..2319.057 rows=655844 loops=1)
Workers Planned: 4
Workers Launched: 4
Buffers: shared hit=3296662 read=258958
-> Nested Loop (cost=0.56..651800.42 rows=149796 width=34) (actual time=0.111..2204.502 rows=131169 loops=5)
Buffers: shared hit=3296662 read=258958
-> Parallel Seq Scan on "AO_8542F1_IFJ_OBJ_ATTR" oa (cost=0.00..425675.07 rows=152918 width=8) (actual time=0.053..1049.557 rows=131169 loops=5)
Filter: ("OBJECT_TYPE_ATTRIBUTE_ID" = ANY ('{529,10,506,143}'::integer[]))
Rows Removed by Filter: 7888265
Buffers: shared hit=13870 read=258958
-> Index Scan using index_ao_8542f1_ifj228666017 on "AO_8542F1_IFJ_OBJ_ATTR_VAL" oav (cost=0.56..1.47 rows=1 width=42) (actual time=0.008..0.008 rows=1 loops=655844)
Index Cond: ("OBJECT_ATTRIBUTE_ID" = oa."ID")
Buffers: shared hit=3282792
Planning time: 0.326 ms
Execution time: 2340.710 ms
Подскажите куда копать ? буффера, довольно норм
этот же запрос повторяется с частотой 2-3 минуты, на стороне приложения пока готовятся, но как быть с продом ?
Перед тем, как копаться — А Вам действительно нужно 655844 rows в результате (т.е. какой в этом смысл для клиента? Или это часть какого-то ETL и т.п.?)?
У вас, для начала, совсем чуть-чуть берется из кэша, а остальное читается с дисков. Buffers: shared hit=13870 read=258958
Если не ошибаюсь - read=258958 - это около 2 Gb. Вроде читать 1Gb/s с диска нормально?
Если диск не ssd, да ещё и другим вводом-выводом нагружен, то всё может быть сильно грустнее. Я бы попробовал сделать индекс на OA(OBJECT_TYPE_AtTRIBUTE_ID, ID). Можно и без ID, но его наличие в индексе по идее может позволить сделать index only scan, без обращения к самой таблице за значениями в поле ID
диски ssd, насчет iops на уровне виртуалки только одна базулька, но ниже на уровне вирт. инфраструктуры не уверен сколько
Обсуждают сегодня