Oracle의 SQL_ID
란?
- Oracle에서는
SQL_ID
가 Shared Pool에 저장된 SQL 문장의 고유 ID로,V$SQL
,V$SQLAREA
등에서 사용됩니다. - SQL ID는 쿼리의 해시를 기반으로 한 고유한 13자 식별자입니다.
✅ SQL Server에서 유사한 개념
SQL Server 항목 | 설명 |
---|---|
sql_handle | SQL 텍스트를 식별하는 고유한 핸들 |
query_hash / query_plan_hash | 쿼리의 텍스트나 실행 계획의 해시값 (유사 SQL 그룹 파악) |
plan_handle | 실행 계획을 식별하는 고유 핸들 |
✅ 예제: sql_handle
사용하여 SQL 문장 추적
sql복사편집SELECT
qs.sql_handle,
qs.plan_handle,
st.text AS sql_text,
qs.execution_count,
qs.total_worker_time,
qs.total_elapsed_time,
qs.query_hash,
qs.query_plan_hash
FROM
sys.dm_exec_query_stats qs
CROSS APPLY
sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY
qs.total_worker_time DESC;
✅ 주요 식별자 설명
항목 | 설명 |
---|---|
sql_handle | SQL 문장 자체의 고유 ID (바이너리 값) |
plan_handle | 실행 계획의 고유 ID |
query_hash | 쿼리 텍스트 기반 해시 (유사 쿼리 그룹 분석에 적합) |
query_plan_hash | 실행 계획의 구조 기반 해시 (유사 실행 계획 식별에 적합) |
✅ SQL ID와 가장 유사한 것?
SQL Server에서는
sql_handle
이 Oracle의SQL_ID
와 가장 유사한 역할을 합니다.
그러나 Oracle은 SQL ID가 사람이 보기 쉬운 문자열인 반면, SQL Server의 sql_handle
은 바이너리 값입니다.
원한다면 아래처럼 문자열로 변환할 수도 있습니다:
sql복사편집SELECT
CONVERT(VARCHAR(100), qs.sql_handle, 1) AS sql_handle_str,
st.text
FROM
sys.dm_exec_query_stats qs
CROSS APPLY
sys.dm_exec_sql_text(qs.sql_handle) st;
✅ 참고: 특정 SQL 문으로 추적
만약 어떤 SQL 문을 기준으로 추적하고 싶다면, query_hash
로 그룹핑하거나, sql_handle
로 식별해서 추적 가능합니다.