STL_UTILITYTEXT - Amazon Redshift

STL_UTILITYTEXT

SELECT를 제외하고 데이터베이스에서 실행된 SQL 명령 텍스트를 수집합니다.

STL_UTILITYTEXT 뷰에 대한 쿼리를 실행하여 다음과 같이 시스템에서 실행된 SQL 문의 하위 집합을 수집합니다.

  • ABORT, BEGIN, COMMIT, END, ROLLBACK

  • ANALYZE

  • CALL

  • CANCEL

  • COMMENT

  • CREATE, ALTER, DROP DATABASE

  • CREATE, ALTER, DROP USER

  • EXPLAIN

  • GRANT, REVOKE

  • LOCK

  • reset

  • SET

  • SET

  • TRUNCATE

STL_DDLTEXTSTL_QUERYTEXT 및 도 참조하십시오.SVL_STATEMENTTEXT

STARTTIME 열과 ENDTIME 열은 일정 시간 동안 기록된 문을 확인하는 데 사용됩니다. 긴 SQL 텍스트 블록은 200개 문자의 길이로 구분되며, SEQUENCE 열에서 단일 문에 속하는 텍스트 조각을 식별할 수 있습니다.

STL_UTILITYTEXT는 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 시스템 테이블 및 뷰에 있는 데이터의 가시성 단원을 참조하십시오.

이 테이블의 데이터 중 일부 또는 전부는 SYS 모니터링 뷰인 SYS_QUERY_HISTORY에서도 찾아볼 수 있습니다. SYS 모니터링 뷰의 데이터는 사용 및 이해가 더 쉽도록 형식이 지정되어 있습니다. 쿼리에 SYS 모니터링 뷰를 사용하는 것이 좋습니다.

테이블 열

열 명칭 데이터 유형 설명
userid 정수 항목을 생성한 사용자의 ID.
xid bigint 트랜잭션 ID.
pid 정수 쿼리 문과 연결된 프로세스 ID
레이블 character(320) 쿼리 실행에 사용되는 파일의 이름 또는 SET QUERY_GROUP 명령을 사용하여 정의되는 레이블. 쿼리가 파일 기반이 아니거나 QUERY_GROUP 파라미터가 설정되지 않은 경우, 이 필드의 값은 공백입니다.
starttime 타임스탬프 쿼리 시작 시간(UTC) 총 시간에는 대기 및 실행이 포함되며 소수점 이하 자릿수는 6자리입니다. 예: 2009-06-12 11:29:19.131358.
endtime 타임스탬프 쿼리가 완료된 시간(UTC)입니다. 총 시간에는 대기 및 실행이 포함되며 소수점 이하 자릿수는 6자리입니다. 예: 2009-06-12 11:29:19.131358.
SEQUENCE 정수 단일 문에 200자 이상이 포함된 경우, 해당 문에 대해 추가 행이 기록됩니다. 시퀀스 0이 첫 번째 행이고 1이 두 번째 행이 되는 방식입니다.
텍스트 character(200) 200자씩 증가하는 SQL 텍스트. 이 필드에는 백슬래시(\\) 및 줄 바꿈(\n) 등의 특수 문자가 포함될 수 있습니다.

샘플 쿼리

다음은 2012년 1월 26일에 실행된 "utility" 명령 텍스트를 반환하는 쿼리입니다. 여기에서는 SET 명령 몇 개와 SHOW ALL 명령 1개가 실행되었습니다.

select starttime, sequence, rtrim(text) from stl_utilitytext where starttime like '2012-01-26%' order by starttime, sequence; starttime | sequence | rtrim ---------------------------+-----+---------------------------------- 2012-01-26 13:05:52.529235 | 0 | show all; 2012-01-26 13:20:31.660255 | 0 | SET query_group to '' 2012-01-26 13:20:54.956131 | 0 | SET query_group to 'soldunsold.sql' ...

저장된 SQL 재구성

STL_UTILITYTEXT의 text 열에 저장된 SQL을 재구성하려면 SELECT 문을 실행하여 text 열의 1개 이상의 부분에서 SQL을 생성합니다. 재구성된 SQL을 실행하기 전에 모든 (\n) 특수 문자를 줄 바꿈으로 바꿉니다. 다음 SELECT 문의 결과는 query_statement 필드에서 재구성된 SQL의 행입니다.

SELECT LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END) WITHIN GROUP (ORDER BY sequence) as query_statement FROM stl_utilitytext GROUP BY xid order by xid;

예를 들어 다음 쿼리는 query_group을 제로 문자열로 설정합니다. 쿼리 자체는 200자 이상이며 STL_UTILITYTEXT에 여러 부분으로 저장됩니다.

set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000';

이 예제에서 이 쿼리는 STL_UTILITYTEXT의 text 열에 많은 두 부분(행)으로 저장됩니다.

select query, sequence, text from stl_utilitytext where query=pg_last_query_id() order by query desc, sequence limit 10;
starttime | sequence | text ----------------------------+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2019-07-23 22:55:34.926198 | 0 | set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000000000 2019-07-23 22:55:34.926198 | 1 | 000000';

STL_UTILITYTEXT에 저장된 SQL을 재구성하려면 다음 SQL을 실행합니다.

select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS query_statement from stl_utilitytext where query=pg_last_query_id();

클라이언트에서 재구성된 SQL을 사용하려면 모든 (\n) 특수 문자를 줄 바꿈으로 바꿉니다.

query_statement ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000';