설명 계획을 사용하여 Babelfish 쿼리 성능 향상 - Amazon Aurora

설명 계획을 사용하여 Babelfish 쿼리 성능 향상

버전 2.1.0부터 Babelfish에는 PostgreSQL 옵티마이저를 투명하게 사용하여 TDS 포트에서 T-SQL 쿼리에 대한 예상 및 실제 쿼리 계획을 생성하는 두 함수가 포함됩니다. 이러한 함수는 SQL Server 데이터베이스에서 SET STATISTICS PROFILE 또는 SET SHOWPLAN_ALL을 사용하여 실행 속도가 느린 쿼리를 식별하고 개선하는 것과 유사합니다.

참고

함수, 제어 흐름 및 커서에서 쿼리 계획을 가져오는 작업은 현재 지원되지 않습니다.

이 테이블에서는 SQL Server, Babelfish, PostgreSQL의 쿼리 계획 설명 함수 비교 정보를 확인할 수 있습니다.

SQL Server

Babelfish

PostgreSQL

SHOWPLAN_ALL

BABELFISH_SHOWPLAN_ALL

EXPLAIN

STATISTICS PROFILE

BABELFISH_STATISTICS PROFILE

EXPLAIN ANALYZE

SQL Server 옵티마이저 사용

PostgreSQL 옵티마이저 사용

PostgreSQL 옵티마이저 사용

SQL Server 입력 및 출력 형식

SQL Server 입력 및 PostgreSQL 출력 형식

PostgreSQL 입력 및 출력 형식

세션에 대해 설정

세션에 대해 설정

특정 문에 적용

다음을 지원합니다.

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • CURSOR

  • 객체

  • EXECUTE

  • 제어 흐름을 포함한 함수 및 EXEC(CASE, WHILE-BREAK-CONTINUE, WAITFOR, BEGIN-END, IF-ELSE 등)

다음을 지원합니다.

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • 객체

  • EXECUTE

  • EXEC

  • RAISEERROR

  • THROW

  • PRINT

  • USE

다음을 지원합니다.

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • CURSOR

  • 객체

  • EXECUTE

다음과 같이 Babelfish 함수를 사용합니다.

  • SET BABELFISH_SHOWPLAN_ALL[ON|OFF] – 예상 쿼리 실행 계획을 생성하려면 ON으로 설정합니다. 이 함수는 PostgreSQL EXPLAIN 명령의 동작을 구현합니다. 이 명령을 사용하여 지정된 쿼리에 대한 설명 계획을 가져옵니다.

  • SET BABELFISH_STATISTICS PROFILE[ON|OFF] – 실제 쿼리 실행 계획에 대해 ON으로 설정합니다. 이 함수는 PostgreSQL EXPLAIN ANALYZE 명령의 동작을 구현합니다.

PostgreSQL EXPLAINEXPLAIN ANALYZE에 대한 자세한 내용은 PostgreSQL 설명서의 EXPLAIN을 참조하세요.

참고

버전 2.2.0부터 SHOWPLAN_ALLSTATISTICS PROFILE SET 명령에 대한 SQL Server 구문에서 BABELFISH_ 접두사를 사용하지 않도록 escape_hatch_showplan_all 파라미터를 무시하도록 설정할 수 있습니다.

예를 들어, 다음 명령 시퀀스는 쿼리 계획을 설정한 다음 쿼리를 실행하지 않고 SELECT 문에 대한 예상 쿼리 실행 계획을 반환합니다. 이 예에서는 sqlcmd 명령줄 도구를 통해 SQL Server 샘플 northwind 데이터베이스를 사용하여 TDS 포트를 쿼리합니다.

1> SET BABELFISH_SHOWPLAN_ALL ON 2> GO 1> SELECT t.territoryid, e.employeeid FROM 2> dbo.employeeterritories e, dbo.territories t 3> WHERE e.territoryid=e.territoryid ORDER BY t.territoryid; 4> GO QUERY PLAN ------------------------------------------------------------------------------------ Query Text: SELECT t.territoryid, e.employeeid FROM dbo.employeeterritories e, dbo.territories t WHERE e.territoryid=e.territoryid ORDER BY t.territoryid Sort (cost=6231.74..6399.22 rows=66992 width=10) Sort Key: t.territoryid NULLS FIRST -> Nested Loop (cost=0.00..861.76 rows=66992 width=10) -> Seq Scan on employeeterritories e (cost=0.00..22.70 rows=1264 width=4) Filter: ((territoryid)::"varchar" IS NOT NULL) -> Materialize (cost=0.00..1.79 rows=53 width=6) -> Seq Scan on territories t (cost=0.00..1.53 rows=53 width=6)

쿼리 검토 및 조정을 마치면 다음과 같이 함수를 해제합니다.

1> SET BABELFISH_SHOWPLAN_ALL OFF

BABELFISH_STATISTICS PROFILE을 ON으로 설정하면 실행된 각 쿼리는 일반 결과 세트를 반환한 후 실제 쿼리 실행 계획을 보여주는 추가 결과 세트를 반환합니다. Babelfish는 SELECT 문을 호출할 때 가장 빠른 결과 세트를 제공하는 쿼리 계획을 생성합니다.

1> SET BABELFISH_STATISTICS PROFILE ON 1> 2> GO 1> SELECT e.employeeid, t.territoryid FROM 2> dbo.employeeterritories e, dbo.territories t 3> WHERE t.territoryid=e.territoryid ORDER BY t.territoryid; 4> GO

결과 세트와 쿼리 계획이 반환되며, 이 예에는 쿼리 계획만 표시되어 있습니다.

QUERY PLAN --------------------------------------------------------------------------- Query Text: SELECT e.employeeid, t.territoryid FROM dbo.employeeterritories e, dbo.territories t WHERE t.territoryid=e.territoryid ORDER BY t.territoryid Sort (cost=42.44..43.28 rows=337 width=10) Sort Key: t.territoryid NULLS FIRST -> Hash Join (cost=2.19..28.29 rows=337 width=10) Hash Cond: ((e.territoryid)::"varchar" = (t.territoryid)::"varchar") -> Seq Scan on employeeterritories e (cost=0.00..22.70 rows=1270 width=36) -> Hash (cost=1.53..1.53 rows=53 width=6) -> Seq Scan on territories t (cost=0.00..1.53 rows=53 width=6)

PostgreSQL 옵티마이저에서 반환한 쿼리 및 결과를 분석하는 방법에 대한 자세한 내용은 explain.depesz.com을 참조하세요. PostgreSQL EXPLAIN 및 EXPLAIN ANALYZE에 대한 자세한 내용은 PostgreSQL 설명서의 EXPLAIN을 참조하세요.

Babelfish 설명 옵션을 제어하는 파라미터

다음 테이블에 표시된 파라미터를 사용하여 쿼리 계획에 표시되는 정보 유형을 제어할 수 있습니다.

파라미터 설명

babelfishpg_tsql.explain_buffers

옵티마이저에 대한 버퍼 사용 정보를 표시하거나 숨기는 부울입니다. (기본값: off)(허용: off, on)

babelfishpg_tsql.explain_costs

옵티마이저에 대한 예상 시작 및 총 비용 정보를 표시하거나 숨기는 부울입니다. (기본값: on)(허용: off, on)

babelfishpg_tsql.explain_format

EXPLAIN 계획에 대한 출력 형식을 지정합니다. (기본값: text)(허용: text, xml, json, yaml)

babelfishpg_tsql.explain_settings

EXPLAIN 계획 출력에 구성 파라미터에 대한 정보가 포함되도록 설정하거나 해제하는 부울입니다. (기본값: off)(허용: off, on)

babelfishpg_tsql.explain_summary

쿼리 계획 이후의 총 시간과 같은 요약 정보를 표시하거나 숨기는 부울입니다. (기본값: on)(허용: off, on)

babelfishpg_tsql.explain_timing

실제 시작 시간 및 출력의 각 노드에 소요된 시간을 표시하거나 숨기는 부울입니다. (기본값: on)(허용: off, on)

babelfishpg_tsql.explain_verbose

설명 계획의 가장 상세한 버전을 표시하거나 숨기는 부울입니다. (기본값: off)(허용: off, on)

babelfishpg_tsql.explain_wal

설명 계획의 일부로 WAL 기록 정보의 생성을 설정하거나 해제하는 부울입니다. (기본값: off)(허용: off, on)

PostgreSQL 클라이언트 또는 SQL Server 클라이언트를 사용하여 시스템에서 Babelfish 관련 파라미터 값을 확인할 수 있습니다. 다음 명령을 실행하여 현재 파라미터 값을 가져옵니다.

1> execute sp_babelfish_configure '%explain%'; 2> GO

다음 출력에서 이 특정 Babelfish DB 클러스터의 모든 설정이 기본값임을 알 수 있습니다. 이 예에서는 일부 출력이 표시되지 않습니다.

name setting short_desc ---------------------------------- -------- -------------------------------------------------------- babelfishpg_tsql.explain_buffers off Include information on buffer usage babelfishpg_tsql.explain_costs on Include information on estimated startup and total cost babelfishpg_tsql.explain_format text Specify the output format, which can be TEXT, XML, JSON, or YAML babelfishpg_tsql.explain_settings off Include information on configuration parameters babelfishpg_tsql.explain_summary on Include summary information (e.g.,totaled timing information) after the query plan babelfishpg_tsql.explain_timing on Include actual startup time and time spent in each node in the output babelfishpg_tsql.explain_verbose off Display additional information regarding the plan babelfishpg_tsql.explain_wal off Include information on WAL record generation (8 rows affected)

다음 예제와 같이 sp_babelfish_configure를 사용하여 이러한 파라미터의 설정을 변경할 수 있습니다.

1> execute sp_babelfish_configure 'explain_verbose', 'on'; 2> GO

클러스터 전체 수준에서 설정을 영구적으로 만들려면 다음 예제와 같이 키워드 server를 포함합니다.

1> execute sp_babelfish_configure 'explain_verbose', 'on', 'server'; 2> GO