쿼리 실행 계획 시각화하기

TypeORM에서 logging 옵션 중 query 옵션을 사용해서 GET 메소드 API 호출 시 날라가는 쿼리의 실행 계획을 출력하고 시각화하였다.

SELECT "activity"."id" AS "activity_id", "activity"."created_at" AS "activity_created_at", 
       "activity"."title" AS "activity_title", "activity"."content" AS "activity_content", 
       "activity"."subject" AS "activity_subject", "activity"."end_date" AS "activity_end_date",
       "activity"."images" AS "activity_images", "activity"."files" AS "activity_files", 
       "activity"."type" AS "activity_type", "groupActivity"."id" AS "groupActivity_id", 
       "groups"."id" AS "groups_id", "groups"."name" AS "groups_name" FROM "activity" 
           "activity" LEFT JOIN "group_activity" "groupActivity" 
           ON "groupActivity"."activity_id"="activity"."id" 
           AND ("groupActivity"."activity_id" = "activity"."id") 
           LEFT JOIN "group" "groups" ON "groups"."id"="groupActivity"."group_id" 
           AND ("groups"."id" = "groupActivity"."group_id") WHERE "activity"."id" = 7;

PostgreSQL에서는 쿼리 앞에 EXPLAIN ANALYZE 쿼리를 추가하여 해당 쿼리의 실행 계획과 실행 시간을 출력할 수 있다.

 

해당 쿼리의 실행 계획과 실행 시간이 출력되었다.

 

해당 실행 계획을 시각화하는 방법에는 여러가지가 있다.

  1. PgAdmin
  2. DataGrip
  3. Dalibo(https://explain.dalibo.com)

가장 쉬운 방법은 출력한 실행 계획과 실행 시간을 Dalibo에 복사/붙여넣기하면 자동적으로 시각화를 해준다.

 

Plan 창에 복사한 실행 계획을 붙여넣기 한다.

 

Submit을 클릭하면 알아서 자동적으로 아래처럼 시각화를 해준다.

 

어디서 비용이 얼마나 발생하고, 몇 개의 row가 필터링 되는지, 시간은 얼마나 걸리는지 한눈에 알아보기가 쉽다.

 

DataGrip의 경우, 따로 EXPLAIN ANALYZE 쿼리를 추가하지 않고, 해당 쿼리 위에 마우스를 놓은 상태에서 우클릭을 통해 Explain Plan을 클릭하여 복사/붙여넣기 없이 시각화를 한번에 할 수 있다.

 

Explain Plan 클릭 -> Explain Plan/Analyze
시각화 시 위처럼 출력된다.