Category Archives: SQL Server

MS-SQL

lock_deadlock 이벤트로 sql_text 찾기

lock_deadlock 이벤트에서 sql_text를 찾기 위해서는 SQL Server에서 확장 이벤트(Extended Events)를 활용하는 방법이 가장 정확하고 실용적입니다. 여기서는 SQL Server에서 Deadlock 발생 시 관련 SQL 텍스트(sql_text)를 추적하고 조회하는 방법을 설명합니다. 🔍 Deadlock 발생 시 SQL 텍스트 찾는 방법 방법 1: Extended Events 세션 사용 CREATE EVENT SESSION [Deadlock_Capture] ON SERVER ADD EVENT sqlserver.xml_deadlock_report ADD TARGET package0.ring_buffer WITH (MAX_MEMORY=4096KB, EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY=5… Read More »

sys.dm_xe_session_targets 세부

sys.dm_xe_session_targets 뷰는 SQL Server의 Extended Events (확장 이벤트) 기능에서 사용 중인 타겟(target) 에 대한 정보를 제공합니다. 이 DMV는 실행 중인 XE 세션의 타겟 구성과 상태를 실시간으로 모니터링할 때 유용합니다. 📌 개념 요약 📋 주요 컬럼 설명 컬럼명 설명 event_session_address 세션의 메모리 주소 (XE 세션과 조인 시 사용) target_address 타겟의 메모리 주소 target_name 타겟의 이름 (예: ring_buffer, event_file, event_counter) execution_count 타겟이 실행된 횟수 last_execution_time 마지막으로… Read More »

Mssql deadlock원인파악

1. SQL Server Error Log 또는 Deadlock Graph 확인 SQL Server는 Deadlock 발생 시 해당 정보를 SQL Server Error Log나 Extended Events, Trace, System Health Session등에 기록합니다. ✅ 방법 A: 시스템 헬스 세션(System Health Session)에서 확인 SELECT XEvent.value(‘(event/data[@name=”resource”]/value)[1]’, ‘VARCHAR(MAX)’) AS Resource, XEvent.value(‘(event/data[@name=”objectname”]/value)[1]’, ‘VARCHAR(MAX)’) AS ObjectName, XEvent.value(‘(event/data[@name=”database_name”]/value)[1]’, ‘VARCHAR(MAX)’) AS DatabaseName, XEvent.value(‘(event/action[@name=”sql_text”]/value)[1]’, ‘VARCHAR(MAX)’) AS SQLText, XEvent.value(‘(event/data[@name=”transactionname”]/value)[1]’, ‘VARCHAR(MAX)’) AS TransactionName, DeadlockGraph FROM (… Read More »

ROW vs PAGE 압축 비교 리포트 생성 스크립트

MSSQL에서 테이블 또는 인덱스에 대해 ROW 압축 vs PAGE 압축 효과를 비교하는 리포트 생성 스크립트는 공식 저장 프로시저인 sp_estimate_data_compression_savings 을 기반으로 작성할 수 있습니다. ✅ 📊 ROW vs PAGE 압축 비교 리포트 스크립트 아래는 테이블 내 모든 인덱스 및 파티션에 대해 압축 전후 공간 절약량을 계산하고, ROW / PAGE 압축 효과를 비교하는 T-SQL 스크립트입니다. 🔧… Read More »

파워쉘이나 SSIS와 연동한 자동화

MSSQL의 파티션별 압축을 자동화하려면, 다음 두 가지 접근 방식이 자주 사용됩니다: 🛠️ 1. PowerShell을 이용한 압축 자동화 PowerShell은 SQL Server Agent 작업과도 쉽게 연동되며, Windows 환경에서 손쉽게 예약 실행이 가능합니다. ✅ PowerShell 스크립트 예제 (동적 압축) # 변수 설정 $serverName = “localhost” $databaseName = “YourDatabase” $tableName = “YourTableName” # SQL 압축 명령 동적 생성 $query… Read More »

MSSQL 압축 스크립트와 예제 및 파티션별 압축 자동화 방법

✅ 1. 파티션별 압축 기본 스크립트 예제 🎯 목표: 특정 파티션만 PAGE 압축하기 ALTER TABLE dbo.YourTableName REBUILD PARTITION = 5 — 5번 파티션 WITH (DATA_COMPRESSION = PAGE); 📌 파티션 번호는 파티션 함수의 정의에 따라 다름. 아래에서 확인하는 방법 설명합니다. ✅ 2. 파티션 정보 조회 ▶ 파티션 번호와 범위 확인 스크립트: SELECT ps.partition_number, prv.value AS RangeValue,… Read More »

파티셔닝이 되어있는 테이블에 주로 insert만 발생하는 테이블을 처음부터 압축하는 경우와 보관전에 압축하는 경우 어떤 경우가 더 유리한가?

✅ 요점 먼저: 구분 초기부터 압축 보관 전 압축 ✅ 저장공간 절약 빠름 (즉시) 느림 (나중에) ✅ CPU 사용량 증가 증가 (한 번에) ✅ INSERT 성능 느려짐 (특히 Page 압축) 빠름 ✅ 관리 복잡도 단순 약간 복잡 ✅ 실무 적합도 (쓰기 위주 테이블) ❌ 적합하지 않음 ✅ 더 유리함 🧠 상세 분석: 📌 1. 처음부터… Read More »

MSSQL에서 테이블압축시 페이지단위와 로우단위 어느게 더 유리한가?

✅ 1. Row Compression (로우 압축) 🔹 작동 방식 🔹 장점 🔹 단점 ✅ 2. Page Compression (페이지 압축) 🔹 작동 방식 🔹 장점 🔹 단점 🆚 언제 무엇을 선택할까? 상황 권장 압축 방식 읽기 위주의 테이블 (OLAP, DW) ✅ Page 압축 자주 갱신되거나 쓰기가 많은 테이블 (OLTP) ✅ Row 압축 또는 압축 없음 공간… Read More »

실시간 대기 이벤트, 특정 세션의 I/O 정보, 병목 현상 분석 모니터링 쿼리

✅ 1. 실시간 세션 대기 및 병목 확인 (현재 실행 중인 요청) SELECT r.session_id, r.status, r.command, r.wait_type, r.wait_time, r.wait_resource, r.cpu_time, r.total_elapsed_time, r.logical_reads, r.reads AS physical_reads, r.writes, r.blocking_session_id, s.login_name, s.host_name, s.program_name, st.text AS sql_text FROM sys.dm_exec_requests r JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) st WHERE r.session_id <> @@SPID ORDER BY r.total_elapsed_time DESC;… Read More »

해당 쿼리가 디스크i/o 논리i/o elapsetime 등을 확인하는 쿼리

✅ 1. 디스크 I/O (Physical I/O) sys.dm_io_virtual_file_stats를 사용 — 파일 수준의 I/O (읽기/쓰기 횟수 및 대기 시간). ✅ 2. 논리 I/O (Logical I/O) 쿼리 실행 시 발생한 페이지 읽기 횟수는 SET STATISTICS IO ON으로 확인 가능합니다. 예: SET STATISTICS IO ON; SET STATISTICS TIME ON; — 여기에 실행할 쿼리 SELECT * FROM YourTable WHERE YourCondition;… Read More »