시스템 테이블 및 뷰 쿼리 - Amazon Redshift

시스템 테이블 및 뷰 쿼리

데이터 웨어하우스에는 생성한 테이블 외에도 많은 시스템 테이블 및 뷰가 포함되어 있습니다. 이러한 테이블 및 뷰에는 설치 및 시스템에서 실행 중인 다양한 쿼리 및 프로세스에 대한 정보가 포함되어 있습니다. 이러한 시스템 테이블 및 뷰를 쿼리하여 데이터베이스에 대한 정보를 수집할 수 있습니다. 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서시스템 테이블 및 뷰 참조를 참조하세요. 각 테이블 또는 뷰에 대한 설명은 테이블이 모든 사용자에게 표시되는지 아니면 슈퍼 사용자에게만 표시되는지를 나타냅니다. 슈퍼 사용자에게만 보이는 테이블을 쿼리하려면 슈퍼 사용자로 로그인합니다.

테이블 이름 목록 보기

스키마의 모든 테이블의 목록을 보려면 PG_TABLE_DEF 시스템 카탈로그 테이블을 쿼리하면 됩니다. 먼저 search_path에 대한 설정을 검토할 수 있습니다.

SHOW search_path;

결과는 다음과 같습니다.

search_path --------------- $user, public

다음 예에서는 검색 경로에 SALES 스키마를 추가하고 SALES 스키마의 모든 테이블을 표시합니다.

set search_path to '$user', 'public', 'sales'; SHOW search_path; search_path ------------------------ "$user", public, sales select * from pg_table_def where schemaname = 'sales'; schemaname | tablename | column | type | encoding | distkey | sortkey | notnull ------------+-----------+----------+------------------------+----------+---------+---------+--------- sales | demo | personid | integer | az64 | f | 0 | f sales | demo | city | character varying(255) | lzo | f | 0 | f

다음 예는 현재 데이터베이스의 모든 스키마에서 DEMO라는 모든 테이블의 목록을 보여줍니다.

set search_path to '$user', 'public', 'sales'; select * from pg_table_def where tablename = 'demo'; schemaname | tablename | column | type | encoding | distkey | sortkey | notnull ------------+-----------+----------+------------------------+----------+---------+---------+--------- public | demo | personid | integer | az64 | f | 0 | f public | demo | city | character varying(255) | lzo | f | 0 | f sales | demo | personid | integer | az64 | f | 0 | f sales | demo | city | character varying(255) | lzo | f | 0 | f

자세한 내용은 PG_TABLE_DEF 섹션을 참조하세요.

Amazon Redshift 쿼리 에디터 v2를 사용하면 먼저 연결할 데이터베이스를 선택하여 지정된 스키마의 모든 테이블을 볼 수도 있습니다.

사용자 보기

PG_USER 카탈로그를 쿼리하여 모든 사용자의 목록과 사용자 ID(USESYSID) 및 사용자 권한을 볼 수 있습니다.

SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig ------------+----------+-------------+----------+-----------+----------+----------+----------- rdsdb | 1 | true | true | true | ******** | infinity | awsuser | 100 | true | true | false | ******** | | guest | 104 | true | false | false | ******** | |

사용자 이름 rdsdb는 Amazon Redshift가 일상적 관리 및 유지 태스크를 위해 내부적으로 사용합니다. SELECT 문에 where usesysid > 1을 추가하면 사용자가 정의한 사용자 이름만 표시되도록 쿼리를 필터링할 수 있습니다.

SELECT * FROM pg_user WHERE usesysid > 1; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig ------------+----------+-------------+----------+-----------+----------+----------+----------- awsuser | 100 | true | true | false | ******** | | guest | 104 | true | false | false | ******** | |

최근 쿼리 보기

앞의 예에서 adminuser의 사용자 ID(user_id)는 100입니다. adminuser가 실행한 가장 최근의 쿼리 4건을 나열하려면 SYS_QUERY_HISTORY 뷰를 쿼리하면 됩니다.

이 뷰를 사용하여 최근에 실행된 쿼리의 쿼리 ID(query_id) 또는 프로세스 ID(session_id)를 찾을 수 있습니다. 이 뷰를 사용하여 쿼리를 완료하는 데 걸린 시간을 확인할 수도 있습니다. SYS_QUERY_HISTORY에는 특정 쿼리를 찾는 데 도움이 되는 쿼리 문자열(query_text)의 처음 4,000자가 포함되어 있습니다. 결과를 제한하려면 SELECT 문과 함께 LIMIT 절을 사용합니다.

SELECT query_id, session_id, elapsed_time, query_text FROM sys_query_history WHERE user_id = 100 ORDER BY start_time desc LIMIT 4;

결과는 다음과 같습니다.

query_id | session_id | elapsed_time | query_text ----------+--------------+---------------+---------------------------------------------------------------- 892 | 21046 | 55868 | SELECT query, pid, elapsed, substring from ... 620 | 17635 | 1296265 | SELECT query, pid, elapsed, substring from ... 610 | 17607 | 82555 | SELECT * from DEMO; 596 | 16762 | 226372 | INSERT INTO DEMO VALUES (100);

실행 중인 쿼리의 세션 ID 확인

쿼리에 대한 시스템 테이블 정보 검색을 위해 해당 쿼리와 연결된 세션 ID(프로세스 ID)를 지정해야 할 수 있습니다. 또는 아직 실행 중인 쿼리의 세션 ID를 찾아야 할 수도 있습니다. 예를 들어 프로비저닝된 클러스터에서 실행하는 데 너무 오래 걸리는 쿼리를 취소해야 하는 경우 세션 ID가 필요합니다. STV_RECENTS 시스템 테이블을 쿼리하여 실행 중인 쿼리의 세션 ID 목록과 함께 해당 쿼리 문자열을 가져올 수 있습니다. 쿼리가 여러 세션을 반환하는 경우 쿼리 텍스트를 보고 필요한 세션 ID를 파악할 수 있습니다.

실행 중인 쿼리의 세션 ID를 확인하려면 다음 SELECT 문을 실행합니다.

SELECT session_id, user_id, start_time, query_text FROM sys_query_history WHERE status='running';