Category Archives: Solution

컴퓨터 작업 중 일어날 수 있는 모든 문제해결을 위한 공간

MSSQL Distribution CleanUp 에러나는 이유

MSSQL에서 Distribution CleanUp Job이 에러가 나는 이유는 여러 가지가 있을 수 있습니다. 이 작업은 Transactional Replication에서 오래된 트랜잭션을 정리(clean up)하는 중요한 역할을 합니다. 에러가 발생하는 주요 원인을 아래에 정리해 드릴게요. ✅ 주요 에러 원인 1. 에이전트 권한 부족 🛠️ 해결 방법: 2. 대량의 미처리된 트랜잭션 🛠️ 해결 방법: 3. 테이블 락 또는 블로킹 🛠️ 해결… Read More »

Mssql 데드락 발생시 락발생시킨 쿼리 찾는 방법

MSSQL에서 데드락(deadlock) 이 발생했을 때, 어떤 쿼리나 프로세스가 데드락을 유발했는지 찾는 방법은 다음과 같습니다. 🔍 1. SQL Server 데드락 확인 방법 요약 ✅ 방법 1: SQL Server 에이전트 로그 또는 시스템 헬스 세션(XE) SQL Server 2008 이상에서는 시스템 헬스 세션 (system_health extended event) 이 기본적으로 데드락 정보를 기록합니다. 💡 데드락 XML 조회 (가장 흔한 방법) — 최근 데드락 이벤트 추출… Read More »

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 »