Important
이 기능은 베타 버전으로 제공됩니다. 사용하려면 작업 공간 관리자가 Previews 페이지에서 시스템 테이블의 Lakebase Observability를 켜야 합니다. Azure Databricks 미리 보기 관리를 참조하세요.
Lakebase는 첨단 Postgres 신호부터 시작해 관측 가능성 텔레메트리를 스키마에 system.lakebase 캡처합니다. 포획은 자동으로 이루어집니다. 이 미리보기가 활성화되면, 프로젝트의 컴퓨트가 실행되는 동안 텔레메트리가 이 테이블에 표시됩니다. 설정할 설정도 없고, 목적지도 선택하지 않으며, 증명서를 제공할 필요도 없습니다.
Insights와 Genie는 같은 테이블을 읽고, Azure Databricks 도구로 쿼리할 수 있습니다.
메모
일반 공급 전에 테이블 및 열 이름이 변경될 수 있습니다.
Requirements
- 작업 공간에서 Lakebase Observability in System Tables 미리보기가 활성화되어 있습니다.
- AWS나 Azure에서 Lakebase 프로젝트를 운영하는 것. Postgres 데이터베이스 가져오기를 참조하세요.
캡처되는 항목
Lakebase는 느리거나 고장나는 데이터베이스를 설명하는 데 필요한 신호를 다음 표에 기록합니다:
| 캡처된 내용 | 테이블 이름 |
|---|---|
| 활성 세션 및 대기 이벤트 |
system.lakebase.active_session_history, system.lakebase.wait_event_counters |
| 쿼리 계획 및 쿼리별 실행 통계 |
system.lakebase.plan_history, system.lakebase.pg_stat_statements_counters |
| 스키마 변경: 변경된 내용, 시기 및 대상 | system.lakebase.ddl_history |
| 데이터베이스 통계: 크기, 행 읽기 및 수정, 세션 수 |
system.lakebase.database_counters, system.lakebase.database_gauges |
| 컴퓨팅 리소스 사용량: CPU, 메모리, 캐시, 연결 |
system.lakebase.compute_counters, system.lakebase.compute_gauges |
| 실패의 원인이 된 오류를 포함한 Postgres 원시 로그 메시지 | system.lakebase.postgres_logs |
기록은 7일간 보관됩니다. 이 페이지의 나머지 부분은 각 표의 모든 열을 기록합니다. 이 테이블들이 다른 시스템 테이블들 사이에서 어디에 위치하는지에 대해서는 Lakebase 시스템 테이블 참고 자료를 참조하세요.
Access
테이블들은 system.lakebase Unity 카탈로그에 의해 관리됩니다. 계정 관리자와 메타스토어 관리자 역할을 모두 가진 사용자는 텔레메트리를 읽고 접근 권한을 관리할 수 있습니다. Unity 카탈로그에서 권한 관리을 참조하세요.
접근은 스키마 수준에서 적용되므로, 읽 system.lakebase 을 수 있는 사용자는 계정 내 모든 프로젝트의 텔레메트리를 볼 수 있습니다.
가면 진술서 텍스트
진술 텍스트를 담는 열은 계정 관리자나 계정 수준 그룹 회원 databricks_pii_access 이 아닌 이상 반환 <REDACTED> 됩니다. 계정 관리자가 그 그룹을 만들고 관리합니다. 그룹 생성 및 관리 databricks_pii_access 및 마스크드 문장 텍스트 접근을 참조하세요.
모든 테이블에 공통된 열
아래의 모든 표에는 행의 원본을 식별하는 다음 열이 포함되어 있습니다.
| Column | 유형 | Description |
|---|---|---|
project_id |
STRING | 행이 온 Lakebase 프로젝트입니다. |
branch_id |
STRING | 행이 온 분기입니다. |
endpoint_id |
STRING | 행이 온 컴퓨팅 엔드포인트입니다. |
compute_id |
STRING | 특정 컴퓨팅 인스턴스입니다. 컴퓨팅 크기가 0으로 조정되고 다시 시작될 때 변경됩니다. |
ts |
TIMESTAMP | 행이 기록된 경우입니다. |
compute_mode |
STRING | 당시의 컴퓨팅 모드(예: 읽기-쓰기 또는 읽기 전용)입니다. |
이름이 끝나는 _counters 테이블에는 행 값이 누적된 간격의 시작을 표시하는 열도 포함 previous_ts 됩니다. 이러한 값은 지정 시간 판독값이 아니라 해당 간격에 대한 누적 값입니다. 끝으로 끝나는 _gauges 테이블은 대신 지정 시간 판독값이며 , 이 값은 없습니다 previous_ts.
아래 표에는 이러한 공통 열을 초과하는 열만 나열되어 있습니다.
세션 활동
지속적으로 샘플링되는 모든 활성 백 엔드의 스냅샷입니다. 이는 AWS Performance Insights 또는 Oracle의 ASH(활성 세션 기록)와 동일한 패턴입니다. 세션이 대기를 비롯한 작업을 수행하는 경우 여기에 표시됩니다.
active_session_history
| Column | 유형 | Description |
|---|---|---|
sample_seq |
LONG | 일괄 처리 내에서 이 샘플의 서수 위치입니다. |
pid |
LONG | 백 엔드의 프로세스 ID입니다. |
datid |
LONG | 데이터베이스의 개체 ID입니다. |
userid |
LONG | 연결 역할의 개체 ID입니다. |
queryid |
LONG | 실행 중인 쿼리를 식별합니다. 에서 queryid일치 pg_stat_statements_counters |
wait_event_info |
LONG | 대기 이벤트의 내부 인코딩입니다. |
wait_event_type |
STRING | 대기 이벤트의 범주(예 Timeout : 또는 Lock.)입니다. |
wait_event |
STRING | 특정 대기 이벤트(예 PgSleep: .) |
backend_state |
LONG | 백 엔드의 상태(예: 활성 또는 유휴 상태)입니다. |
backend_type |
LONG | 백 엔드 프로세스의 형식입니다. |
xact_age_ms |
LONG | 현재 트랜잭션이 열린 기간입니다. |
query_age_ms |
LONG | 현재 쿼리가 실행된 기간입니다. |
blocking_pid |
LONG | 이 세션이 차단되는 세션의 PID(있는 경우)입니다. |
leader_pid |
LONG | 이 백 엔드가 병렬 작업자인 경우 병렬 쿼리 리더의 PID입니다. |
flags |
LONG | 내부 상태 플래그입니다. |
plan_fingerprint |
LONG | 의 특정 계획 셰이프에 대한 링크입니다 plan_history. |
appname_hash |
LONG | 연결 애플리케이션 이름의 해시입니다. |
대기 이벤트
대기 이벤트 수 및 시간을 집계하여 샘플별 보기를 보완합니다 active_session_history.
wait_event_counters
| Column | 유형 | Description |
|---|---|---|
wait_event_id |
LONG | 대기 이벤트의 내부 인코딩입니다. |
wait_class_name |
STRING | 대기 이벤트의 범주입니다. |
wait_event_name |
STRING | 특정 대기 이벤트입니다. |
wait_event_count |
LONG | 이 대기 이벤트가 간격에서 발생한 횟수입니다. |
wait_event_time |
DOUBLE | 간격 동안 이 대기 이벤트에 소요된 총 시간입니다. |
쿼리 계획
전체 계획 및 Neon 관련 스토리지 통계를 포함한 쿼리 계획의 실행별 레코드입니다. 가장 자세한 테이블이며 일반적으로 느린 쿼리 조사가 종료됩니다.
plan_history
| Column | 유형 | Description |
|---|---|---|
row_position |
LONG | 일괄 처리 내에서 이 행의 서수 위치입니다. |
analyze_enabled |
BOOLEAN | 계획에 예측뿐만 아니라 실제 실행 통계()EXPLAIN ANALYZE가 포함되는지 여부입니다. |
buffers_enabled |
BOOLEAN | 계획에 버퍼 사용 통계가 포함되는지 여부입니다. |
query_hash |
STRING | 쿼리 텍스트를 식별하는 해시입니다. |
queryid |
LONG | 쿼리를 식별합니다. 일치 queryid 항목 pg_stat_statements_counters 및 active_session_history. |
duration_ms |
DOUBLE | 쿼리를 실행하는 데 걸린 시간입니다. |
total_cost |
DOUBLE | 쿼리에 대한 플래너의 예상 비용입니다. |
plan_rows |
LONG | 플래너의 예상 행 수입니다. |
actual_rows |
LONG | 반환된 실제 행 수입니다. |
plan_fingerprint |
LONG | 이 특정 계획 셰이프를 식별합니다. 에서 plan_fingerprint일치 active_session_history |
lock_wait_time_ms |
DOUBLE | 잠금을 기다리는 데 소요된 시간입니다. |
planning_time_ms |
DOUBLE | 실행과는 별도로 쿼리를 계획하는 데 소요된 시간입니다. |
shared_blks_hit / shared_blks_read / shared_blks_dirtied / shared_blks_written |
LONG | 이 실행에 대한 공유 버퍼 캐시 작업입니다. |
local_blks_hit / local_blks_read / local_blks_dirtied / local_blks_written |
LONG | 임시 테이블에 대한 로컬 버퍼 작업입니다. |
temp_blks_read / temp_blks_written |
LONG | 임시 파일 작업(예: 큰 정렬 또는 해시). |
neon_getpage_count |
LONG | pageserver로 전송된 페이지 요청 수입니다. |
neon_file_cache_hits |
LONG | pageserver 대신 로컬 파일 캐시에서 제공되는 페이지 수입니다. |
neon_getpage_wait_us |
LONG | pageerver 페이지 요청에서 대기하는 데 소요된 시간(마이크로초)입니다. |
backend_pid |
LONG | 이 쿼리를 실행한 백 엔드 프로세스 ID입니다. |
lock_wait_count |
LONG | 이 실행이 잠금에서 대기한 횟수입니다. |
userid / dbid |
LONG | 연결 역할 및 데이터베이스의 개체 ID입니다. |
query_text |
STRING | 쿼리 텍스트입니다. 가면을 쓴 채. 마스크드 진술서 텍스트를 참조하세요. |
plan_json |
STRING | 전체 쿼리 계획(JSON)입니다. 가면을 쓴 채. 마스크드 진술서 텍스트를 참조하세요. |
usename / datname |
STRING | 연결 역할 및 데이터베이스의 이름입니다. |
application_name / client_addr |
STRING | 연결 애플리케이션의 이름 및 클라이언트 주소입니다. |
wait_events |
STRING | 이 실행 중에 관찰된 이벤트를 대기합니다. |
parameters |
STRING | 쿼리에 사용되는 매개 변수(있는 경우)를 바인딩합니다. 가면을 쓴 채. 마스크드 진술서 텍스트를 참조하세요. |
blocking_pids |
STRING | 이 실행을 차단한 세션의 PID(있는 경우)입니다. |
neon_branch_id / neon_endpoint_id / neon_timeline_id |
STRING | 분기, 엔드포인트 및 타임라인에 대한 내부 네온 식별자입니다. |
cpu_user_time_ms / cpu_sys_time_ms |
DOUBLE | 이 실행에 사용된 CPU 시간은 사용자 및 시스템 시간으로 분할됩니다. |
voluntary_csw / involuntary_csw |
LONG | 이 실행 중에 컨텍스트가 전환됩니다. |
trace_id / span_id / trace_flags / service_name |
줄 / 줄 / 긴 / 줄 | 쿼리가 추적된 요청의 일부인 경우 OpenTelemetry 스타일 추적 식별자입니다. |
timeline_id |
LONG | 내부 타임라인 식별자입니다. |
truncated |
BOOLEAN | 이 행의 데이터(예: 대규모 계획)가 작성되기 전에 잘렸는지 여부입니다. |
쿼리 통계
표준 pg_stat_statements 확장에서 파생된 쿼리별 집계 통계입니다.
pg_stat_statements_counters
| Column | 유형 | Description |
|---|---|---|
userid / dbid |
LONG | 연결 역할 및 데이터베이스의 개체 ID입니다. |
queryid |
LONG | 쿼리를 식별합니다. 일치 queryid 항목 plan_history 및 active_session_history. |
toplevel |
BOOLEAN | PL/pgSQL 함수 또는 프로시저 내에 중첩된 행이 아닌 최상위 문에 대한 행인지 여부입니다. PL/pgSQL 제한 사항을 참조하세요. |
query |
STRING | 쿼리 텍스트입니다. 가면을 쓴 채. 마스크드 진술서 텍스트를 참조하세요. |
calls |
LONG | 이 쿼리가 간격으로 실행된 횟수입니다. |
plans |
LONG | 이 쿼리가 간격으로 계획된 횟수입니다. |
rows |
LONG | 반환되거나 영향을 받는 총 행입니다. |
total_exec_time / total_plan_time |
DOUBLE | 간격으로 이 쿼리를 실행하고 계획하는 데 소요된 총 시간입니다. |
shared_blks_hit / shared_blks_read / shared_blks_dirtied / shared_blks_written |
LONG | 공유 버퍼 캐시 작업입니다. |
local_blks_hit / local_blks_read / local_blks_dirtied / local_blks_written |
LONG | 임시 테이블에 대한 로컬 버퍼 작업입니다. |
temp_blks_read / temp_blks_written |
LONG | 임시 파일 작업입니다. |
wal_bytes / wal_fpi / wal_records |
LONG | 이 쿼리에서 생성된 미리 쓰기 로그 볼륨입니다. |
jit_emission_count / jit_emission_time / jit_functions / jit_generation_time / jit_inlining_count / jit_inlining_time / jit_optimization_count / jit_optimization_time |
혼합 | JIT가 이 쿼리에 사용된 경우 JIT(Just-In-Time) 컴파일 통계입니다. |
스키마 변경
스키마 변경: 변경된 내용, 시기 및 대상 이는 Genie가 인시던트를 배포 또는 수동 편집 중에서 스키마 변경으로 다시 추적하기 위해 읽는 내용입니다.
ddl_history
| Column | 유형 | Description |
|---|---|---|
row_position |
LONG | 일괄 처리 내에서 이 행의 서수 위치입니다. |
command_tag |
STRING | DDL 명령의 형식입니다(예 ALTER TABLE: .). |
object_type / object_name |
STRING | 변경된 개체의 종류 및 이름입니다. |
schema_name |
STRING | 개체가 속한 Postgres 스키마입니다. |
query_text |
STRING | 전체 DDL 문입니다. 가면을 쓴 채. 마스크드 진술서 텍스트를 참조하세요. |
duration_ms |
DOUBLE | DDL 문을 실행하는 데 걸린 시간. |
userid / usename |
LONG/STRING | 연결 역할의 개체 ID 및 이름입니다. |
application_name |
STRING | 연결 애플리케이션의 이름입니다. |
backend_pid |
LONG | 문을 실행한 백 엔드 프로세스 ID입니다. |
dbid |
LONG | 데이터베이스의 개체 ID입니다. |
search_path |
STRING | 당시 세션의 검색 경로입니다. |
ddl_json |
STRING | DDL 문의 구조화된 구문 분석 표현입니다. 가면을 쓴 채. 마스크드 진술서 텍스트를 참조하세요. |
메모
DDL 캡처에는 실제 간격이 있습니다. 크기 조정에서 0으로 다시 시작하는 컴퓨팅을 중심으로 변경한 내용을 놓칠 수 있습니다. 스키마 변경이 발생했음을 알고 있더라도 여기에 표시되지 않는 것이 가장 가능성이 큰 이유입니다. 제한 사항을 참조하세요.
Postgres 로그
오류 뒤에 있는 특정 오류를 포함하여 원시 Postgres 로그 메시지입니다.
postgres_logs
| Column | 유형 | Description |
|---|---|---|
sample_seq |
LONG | 일괄 처리 내에서 이 행의 서수 위치입니다. |
elevel |
LONG | 내부 로그 수준 인코딩. |
severity |
STRING | 로그 심각도(예 ERRORLOG: |
sqlstate |
STRING | Postgres SQLSTATE 오류 코드(예 42703 : 정의되지 않은 열)입니다. |
backend_pid / leader_backend_pid |
LONG | 백 엔드 프로세스 ID 및 해당하는 경우 병렬 쿼리 리더의 PID입니다. |
userid / usename |
LONG/STRING | 연결 역할의 개체 ID 및 이름입니다. |
datid / datname |
LONG/STRING | 데이터베이스의 개체 ID 및 이름입니다. |
application_name / client_addr |
STRING | 연결 애플리케이션의 이름 및 클라이언트 주소입니다. |
schema_name / table_name / column_name / constraint_name / datatype_name |
STRING | Postgres에 있는 경우 오류에서 참조하는 스키마, 테이블, 열, 제약 조건 또는 데이터 형식입니다. |
funcname |
STRING | 해당하는 경우 오류가 발생한 함수입니다. |
filename / lineno |
끈 / 긴 | Postgres 원본 파일 및 오류가 발생한 줄입니다. |
message |
STRING | 로그 메시지 텍스트입니다. |
detail / hint / context |
STRING | Postgres에 추가 세부 정보, 제안된 수정 사항 및 오류 컨텍스트가 있습니다. |
internalquery |
STRING | 해당하는 경우 오류와 관련된 내부적으로 생성된 쿼리입니다. |
statement |
STRING | 이 로그 항목을 트리거한 문입니다. 가면을 쓴 채. 마스크드 진술서 텍스트를 참조하세요. |
truncated_mask |
LONG | 쓰기 전에 잘린 필드(있는 경우)를 나타냅니다. |
메모
구조적 schema_name및 table_namecolumn_name 필드는 모든 오류 유형에 대해 채워지지 않습니다. 예를 들어 일반 "열이 존재하지 않음" 구문 분석 오류(SQLSTATE 42703예: 열 이름을 직접 지정하더라도 message 비워 둡니다.) 이러한 필드가 채워지는 것을 사용하지 마세요. 먼저 확인합니다 message .
컴퓨팅 메트릭
컴퓨팅 수준 리소스 사용: CPU, 메모리, 디스크 및 네트워크 I/O, 그리고 페이지 서버 앞에 있는 Lakebase의 컴퓨팅 쪽 캐시인 LFC(로컬 파일 캐시)입니다.
compute_counters
| Column | 유형 | Description |
|---|---|---|
backpressure_throttling_seconds |
DOUBLE | 스토리지 계층이 이 간격으로 쓰기를 제한하는 데 소요된 시간입니다. 0이 아닌 값은 쓰기 볼륨이 스토리지가 흡수할 수 있는 용량을 초과했음을 의미합니다. |
host_busiest_cpu_seconds / host_cpu_seconds |
DOUBLE | CPU 시간이 가장 많이 소요되고 코어가 가장 많이 소요됩니다. |
host_disk_read_bytes / host_disk_written_bytes |
DOUBLE | 디스크 I/O 볼륨. |
host_network_receive_bytes / host_network_transmit_bytes |
DOUBLE | 네트워크 I/O 볼륨. |
lfc_evictions / lfc_hits / lfc_misses / lfc_writes |
LONG | 이 간격에 대한 로컬 파일 캐시 작업입니다. |
replica_lfc_redo_evictions |
LONG | 이 컴퓨팅이 읽기 복제본인 경우 복제본 다시 실행으로 인한 로컬 파일 캐시 제거입니다. |
compute_gauges
| Column | 유형 | Description |
|---|---|---|
current_lsn |
LONG | 현재 미리 쓰기 로그 위치입니다. |
replica_wal_replay_lsn / replica_wal_receive_lsn |
LONG | 이 컴퓨팅이 읽기 복제본인 경우 WAL 재생 및 수신 위치입니다. |
max_connections |
LONG | 구성된 연결 제한입니다. |
lfc_working_set_size_5m / lfc_working_set_size_15m / lfc_working_set_size_60m |
LONG | 지난 5분, 15분, 60분 동안의 예상 작업 집합 크기입니다. |
lfc_size_limit / lfc_allocated / lfc_used |
LONG | 로컬 파일 캐시 용량 및 현재 사용. |
total_size_limit / total_size |
LONG | 전체 스토리지 용량 및 현재 사용량. |
replication_lag_bytes / replication_lag_time_ms |
LONG/DOUBLE | 이 컴퓨팅이 읽기 복제본인 경우 복제 지연입니다. |
host_logical_cpus / host_memory_total_bytes |
DOUBLE | 컴퓨팅의 프로비전된 CPU 및 메모리입니다. |
데이터베이스 메트릭
데이터베이스별 작업: 행 변경, 트랜잭션, 세션 및 진공 상태. 테이블 bloat 및 자동 진공 신호가 있는 위치입니다.
database_counters
| Column | 유형 | Description |
|---|---|---|
datid / datname |
LONG/STRING | 데이터베이스의 개체 ID 및 이름입니다. |
active_time_ms / idle_in_transaction_time_ms / session_time_ms |
DOUBLE | 활성, 열린 트랜잭션에서 유휴 상태, 전체 연결에 소요된 시간입니다. |
deadlocks |
LONG | 검색된 교착 상태의 수입니다. |
rows_deleted / rows_fetched / rows_inserted / rows_returned / rows_updated |
LONG | 간격에 대한 행 수준 작업입니다. |
sessions_abandoned / sessions_established / sessions_fatal / sessions_killed |
LONG | 세션 수명 주기 수입니다. |
shared_blks_hit / shared_blks_read |
LONG | 공유 버퍼 캐시 작업입니다. |
xact_commit / xact_rollback |
LONG | 커밋된 트랜잭션 및 롤백 트랜잭션 |
database_gauges
| Column | 유형 | Description |
|---|---|---|
datid / datname |
LONG/STRING | 데이터베이스의 개체 ID 및 이름입니다. |
numbackends |
LONG | 이 데이터베이스에 대한 현재 연결 수입니다. |
size |
LONG | 데이터베이스의 디스크 크기입니다. |
oldest_frozen_xid_age / oldest_mxid_age |
LONG | 가장 오래된 고정되지 않은 행의 트랜잭션 ID 및 multixact ID 기간입니다. 값 상승은 테이블 크기에서 bloat이 표시되기 전에 진공이 뒤처지는 초기 신호입니다. |
Limitations
메모
비밀번호는 문장이 캡처 CREATE ROLE 될 때 가라앉아 캡처된 값은 로 읽힙니다 PASSWORD '***'. 편집은 문장 내 비밀번호를 감지하는 데 달려 있으며, 잘못 작성된 문장은 탐지를 피할 수 있습니다.
Azure Databricks는 Azure Databricks 신원을 토큰으로 인증하고 입력할 비밀번호를 남기지 않는 OAuth roles를 권장합니다.
다음과 같은 제한 사항이 적용됩니다.
COPY조작은 쿼리 계획 이력에 기록되지 않습니다.PL/pgSQL 함수 또는 프로시저 내에서 실행되는 쿼리는 최상위 문으로 실행되지 않는 한 쿼리 수준 원격 분석에서 캡처되지 않습니다. Postgres의 자체 문 추적은 기본적으로 최상위 문만 계산합니다.
분기와 엔드포인트는 텔레메트리와 인사이트에서 내부 ID(예:
br-odd-mud-y2icrn1h)로 나타나며, "production" 같은 표시명으로 나타나지 않습니다. 인사이트나 테이블 행이 어떤 분기나 엔드포인트를 가리키는지 확인해야 한다면 Lakebase UI에서 ID를 교차 참조하세요.텔레메트리 수집을 활성화하는 GUC는 기존 컴퓨트에 자동으로 전파되지 않을 수 있습니다. 미리보기가 활성화된 후에도 텔레메트리가 나타나지 않는다면, 프로젝트에 연결해서 다음을 확인하세요:
SHOW neon_monitor.log_capture_enabled; SHOW databricks.o11y_exporter_enabled;둘 다
on를 반환해야 합니다. 둘 중 하나가 반환off되면 컴퓨팅 엔드포인트를 다시 시작합니다.
레거시 관측성 구성
텔레메트리가 시스템 테이블로 이동하기 전에는 텔레메트리를 자신의 Unity 카탈로그와 스키마로 캡처하고 미리 구축된 대시보드를 제공하는 관측 가능성 구성을 만들 수 있었습니다. 기존 구성은 계속 작동하며, 대시보드도 계속 이용 가능합니다. 더 이상 새로운 관측 가능성 설정을 만들 수 없고, 시스템 테이블로 캡처하면 대시보드가 생성되지 않습니다.
다음 단계
- Insights의 문제 감지: 이 텔레메트리를 일정에 따라 검토하는 에이전트입니다.
- Genie와 관련된 문제를 조사하고 수정하세요: 이 텔레메트리에 대해 직접 질문하세요.
- Lakebase 시스템 테이블 참조: 이 테이블들이 다른 시스템 테이블 사이에 위치하는 위치입니다.