2012-10-31 3 views
0

타임 스탬프 필드에 파티션 된 DB 스키마가 있으며 각 파티션에는 고유 한 타임 스탬프가 포함되어 있으며 크기는 1.5GB입니다. 스키마는 매우 간단하며 타임 스탬프, 오브젝트 ID 및 추가 필드를 포함합니다 (조인하지 않는 외래 키 없음). 기본 키는 시간 소인 W 오브젝트 ID 필드입니다.대용량 파티션에서 쿼리 실행이 느림

"Result (cost=0.00..279041.19 rows=68274 width=24)" 
" -> Append (cost=0.00..279041.19 rows=68274 width=24)" 
"  -> Seq Scan on lc_aggregated_data_master_10_minutes (cost=0.00..0.00 rows=1 width=24)" 
"    Filter: ((from_time >= 1351602600) AND (from_time < 1351688400) AND (object_id = ANY ('{258453,260435,259490,262254,261341,445607,263218,447674,446803,448540,9532,2071,5232,2429532,246502,3939,244000,241179,236971,254544,252928,250982,248878,257377,5893,256092,5707,2986,733,7765,3836,7850,2885,100,9744,4435,10492,2441779,573255,8105,993,6004,5052,7581,15,10171,7363,10381,822,4340,5616,2673,2174,10696,7028,10066,8845,10595,2499,3184,6325,2280,10278,519,8020,1504,3081,7935,3741,4235,3535,5428,6218,7472,567771,568316,568862,569411,8954,570517,569972,571619,571062,572710,572165,9862,1710,1875,6541,2397,205,4756,2435059,4859,562859,563404,426,562308,6434,8738,4038,567226,566681,7260,566130,565584,8628,565039,564494,2492165,563949,1286,8307,5141,9308,1080,6824,6640,9961,518277,519721,556424,178509,555067,160902,559587,558254,522427,520857,524956,523659,229743,3379,222533,215285,208058,200756,193533,186251,5327,630,505950,7680,3632,2491614,517196,509766,510971,507374,508381,1593,4965,514786,9425,515944,512018,513537,1974,1377,9128,4129,5529,503659,504806,471537,495721,1201,496761,497870,499285,500262,3284,501341,502624,309,6733,4639,6915,470231,467992,469134,465660,466675,463127,8196,464183,6107,461061,462081,2790,459792,9043,455646,456791,457747,458721,451617,452556,453738,454718,9213,9643,8414,449680,450608}'::integer[])))" 
"  -> Bitmap Heap Scan on lc_aggregated_data_10_minutes_from_1351510800 lc_aggregated_data_master_10_minutes (cost=1444.26..174220.14 rows=42626 width=24)" 
"    Recheck Cond: ((from_time >= 1351602600) AND (from_time < 1351688400))" 
"    Filter: (object_id = ANY ('{258453,260435,259490,262254,261341,445607,263218,447674,446803,448540,9532,2071,5232,2429532,246502,3939,244000,241179,236971,254544,252928,250982,248878,257377,5893,256092,5707,2986,733,7765,3836,7850,2885,100,9744,4435,10492,2441779,573255,8105,993,6004,5052,7581,15,10171,7363,10381,822,4340,5616,2673,2174,10696,7028,10066,8845,10595,2499,3184,6325,2280,10278,519,8020,1504,3081,7935,3741,4235,3535,5428,6218,7472,567771,568316,568862,569411,8954,570517,569972,571619,571062,572710,572165,9862,1710,1875,6541,2397,205,4756,2435059,4859,562859,563404,426,562308,6434,8738,4038,567226,566681,7260,566130,565584,8628,565039,564494,2492165,563949,1286,8307,5141,9308,1080,6824,6640,9961,518277,519721,556424,178509,555067,160902,559587,558254,522427,520857,524956,523659,229743,3379,222533,215285,208058,200756,193533,186251,5327,630,505950,7680,3632,2491614,517196,509766,510971,507374,508381,1593,4965,514786,9425,515944,512018,513537,1974,1377,9128,4129,5529,503659,504806,471537,495721,1201,496761,497870,499285,500262,3284,501341,502624,309,6733,4639,6915,470231,467992,469134,465660,466675,463127,8196,464183,6107,461061,462081,2790,459792,9043,455646,456791,457747,458721,451617,452556,453738,454718,9213,9643,8414,449680,450608}'::integer[]))" 
"    -> Bitmap Index Scan on lc_aggregated_data_10_minutes_from_1351510800_pkey (cost=0.00..1433.60 rows=66382 width=0)" 
"     Index Cond: ((from_time >= 1351602600) AND (from_time < 1351688400))" 
"  -> Bitmap Heap Scan on lc_aggregated_data_10_minutes_from_1351630800 lc_aggregated_data_master_10_minutes (cost=866.98..104821.05 rows=25647 width=24)" 
"    Recheck Cond: ((from_time >= 1351602600) AND (from_time < 1351688400))" 
"    Filter: (object_id = ANY ('{258453,260435,259490,262254,261341,445607,263218,447674,446803,448540,9532,2071,5232,2429532,246502,3939,244000,241179,236971,254544,252928,250982,248878,257377,5893,256092,5707,2986,733,7765,3836,7850,2885,100,9744,4435,10492,2441779,573255,8105,993,6004,5052,7581,15,10171,7363,10381,822,4340,5616,2673,2174,10696,7028,10066,8845,10595,2499,3184,6325,2280,10278,519,8020,1504,3081,7935,3741,4235,3535,5428,6218,7472,567771,568316,568862,569411,8954,570517,569972,571619,571062,572710,572165,9862,1710,1875,6541,2397,205,4756,2435059,4859,562859,563404,426,562308,6434,8738,4038,567226,566681,7260,566130,565584,8628,565039,564494,2492165,563949,1286,8307,5141,9308,1080,6824,6640,9961,518277,519721,556424,178509,555067,160902,559587,558254,522427,520857,524956,523659,229743,3379,222533,215285,208058,200756,193533,186251,5327,630,505950,7680,3632,2491614,517196,509766,510971,507374,508381,1593,4965,514786,9425,515944,512018,513537,1974,1377,9128,4129,5529,503659,504806,471537,495721,1201,496761,497870,499285,500262,3284,501341,502624,309,6733,4639,6915,470231,467992,469134,465660,466675,463127,8196,464183,6107,461061,462081,2790,459792,9043,455646,456791,457747,458721,451617,452556,453738,454718,9213,9643,8414,449680,450608}'::integer[]))" 
"    -> Bitmap Index Scan on lc_aggregated_data_10_minutes_from_1351630800_pkey (cost=0.00..860.56 rows=39940 width=0)" 
"     Index Cond: ((from_time >= 1351602600) AND (from_time < 1351688400))" 

방법 :

이제 다음 쿼리 조건에서 시간 범위가 실행 계획은 다음과 같다

(144 개) 시점

을 포함

SELECT c_aggregated_data_10_minutes */ 
    from_time, 
    object_id, 
    object_type, 
    latencies_ttlbsec_sum, 
    usage_hits_total 
FROM 
    metric_store.lc_aggregated_data_master_10_minutes 
WHERE 
    object_id in (list of ~100 ids) AND 
    from_time >= 1351602600 AND 
    from_time < 1351688400 

실행 50초 ~ 소요 이 쿼리의 실행 속도를 향상시킬 수 있습니까? (실행 시간을 10 초 미만으로 단축하십시오)

+1

일반 설명보다 "explain (analyze, buffers)"계획 출력으로 업데이트하십시오. 어떤 버전의 포스트그레스를 사용하고 있습니까? – dbenhur

+1

그리고 (항상 *로) 당신의 버전의 Postgres와 테이블 정의를 추가하십시오. 그래서 우리는 데이터 유형이 (다른 것들과도) 잘 맞는지 확인할 수 있습니다. –

+0

테이블에 얼마나 많은 고유 ID가 있습니까? 155 시간 중 144 시간이 테이블의 90 %를 차지합니다. 맞습니까? 또는 테이블의 제외 된 부분에 행이 더 있습니까? 'WHERE' 절의'from_time' 값이 변수 또는 상수입니까 (항상 같은 시간 창입니까?)? 자동 진공 (autovacuum)이 정상적으로 작동하고 있습니까 /'VACUUM FULL ANALYZE'를 실행하면 질의 실행 시간이 현저하게 변경됩니까? –

답변

1

id에 색인을 만들거나 (ts, id) 대신 id (id, ts)의 기본 키를 만듭니다. BTW 타임 스탬프 필드는 postgresql의 timestamp 데이터 형식과 혼동하지 않도록 유닉스 타임 스탬프입니다.

+0

예, id, ts에 기본 키 순서를 뒤집어 봤지만 도움이되지 않았습니다. 실행 시간은 다소 차이가 없었습니다. – moshe

관련 문제