상위 50개 T-SQL 인터뷰 질문 및 답변(2026)

T-SQL 인터뷰 질문과 답변

T-SQL 인터뷰를 준비하고 계신가요? 이제 데이터베이스가 표면 아래에서 실제로 어떻게 작동하는지 이해하는 데 필요한 시간을 확보할 차례입니다. T-SQL 인터뷰 질문채용 담당자는 구문 기억력뿐만 아니라 데이터 조작, 최적화, 논리적 구조화 능력도 평가합니다.

기업이 데이터 기반 인사이트에 의존함에 따라 이 분야의 기회는 계속해서 확대되고 있습니다. 신입이든 경력 5~10년의 전문가든, 뛰어난 기술 전문성, 분석 능력, 그리고 실제 문제 해결 능력을 갖춘 지원자는 눈에 띕니다. 기초 및 고급 수준의 질문과 답변을 모두 이해함으로써 팀 리더, 관리자, 그리고 기술 시니어는 뛰어난 SQL 기술과 핵심 역량을 파악하는 데 도움이 됩니다.

본 가이드는 65명 이상의 채용 관리자, 40명 이상의 선임 개발자, 여러 산업 분야의 데이터 전문가로부터 얻은 통찰력을 바탕으로, 전 세계 기술 리더들이 신뢰하는 기본 SQL 논리부터 고급 최적화 기술까지 포괄적으로 다룹니다.
자세히보기 ...

👉 무료 PDF 다운로드: T-SQL 면접 질문 및 답변

최고의 T-SQL 면접 질문과 답변

1) T-SQL이란 무엇이고, 표준 SQL과 어떻게 다른가요?

Transact-SQL(T-SQL)은 MicrosoftSQL 언어의 독점적 확장으로 주로 다음과 함께 사용됩니다. Microsoft SQL Server변수, 조건문, 루프, 오류 처리, 내장 함수와 같은 절차적 프로그래밍 기능을 도입하여 표준 SQL을 향상시킵니다. 표준 SQL이 데이터 조작(SELECT, INSERT, UPDATE, DELETE)에 중점을 두는 반면, T-SQL은 흐름 제어문(IF…ELSE, WHILE), 트랜잭션 처리, 그리고 개발자가 복잡한 스크립트를 작성할 수 있도록 하는 시스템 함수를 지원합니다.

아래 SQL T-SQL
소유권 ANSI/ISO 표준 Microsoft
절차적 논리 제한된 지원됨(변수, 루프)
오류 처리 최소의 TRY…CATCH 지원됨
1 차 사용 일반 DB SQL 서버

예:

DECLARE @count INT = 5;
WHILE @count > 0
BEGIN
    PRINT @count;
    SET @count -= 1;
END;

2) 예를 들어 T-SQL의 다양한 조인 유형을 설명하세요.

T-SQL의 조인은 관련 열을 기준으로 두 개 이상의 테이블에서 행을 결합합니다. 관계형 데이터 쿼리를 수행하려면 조인의 유형을 이해하는 것이 중요합니다.

조인 유형 기술설명 예제 구문
내부 결합 일치하는 행만 반환합니다. SELECT * FROM A INNER JOIN B ON A.id = B.id;
왼쪽 가입 왼쪽부터 모두 + 오른쪽부터 매치 SELECT * FROM A LEFT JOIN B ON A.id = B.id;
오른쪽 조인 오른쪽부터 모두 + 왼쪽부터 일치 SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
전체 가입 LEFT + RIGHT를 결합합니다 SELECT * FROM A FULL JOIN B ON A.id = B.id;
크로스 가입 카티 전 곱 SELECT * FROM A CROSS JOIN B;

실제 예: 합류 Orders Customers 어떤 고객이 주문을 했는지 찾으려면 INNER JOIN.


3) 공통 테이블 표현식(CTE)이란 무엇이고, 그 장점은 무엇입니까?

CTE(공통 테이블 표현식)는 참조할 수 있는 임시 명명된 결과 집합을 제공합니다. SELECT, INSERT, UPDATEDELETE 문장입니다. 가독성을 높이고 재귀 쿼리를 단순화합니다.

장점:

  • 질의의 명확성과 유지관리가 향상됩니다.
  • 재귀를 활성화합니다(조직도와 같은 계층적 데이터의 경우).
  • 반복되는 하위 쿼리를 방지하는 데 도움이 됩니다.
  • 대규모 스크립트의 모듈성을 높입니다.

예:

WITH EmployeeCTE AS (
    SELECT EmpID, EmpName, ManagerID
    FROM Employees
)
SELECT * FROM EmployeeCTE WHERE ManagerID IS NULL;

4) T-SQL에서 임시 테이블과 테이블 변수는 어떻게 다릅니까?

둘 다 중간 결과를 저장하는 데 사용되지만 동작과 범위가 상당히 다릅니다.

제품 특장점 임시 테이블 (#Temp) 테이블 변수 (@TableVar)
저장됨 임시DB 메모리(제한된 TempDB 사용 포함)
거래 범위 거래를 추적합니다 거래와 무관함
색인 지원 제한된
성능 대용량 데이터 세트에 더 적합 소규모 데이터 세트에 더 적합

예:

DECLARE @TableVar TABLE (ID INT, Name NVARCHAR(50));
INSERT INTO @TableVar VALUES (1, 'Alice');

대용량 데이터 세트를 다루거나 인덱스가 필요한 경우 임시 테이블을 사용하세요.


5) T-SQL의 트랜잭션 개념과 트랜잭션 수명 주기를 설명하세요.

T-SQL의 트랜잭션은 일련의 작업이 단일 논리적 단위로 실행되도록 보장합니다. 수명 주기에는 다음이 포함됩니다. 거래 시작, COMMIT예산 및 롤백.

단계 기술설명
거래 시작 거래를 시작합니다
트랜잭션 커밋 모든 변경 사항을 영구적으로 저장합니다.
롤백 트랜잭션 마지막 BEGIN 이후의 모든 작업을 취소합니다.

예:

BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 100 WHERE AccID = 1;
UPDATE Accounts SET Balance = Balance + 100 WHERE AccID = 2;
COMMIT TRANSACTION;

중간에 오류가 발생하면, ROLLBACK 데이터 무결성을 유지합니다.


6) DELETE, TRUNCATE, DROP 명령의 차이점은 무엇입니까?

Command 함수 되돌리기 구조에 영향을 미칩니다 속도
삭제 특정 행을 제거합니다 가능 아니 느린
자르기 모든 행을 제거합니다 아니요(보통) 아니 빠른
DROP 전체 테이블을 삭제합니다 아니 가능 가장 빠른

예:

DELETE FROM Employees WHERE Department = 'HR';
TRUNCATE TABLE TempData;
DROP TABLE OldLogs;

DELETE 선택적 제거를 위해 TRUNCATE 클리어링을 위해, 그리고 DROP 테이블을 완전히 제거하세요.


7) T-SQL에서 오류 처리가 어떻게 이루어지나요?

T-SQL은 다음을 통해 구조화된 오류 처리를 제공합니다. TRY...CATCH 블록을 사용하면 개발자가 런타임 오류를 우아하게 관리할 수 있습니다.

예:

BEGIN TRY
    INSERT INTO Employees VALUES (1, 'John');
END TRY
BEGIN CATCH
    PRINT 'Error: ' + ERROR_MESSAGE();
END CATCH;

이 접근 방식은 잘못된 작업을 격리하고 트랜잭션이 데이터 무결성을 손상시키는 것을 방지합니다. 개발자는 다음과 같은 시스템 기능에도 액세스할 수 있습니다. ERROR_NUMBER() or ERROR_SEVERITY() 진단을 위해


8) T-SQL 쿼리 성능을 최적화하는 다양한 방법은 무엇입니까?

최적화에는 SQL 설계, 인덱싱, 실행 전략을 세부적으로 조정하는 작업이 포함됩니다.

주요 기술:

  1. 적절한 인덱싱 자주 쿼리되는 열에 대해.
  2. 피하 SELECT * — 열을 명시적으로 지정합니다.
  3. 집합 기반 작업 커서 대신.
  4. SQL Server Management Studio를 사용하여 실행 계획을 분석합니다.
  5. JOIN을 효율적으로 적절한 ON 조건이 적용됩니다.
  6. 줄입니다 중첩된 하위 쿼리; CTE나 임시 테이블을 선호합니다.

T-SQL의 성능 튜닝에는 다음을 사용하여 쿼리 실행 통계를 모니터링하는 것도 포함됩니다. SET STATISTICS IO ON.


9) 윈도우 함수란 무엇이고, 언제 사용해야 하나요?

윈도우 함수는 현재 행과 관련된 여러 행에 대해 계산을 수행하며, 단일 결과로 압축하지 않습니다. 순위, 누적 합계, 이동 평균 등에 유용합니다.

예:

SELECT
    EmployeeID,
    Salary,
    RANK() OVER (ORDER BY Salary DESC) AS RankBySalary
FROM Employees;

일반적인 기능은 다음과 같습니다. RANK(), ROW_NUMBER(), DENSE_RANK()예산 및 SUM() OVER().

이러한 기능은 집계된 데이터와 행 수준 데이터가 모두 필요한 분석 워크로드에 매우 중요합니다.


10) 클러스터형 인덱스와 비클러스터형 인덱스의 차이점을 설명하세요.

제품 특장점 Cluster에드 인덱스 비 -Cluster에드 인덱스
데이터 저장매체 물리적으로 테이블을 재배열합니다 분리된 구조
테이블당 수량 배수
성능 범위 쿼리가 더 빠릅니다. 특정 조회에 더 빠름
사용 예 기본 키 2차 검색

예:

CREATE CLUSTERED INDEX IX_EmployeeID ON Employees(EmployeeID);
CREATE NONCLUSTERED INDEX IX_Dept ON Employees(Department);

올바른 인덱스 유형을 선택하는 것은 쿼리 실행 속도와 저장 효율성에 직접적인 영향을 미칩니다.


11) T-SQL의 저장 프로시저는 무엇이고 왜 사용됩니까?

저장 프로시저는 서버에 저장된 하나 이상의 SQL 문을 미리 컴파일하여 모아 놓은 것입니다. 저장 프로시저를 사용하면 로직을 캡슐화하고 재컴파일 없이 반복적으로 실행할 수 있어 성능, 보안 및 재사용성이 향상됩니다. 저장 프로시저는 네트워크 트래픽을 줄이고 동적 실행을 위한 매개변수를 지원합니다.

예:

CREATE PROCEDURE GetEmployeeDetails @Dept NVARCHAR(50)
AS
BEGIN
    SELECT EmpName, Position FROM Employees WHERE Department = @Dept;
END;

이점:

  • 사전 컴파일로 인해 성능이 향상되었습니다.
  • 통제된 실행을 통해 보안이 향상되었습니다.
  • 코드 유지관리와 모듈화가 더 쉬워졌습니다.

12) T-SQL에서 저장 프로시저와 함수의 차이점을 설명하세요.

아래 저장 프로 시저 함수
반환 유형 여러 값을 반환할 수 있습니다 단일 값 또는 테이블을 반환해야 합니다.
SELECT에서 사용 허용되지 않음 허용
오류 처리 TRY…CATCH 지원됨 제한된
실행 를 통해 실행됨 EXEC SQL과 함께 인라인으로 사용됨
거래 제어 지원 지원되지 않음

예:

  • 순서: EXEC GetEmployeeDetails 'HR';
  • 기능: SELECT dbo.GetSalary(101);

함수는 계산에 이상적이고, 프로시저는 비즈니스 로직과 데이터 조작에 더 적합합니다.


13) T-SQL의 트리거란 무엇이고, 트리거의 유형은 무엇입니까?

트리거는 테이블이나 뷰에서 특정 이벤트(INSERT, UPDATE, DELETE)에 응답하여 자동으로 실행되는 특수 저장 프로시저입니다. 트리거는 비즈니스 규칙 적용, 변경 사항 감사 또는 참조 무결성 유지에 사용됩니다.

타입 기술설명
트리거 후 이벤트 완료 후 화재 발생
트리거 대신 트리거 이벤트 대신 실행됩니다.

예:

CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
    PRINT 'New employee record added!';
END;

트리거를 과도하게 사용하지 마세요. 성능에 영향을 미치고 디버깅을 복잡하게 만들 수 있습니다.


14) T-SQL에서 NULL 값을 어떻게 처리하나요?

NULL은 누락되었거나 알 수 없는 데이터를 나타냅니다. T-SQL은 이를 효과적으로 처리하기 위한 여러 함수를 제공합니다.

  • ISNULL(expression, replacement) → NULL을 기본값으로 바꿉니다.
  • COALESCE(expression1, expression2, ...) → 첫 번째 NULL이 아닌 값을 반환합니다.
  • NULLIF(expression1, expression2) → 표현식이 같으면 NULL을 반환합니다.

예:

SELECT ISNULL(Manager, 'No Manager') AS ManagerName FROM Employees;

모범 사례: 예상치 못한 결과를 방지하려면 조인과 조건에서 항상 NULL을 고려하세요.


15) T-SQL의 커서란 무엇이고, 언제 사용을 피해야 합니까?

커서를 사용하면 쿼리 결과를 행 단위로 처리할 수 있습니다. 이는 집합 기반 연산으로는 충분하지 않은 복잡한 논리에 유용합니다. 그러나 커서는 느리게 자원이 많이 드는 세트 기반 대안과 비교해서.

예:

DECLARE emp_cursor CURSOR FOR SELECT EmpName FROM Employees;
OPEN emp_cursor;
FETCH NEXT FROM emp_cursor;
-- process
CLOSE emp_cursor;
DEALLOCATE emp_cursor;

단점 :

  • 메모리 사용량이 증가했습니다.
  • 확장성이 낮습니다.
  • 성능 저하.

대안 : 가능하면 테이블 조인, 하위 쿼리 또는 윈도우 함수를 사용하세요.


16) MERGE 문과 그 사용 사례를 설명하세요.

The MERGE 문장이 수행된다 INSERT, UPDATE예산 및 삭제 단일 명령으로 작업을 수행할 수 있어 두 개의 테이블을 동기화하는 데 이상적입니다.

구문 예:

MERGE INTO Target AS T
USING Source AS S
ON T.ID = S.ID
WHEN MATCHED THEN UPDATE SET T.Name = S.Name
WHEN NOT MATCHED BY TARGET THEN INSERT (ID, Name) VALUES (S.ID, S.Name)
WHEN NOT MATCHED BY SOURCE THEN DELETE;

사용 사례:

  • 데이터 웨어하우징(동기화 스테이징 및 대상 테이블).
  • 증분 데이터 로딩.
  • 감사 또는 차원 테이블을 유지 관리합니다.

17) T-SQL의 사용자 정의 함수(UDF)에는 어떤 유형이 있습니까?

타입 기술설명 예시
스칼라 단일 값을 반환합니다 CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL
인라인 테이블 값 단일을 통해 테이블을 반환합니다. SELECT RETURN SELECT * FROM Employees WHERE Dept = 'HR'
다중 명령문 테이블 값 여러 문장 후에 테이블을 반환합니다. 복잡한 논리에 유용합니다

함수는 코드 재사용을 촉진하고 모듈식 쿼리 디자인을 향상시킵니다.

성능 최적화를 위해 가능한 한 결정적이어야 합니다(동일한 입력에 대해 동일한 결과를 반환해야 함).


18) 정규화란 무엇이고, 장점과 단점은 무엇입니까?

정규화는 중복을 최소화하고 무결성을 향상시키기 위해 데이터베이스의 데이터를 구성하는 과정입니다. 테이블을 더 작고 관련된 개체로 나누는 것을 포함합니다.

일반형 통치 예시
1NF 반복되는 그룹 제거 쉼표로 구분된 데이터 분할
2NF 부분 종속성 제거 기본 키에 대한 완전한 종속성을 보장합니다.
3NF 전이적 종속성 제거 파생 속성 이동

장점:

  • 중복성을 줄입니다.
  • 데이터 일관성을 보장합니다.
  • 유지 관리를 단순화합니다.

단점 :

  • 복잡한 조인.
  • 분석 쿼리에 대한 잠재적인 성능 저하.

19) T-SQL의 다양한 유형의 제약조건은 무엇입니까?

제약조건은 테이블 내의 데이터 무결성에 대한 규칙을 적용합니다.

강제 목적 예시
기본 키 각 행을 고유하게 식별합니다. PRIMARY KEY (EmpID)
외래 키 두 테이블을 연결합니다 FOREIGN KEY (DeptID)
UNIQUE 고유한 열 값을 보장합니다. UNIQUE (Email)
CHECK 데이터 범위를 검증합니다 CHECK (Age >= 18)
DEFAULT 기본값을 제공합니다 DEFAULT GETDATE()

제약 조건은 정확성과 안정성을 보장하여 광범위한 애플리케이션 수준 검증의 필요성을 줄여줍니다.


20) T-SQL에서 권한과 보안을 어떻게 관리하나요?

T-SQL은 다음을 통해 데이터베이스 보안을 관리합니다. 로그인, 사용자, 역할 및 권한.

권한은 개체 또는 스키마 수준에서 부여하거나 취소할 수 있습니다.

예:

CREATE LOGIN John WITH PASSWORD = 'Strong@123';
CREATE USER John FOR LOGIN John;
GRANT SELECT, INSERT ON Employees TO John;

모범 사례:

  • 역할 사용자에게 직접 권한을 부여하는 대신.
  • 사용을 피하십시오 sa 또는 애플리케이션에 대한 시스템 계정입니다.
  • 정기적으로 권한을 감사합니다. sys.database_permissions.

적절한 권한 관리를 통해 최소 권한 원칙과 보안 정책 준수가 보장됩니다.


21) T-SQL의 다양한 트랜잭션 격리 수준은 무엇입니까?

거래 격리 수준은 한 거래가 다른 거래와 어떻게 격리되는지 결정합니다. 일관성동시성. SQL Server는 다음을 지원합니다.

격리 수준 기술설명 더티 리드 반복 불가능한 읽기 팬텀 리드
커밋되지 않은 읽기 커밋되지 않은 데이터를 읽습니다. 가능 가능 가능
커밋 된 읽기 기본값; 잠금은 더티 읽기를 방지합니다. 아니 가능 가능
반복 읽기 커밋할 때까지 데이터 변경을 방지합니다. 아니 아니 가능
직렬화 가능 완전 격리; 최고 잠금 아니 아니 아니
스냅 사진 잠금이 아닌 버전 관리를 사용합니다. 아니 아니 아니

예:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- your code
COMMIT;

스냅 사진 일관성을 희생하지 않고 차단을 최소화하기 위해 높은 동시성 시스템이 필요합니다.


22) SQL Server의 교착 상태란 무엇이며, 어떻게 방지할 수 있나요?

A 이중 자물쇠 두 트랜잭션이 서로에게 필요한 잠금을 유지하여 교착 상태가 발생하는 경우 발생합니다. SQL Server는 자동으로 한 트랜잭션을 교착 상태의 희생자로 감지하고 종료합니다.

시나리오 예 :

  • 트랜잭션 A는 Table1을 잠근 다음 Table2를 기다립니다.
  • 트랜잭션 B는 Table2를 잠근 다음 Table1을 기다립니다.

예방 기술:

  1. 동일한 순서로 리소스에 접근합니다.
  2. 거래는 짧게 진행하세요.
  3. 적절한 격리 수준을 사용하세요.
  4. 거래 내에서 사용자 상호 작용을 피하세요.

SQL 프로파일러 또는 확장 이벤트를 사용하여 trac실시간으로 교착 상태가 발생합니다.


23) 비관적 동시성 제어와 낙관적 동시성 제어의 차이점을 설명하세요.

타입 기술설명 잠금 장치 적용 사례
비관적 인 거래 중 데이터 잠금 무거운 잠금 갈등이 심한 환경
낙관적인 행 버전 관리를 사용하고 커밋 전에 확인합니다. 최소 잠금 읽기 집약적이고 충돌이 적은 워크로드

예:

  • 비관적: 기본 READ COMMITTED 잠금.
  • 낙관적인: SNAPSHOT 행 버전 관리를 통한 격리.

낙관적 동시성은 대량의 읽기 작업과 낮은 빈도의 업데이트가 있는 시스템의 성능을 향상시킵니다.


24) 느리게 실행되는 T-SQL 쿼리를 어떻게 분석하고 최적화할 수 있나요?

  1. 실행 계획 확인: 스캔, 누락된 인덱스, 비용이 많이 드는 작업을 식별합니다.
  2. SET STATISTICS IO/TIME을 사용하세요: I/O 및 CPU 사용량을 분석합니다.
  3. 커서와 루프를 피하세요: 집합 기반 작업으로 대체합니다.
  4. 인덱스 최적화: 조각난 인덱스를 추가하거나 재구성합니다.
  5. 매개변수 스니핑: OPTION (RECOMPILE) 새로운 계획을 세우다.

예:

SET STATISTICS TIME ON;
SELECT * FROM Orders WHERE CustomerID = 123;

정기적으로 느린 쿼리를 모니터링합니다. 동적 관리 뷰(DMV) 처럼 sys.dm_exec_query_stats 가장 좋은 관행입니다.


25) 동적 SQL이란 무엇이고, 장점과 위험은 무엇입니까?

동적 SQL을 사용하면 변수를 사용하여 런타임에 동적으로 SQL 문을 구성할 수 있습니다.

예:

DECLARE @sql NVARCHAR(MAX);
SET @sql = 'SELECT * FROM Employees WHERE Dept = ''' + @Dept + '''';
EXEC(@sql);

장점:

  • 변수 테이블 이름이나 필터에 대한 유연성.
  • 여러 스키마에 재사용 가능.

단점 :

  • 취약하다 SQL 주입 매개변수화되지 않은 경우.
  • 디버깅과 유지관리가 더 어렵습니다.

항상 사용 sp_executesql 안전을 위한 매개변수가 있습니다.


26) T-SQL의 임시 객체는 무엇이며 어떻게 다릅니까?

임시 객체는 다음에 저장됩니다. 임시DB 중간 데이터를 관리하는 데 도움이 됩니다.

개체 유형 범위 예시
로컬 온도 테이블 세션별 CREATE TABLE #TempTable
글로벌 온도 테이블 모든 세션에서 볼 수 있음 CREATE TABLE ##TempGlobal
테이블 변수 배치별 DECLARE @Temp TABLE (...)

모범 사례:

  • 작은 데이터 세트에는 테이블 변수를 선호합니다.
  • 인덱싱이 필요한 대용량 데이터의 경우 로컬 임시 테이블을 사용합니다.
  • 리소스를 더 빠르게 해제하려면 임시 테이블을 명시적으로 삭제합니다.

27) T-SQL에서 윈도우 파티셔닝 함수를 어떻게 사용하나요?

파티셔닝을 사용하면 특정 데이터 하위 집합에 창 함수를 적용할 수 있습니다.

예:

SELECT
    Department,
    EmpName,
    Salary,
    RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS RankInDept
FROM Employees;

이점:

  • 그룹별 순위, 합계, 평균을 효율적으로 계산합니다.
  • 셀프 조인이나 하위 쿼리가 필요 없습니다.

사용 사례: 급여대, 판매 순위, 추세 분석.


28) T-SQL에서 UNION과 UNION ALL의 차이점은 무엇입니까?

중복 성능 적용 사례
UNION 중복을 제거합니다 더 느림(정렬/구별 사용) 결과 집합을 깔끔하게 결합
UNION ALL 중복을 유지합니다 빠른 집계 또는 데이터 마이그레이션

예:

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers;

취하다 UNION ALL 중복이 허용되고 성능이 중요한 경우.


29) T-SQL에서 JSON 데이터를 어떻게 다루나요?

SQL Server는 JSON 데이터를 구문 분석하고 생성하기 위한 기본 JSON 함수를 지원합니다.

예:

DECLARE @json NVARCHAR(MAX) = '{"Name":"John","Age":30}';
SELECT JSON_VALUE(@json, '$.Name') AS Name;

주요 기능 :

  • JSON_VALUE() → 예tracts 스칼라 값.
  • JSON_QUERY() → 예tracts 객체/배열.
  • OPENJSON() → JSON을 행으로 구문 분석합니다.
  • FOR JSON → 쿼리 결과를 JSON 형식으로 변환합니다.

API, 하이브리드 시스템, NoSQL 통합에 유용합니다.


30) SQL Server에서 TempDB를 관리하고 최적화하려면 어떻게 해야 합니까?

TempDB 임시 저장 및 버전 관리에 필수적인 시스템 데이터베이스입니다. 관리가 잘못되면 심각한 성능 문제가 발생할 수 있습니다.

최적화 기술:

  1. TempDB를 빠른 저장소(SSD)에 저장합니다.
  2. 데이터와 로그 파일의 크기를 미리 조정합니다.
  3. 여러 개의 데이터 파일을 사용합니다(CPU 코어당 1개, 최대 8개).
  4. 모니터링 sys.dm_db_file_space_usage.
  5. 임시 물건을 정기적으로 정리하세요.

예시 쿼리:

SELECT * FROM sys.dm_db_file_space_usage;

TempDB를 사전에 관리하면 할당 페이지에서 경합이 방지되고 전반적인 데이터베이스 처리량이 향상됩니다.


31) T-SQL의 쿼리 힌트란 무엇이고, 언제 사용해야 합니까?

쿼리 힌트는 SQL Server 최적화 프로그램에 일반 실행 계획을 변경하도록 지시합니다.

이러한 기능은 아껴서 사용해야 합니다. 즉, 데이터 분포와 실행 컨텍스트를 완전히 이해한 경우에만 사용해야 합니다.

예:

SELECT * FROM Orders WITH (NOLOCK) WHERE CustomerID = 102;

일반적인 힌트:

  • NOLOCK: 잠금 없이 읽습니다(커밋되지 않은 데이터를 읽을 수 있음).
  • FORCESEEK: 스캔 대신 인덱스 검색을 실행합니다.
  • OPTIMIZE FOR: 계획 생성을 위한 매개변수 값을 안내합니다.
  • RECOMPILE: 각 실행에 대해 강제로 재컴파일을 실행합니다.

주의: 힌트를 과도하게 사용하면 데이터가 늘어나거나 패턴이 변경됨에 따라 성능이 저하될 수 있습니다. 옵티마이저의 계획이 비효율적이라고 입증될 때만 힌트를 사용하세요.


32) SQL Server에서 실행 계획 캐싱의 개념을 설명하세요.

SQL Server는 반복되는 쿼리에 대한 재컴파일을 방지하기 위해 실행 계획을 캐시합니다.

동일한 구조로 동일한 쿼리를 다시 실행하면 캐시된 계획을 재사용하여 성능이 향상됩니다.

예:

EXEC GetCustomerOrders @CustomerID = 101;

이점:

  • CPU 오버헤드를 줄입니다.
  • 응답 시간의 일관성을 향상시킵니다.

문제 :

  • 매개변수 스니핑 비효율적인 계획이 초래될 수 있습니다.
  • 플랜 캐시가 너무 커지면 메모리가 소모될 수 있습니다.

완화: OPTION (RECOMPILE) or OPTIMIZE FOR UNKNOWN 매개변수가 매우 다양합니다.


33) 매개변수 스니핑이란 무엇이며, 성능에 어떤 영향을 미칠 수 있나요?

매개변수 스니핑은 SQL Server가 쿼리를 처음 실행할 때 매개변수 값을 사용하여 계획을 생성한 후 재사용하는 경우 발생합니다. 이는 이후 실행에 적합하지 않더라도 마찬가지입니다.

시나리오 예 :

  • 첫 번째 실행: 작은 데이터 세트 → 인덱스 탐색 계획.
  • 다음 실행: 대용량 데이터 세트 → 동일한 계획을 재사용하지만 느림.

솔루션 :

  1. OPTION (RECOMPILE) 새로운 계획을 세우기 위해.
  2. 로컬 변수를 사용하여 매개변수 값을 마스크합니다.
  3. OPTIMIZE FOR or OPTIMIZE FOR UNKNOWN.

매개변수 스니핑은 T-SQL의 성능을 예측할 수 없게 만드는 가장 큰 실제 원인 중 하나입니다.


34) SQL Server에서 쿼리 성능을 어떻게 모니터링하고 분석하나요?

다양한 도구와 DMV를 사용하여 성능을 프로파일링하고 조정할 수 있습니다.

  • 실행 계획: Ctrl + M SSMS 또는 sys.dm_exec_query_plan.
  • DMV:

    • sys.dm_exec_query_stats – CPU 및 지속 시간.
    • sys.dm_exec_sql_text – SQL 텍스트.
    • sys.dm_exec_requests – 활성 쿼리.
  • 성능 모니터 및 확장 이벤트 장기적으로 trac왕.

예:

SELECT TOP 5
    total_worker_time / execution_count AS AvgCPU,
    total_elapsed_time / execution_count AS AvgTime,
    SUBSTRING(qt.text, 1, 100) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgTime DESC;

35) 쿼리 최적화에서 통계의 역할을 설명하세요.

통계는 최적화 프로그램이 기수를 추정하는 데 사용하는 데이터 분포(예: 고유 값, 밀도, 히스토그램)를 설명합니다.

통계가 오래되면 SQL Server가 좋지 않은 계획을 선택할 수 있습니다.

주요 명령:

  • UPDATE STATISTICS Employees;
  • sp_updatestats;
  • 자동 업데이트 설정: 기본적으로 활성화되어 있습니다.

모범 사례:

  • 유지 AUTO_UPDATE_STATISTICS 사용하도록 설정되었습니다.
  • 테이블이 큰 경우 수동 업데이트를 예약하세요.
  • FULLSCAN 중요한 인덱스의 경우.

오래된 통계는 성과를 조용히 죽이는 살인자입니다.


36) 인덱스 검색과 인덱스 스캔의 차이점은 무엇입니까?

Opera기 기술설명 성능 적용 사례
인덱스 탐색 일치하는 행으로 직접 이동합니다. 빠른 매우 선택적인 쿼리
인덱스 스캔 모든 인덱스 항목을 순차적으로 읽습니다. 느린 낮은 선택성 쿼리

예:

SELECT * FROM Orders WHERE OrderID = 123; -- Seek
SELECT * FROM Orders WHERE Status = 'Active'; -- May Scan

최적화 팁: 스캔을 검색으로 전환하려면 필터링된 인덱스나 커버링 인덱스를 만듭니다.


37) 분할 테이블과 그 장점을 설명하세요.

파티셔닝은 큰 테이블을 작고 관리하기 쉬운 조각(파티션)으로 나누는 작업으로, 대개 범위 열(날짜 등)을 기준으로 합니다.

이점:

  • 더 빠른 데이터 관리(파티션별 로드/언로드).
  • 대규모 데이터 세트에 대한 쿼리 성능이 향상되었습니다.
  • 분할된 스캔에 대한 병렬 처리.

예:

CREATE PARTITION FUNCTION pfRange (DATETIME)
AS RANGE LEFT FOR VALUES ('2022-12-31', '2023-12-31');

사용 사례 : 오래된 파티션을 효율적으로 보관할 수 있는 수십억 개의 행을 처리하는 데이터웨어하우스입니다.


38) 재귀적 CTE란 무엇이고, 어떤 한계가 있나요?

A 재귀적 공통 테이블 표현식(CTE) 일반적으로 조직도나 트리 구조와 같은 계층적 데이터에 대한 참조입니다.

예:

WITH EmployeeCTE AS (
    SELECT EmpID, ManagerID, EmpName FROM Employees WHERE ManagerID IS NULL
    UNION ALL
    SELECT e.EmpID, e.ManagerID, e.EmpName
    FROM Employees e
    INNER JOIN EmployeeCTE c ON e.ManagerID = c.EmpID
)
SELECT * FROM EmployeeCTE;

제한 사항 :

  • 기본 재귀 제한 = 100 수준.
  • 재귀 깊이가 높으면 성능 문제가 발생할 수 있습니다.
  • OPTION (MAXRECURSION n) 한도를 조정합니다.

39) SQL Server는 트랜잭션에서 발생하는 오류를 내부적으로 어떻게 처리합니까?

거래 내에서 오류가 발생하는 경우:

  • 만약에 심각한(수준 > 20), 연결이 즉시 종료됩니다.
  • If 심각하지 않은, 그것은 잡힐 수 있습니다 TRY...CATCH.

예:

BEGIN TRY
    BEGIN TRANSACTION;
    UPDATE Accounts SET Balance -= 500 WHERE ID = 1;
    INSERT INTO AuditLog VALUES ('Debit');
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION;
    PRINT ERROR_MESSAGE();
END CATCH;

최고의 연습: 오류 회복성을 위해 항상 DML을 TRY…CATCH로 감싸세요.


40) 고급 T-SQL 성능 튜닝 기술에는 어떤 것이 있나요?

  1. 스칼라 UDF를 피하세요 SELECT에서 인라인 함수가 더 빠릅니다.
  2. 필터링된 인덱스 사용 인덱스 크기를 줄이려면.
  3. 메모리 내 OLTP 활용(Hekaton) 높은 동시성 시스템을 위해.
  4. 배치 모드 실행 분석을 위한 컬럼스토어 인덱스에 관하여.
  5. 암묵적 변환 제거 데이터 유형을 일치시켜서.
  6. 쿼리 저장소 사용 역사적 계획을 비교합니다.

암묵적 변환을 감지하는 예:

SELECT * FROM sys.dm_exec_query_stats CROSS APPLY sys.dm_exec_query_plan(plan_handle)
WHERE CAST(query_plan AS NVARCHAR(MAX)) LIKE '%CONVERT_IMPLICIT%';

성능 튜닝은 일회성 이벤트가 아닌 지속적인 프로세스입니다.


41) SQL Server에서 가장 많은 리소스를 소모하는 쿼리를 어떻게 식별할 수 있나요?

과거 실행 통계를 기록하는 동적 관리 뷰(DMV)를 사용하여 비용이 많이 드는 쿼리를 식별할 수 있습니다.

예:

SELECT TOP 10
    total_logical_reads / execution_count AS AvgReads,
    total_worker_time / execution_count AS AvgCPU,
    total_elapsed_time / execution_count AS AvgDuration,
    SUBSTRING(qt.text, 1, 200) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgCPU DESC;

주요 측정 항목 :

  • AvgCPU: 실행당 평균 CPU 시간.
  • AvgReads: I/O 강도.
  • AvgDuration: 실행 지연 시간.

이러한 접근 방식은 사용자가 성능 저하를 알아차리기 전에 DBA가 무거운 쿼리를 분리하는 데 도움이 됩니다.


42) SQL Server에서 누락된 인덱스를 어떻게 감지하고 수정할 수 있나요?

SQL Server는 자동으로 tracDMV를 통한 ks 누락 인덱스 권장 사항.

예:

SELECT
    migs.user_seeks AS Seeks,
    mid.statement AS TableName,
    mid.equality_columns,
    mid.inequality_columns,
    mid.included_columns
FROM sys.dm_db_missing_index_details mid
JOIN sys.dm_db_missing_index_groups mig ON mid.index_handle = mig.index_handle
JOIN sys.dm_db_missing_index_group_stats migs ON mig.index_group_handle = migs.group_handle
ORDER BY migs.user_seeks DESC;

모범 사례:

  • 먼저 높은 검색 인덱스를 우선시합니다.
  • 생성하기 전에 실행 계획을 통해 확인하세요.
  • 과도한 인덱싱은 피하세요. 쓰기 속도가 느려집니다.

43) 데이터베이스 미러링, 복제 및 로그 전송의 차이점은 무엇입니까?ping?

제품 특장점 목적 실시간 장애 조치 복잡성
미러링 고가용성 데이터베이스 복사 가능 Automatic 중급
복제 데이터베이스 간 데이터 분포 일부의 Manual 높음
통나무배ping 백업 기반 DR 전략 아니 Manual 높음

사용 지침:

  • 미러링 → OLTP 고가용성 시스템.
  • 복제 → 분산 보고.
  • 통나무배ping → 재해 복구 설정.

44) SQL Server에서 차단 문제를 어떻게 해결하나요?

차단은 한 프로세스가 다른 프로세스에 필요한 잠금을 보유할 때 발생합니다.

차단 요소를 식별하려면:

SELECT
    blocking_session_id AS Blocker,
    session_id AS Blocked,
    wait_type,
    wait_time,
    wait_resource
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

솔루션 :

  • 거래 시간을 줄이세요.
  • 스냅샷 격리를 사용합니다.
  • 잠금을 최소화하기 위해 쿼리를 조정합니다.
  • 장기 실행 중인 미처리 거래를 식별합니다. DBCC OPENTRAN.

45) SQL Server의 쿼리 저장소는 성능 튜닝에 어떻게 도움이 되나요?

Query Store는 쿼리 텍스트, 계획 및 런타임 통계를 캡처하여 다음을 가능하게 합니다. 계획 회귀 분석.

이는 계획 변경으로 인해 쿼리가 갑자기 느려지는 경우를 식별하는 데 도움이 됩니다.

예:

SELECT q.query_id, p.plan_id, rs.avg_duration
FROM sys.query_store_query q
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
ORDER BY rs.avg_duration DESC;

이점:

  • 과거 계획을 비교해보세요.
  • 좋은 계획을 강제로 실행하세요.
  • Track 성능 추세는 시간에 따라 변화합니다.

46) T-SQL 애플리케이션에서 SQL 주입을 방지하려면 어떻게 해야 합니까?

1차 방어수단:

  1. 매개변수화된 쿼리 를 통해 sp_executesql.
  2. 모든 사용자 입력을 검증하고 정리합니다.
  3. 동적 SQL 연결을 피하세요.
  4. 고용 최소 권한 원칙 데이터베이스 계정의 경우

보안 예:

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT * FROM Employees WHERE Dept = @Dept';
EXEC sp_executesql @sql, N'@Dept NVARCHAR(50)', @Dept = 'HR';

SQL 주입은 애플리케이션 수준이지만, DBA는 저장 프로시저와 로그를 감사해야 합니다. 매개변수화되지 않은 실행을 위해.


47) 심층적인 성능 모니터링을 위해 확장 이벤트를 어떻게 활용하나요?

XEvents(Extended Events)는 경량 성능 모니터링 프레임워크로, SQL을 대체할 수 있는 현대적인 대안입니다. Trace.

예:

CREATE EVENT SESSION TrackQueries
ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(WHERE duration > 1000)
ADD TARGET package0.event_file (SET filename = 'C:\Temp\QueryMonitor.xel');
ALTER EVENT SESSION TrackQueries ON SERVER STATE = START;

사용 사례:

  • 높은 CPU 쿼리를 모니터링합니다.
  • 교착 상태나 누락된 인덱스를 포착합니다.
  • 최소한의 오버헤드로 프로덕션 환경에서 장기 실행 명령문을 프로파일링합니다.

48) 필터링된 인덱스란 무엇이고, 언제 사용해야 합니까?

필터링된 인덱스는 필터 조건을 만족하는 행의 하위 집합만 인덱싱하여 성능을 향상시키고 저장 공간을 줄입니다.

예:

CREATE INDEX IX_ActiveEmployees
ON Employees (Department)
WHERE Status = 'Active';

이점:

  • 더 작은 인덱스 크기.
  • 더 빠른 유지관리.
  • 선택적 쿼리에 최적화되었습니다.

최고의 대상: 데이터 분포가 왜곡된 열(예: 활성 레코드 대 비활성 레코드).


49) SQL Server 환경 간에 데이터를 안전하게 마이그레이션하려면 어떻게 해야 합니까?

안전한 데이터 마이그레이션에는 다음 사항에 대한 계획이 필요합니다. 일관성, 가동 중지 시간 및 롤백.

모범 사례:

  1. 트랜잭션 복제 or 변경 데이터 캡처(CDC) 라이브 동기화를 위해.
  2. 제약 조건과 트리거를 일시적으로 비활성화합니다.
  3. BCP or SSIS 대량 데이터 전송을 위해.
  4. 행 개수와 체크섬을 검증합니다.
  5. 항상 마이그레이션 후 무결성 검사를 실행하세요.DBCC CHECKDB).

예:

bcp Database.dbo.Table out TableData.dat -n -S Server -T

스테이징에서 마이그레이션 스크립트를 테스트하는 것은 협상할 수 없습니다.


50) 매개변수 민감 쿼리(PSQ) 문제를 어떻게 식별하고 해결합니까?

매개변수에 민감한 쿼리는 매개변수 값에 따라 일관성 없이 수행됩니다. 이는 현실 세계에서 흔히 발생하는 문제입니다.

발각: 쿼리 저장소 or sys.dm_exec_query_stats 하나의 쿼리에 대해 여러 계획을 식별합니다.

해결 전략:

  1. 옵션(재컴파일) 각 실행에 대해.
  2. 알 수 없는 것에 대한 최적화 일반적인 계획을 세우려면.
  3. 만들기 계획 가이드 최적의 실행 경로를 강제로 적용합니다.
  4. 쿼리 힌트 필요한 경우에만.

매개변수에 민감한 문제는 계획 안정성과 성과 예측 가능성 간의 균형을 맞춰야 합니다.

🔍 실제 시나리오와 전략적 대응을 포함한 주요 T-SQL 면접 질문

1) T-SQL에서 INNER JOIN과 LEFT JOIN의 차이점은 무엇입니까?

후보자에게 기대하는 것: 면접관은 조인 작업에 대한 이해도와 SQL 쿼리에서 데이터 관계를 관리하는 방법을 평가하고 싶어합니다.

예시 답변: An INNER JOIN 두 테이블 모두에서 일치하는 값이 있는 행만 반환하는 반면, LEFT JOIN 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다. 일치하는 행이 없으면 오른쪽 테이블의 열에 대해 NULL 값이 반환됩니다. 이러한 구분은 데이터베이스에서 부분 관계 또는 선택적 관계를 사용할 때 매우 중요합니다.


2) T-SQL에서 테이블의 중복 레코드를 식별하고 제거하려면 어떻게 해야 합니까?

후보자에게 기대하는 것: 면접관은 당신이 윈도우 함수와 CTE를 사용해 데이터 품질 문제를 처리할 수 있는 능력을 가지고 있는지 보고 싶어합니다.

예시 답변: 나는 CTE(Common Table Expression)를 다음과 결합하여 사용할 것입니다. ROW_NUMBER() 중복 항목을 식별하는 함수입니다. 예:

WITH CTE AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS rn
  FROM MyTable
)
DELETE FROM CTE WHERE rn > 1;

이 접근 방식은 각 그룹에 대해 고유한 레코드를 하나씩 유지하면서 중복을 제거하는 데 도움이 됩니다.


3) CTE(공통 테이블 표현식)가 무엇이고, 언제 사용하는지 설명해 주시겠습니까?

후보자에게 기대하는 것: 면접관은 질의 구조화와 임시 결과 집합에 대한 지식을 확인하고 있습니다.

예시 답변: CTE는 단일 쿼리의 실행 범위 내에 정의된 임시 결과 집합입니다. 복잡한 조인과 하위 쿼리를 단순화하고, 가독성을 향상시키며, 재귀 쿼리를 가능하게 하는 데 유용합니다. 이전 직책에서는 다단계 집계 논리를 유지 관리하기 쉬운 구성 요소로 분해하기 위해 CTE를 자주 사용했습니다.


4) T-SQL 쿼리에서 성능 튜닝을 어떻게 처리하시나요?

후보자에게 기대하는 것: 면접관은 쿼리 최적화 및 성능 문제 해결에 대한 경험을 평가하고 싶어합니다.

예시 답변: 먼저 실행 계획을 검토하여 테이블 스캔이나 비용이 많이 드는 조인과 같은 느린 작업을 파악합니다. 그런 다음 누락된 인덱스, 중복된 하위 쿼리 또는 비효율적인 조인을 확인합니다. 또한 통계를 분석하고 커버링 인덱스 또는 필터링된 인덱스와 같은 인덱싱 전략을 사용하여 성능을 향상시킵니다. 마지막으로 쿼리 로직을 검토하여 행 단위 처리가 아닌 집합 기반 작업을 활용하는지 확인합니다.


5) 운영 환경에서 느리게 실행되는 쿼리를 디버깅해야 했던 경험을 설명해 주세요. 어떤 조치를 취하셨나요?

후보자에게 기대하는 것: 이 행동 질문은 실제 세계에서의 문제 해결 능력과 의사소통 능력을 평가합니다.

예시 답변: 이전 직책에서 보고서 쿼리 실행에 20분 이상 걸렸습니다. 실행 계획을 분석한 결과, 조인 중 하나에 외래 키 열에 대한 인덱스가 누락되어 있음을 발견했습니다. 인덱스를 생성하고 통계를 업데이트한 후 쿼리 실행 시간이 30초 미만으로 단축되었습니다. 또한 향후 유사한 문제가 발생하지 않도록 수정 사항을 문서화하고 팀과 공유했습니다.


6) 임시 테이블과 테이블 변수는 무엇이며, 어떻게 다릅니까?

후보자에게 기대하는 것: 면접관은 T-SQL의 임시 데이터 저장 옵션에 대한 이해도를 테스트하고 있습니다.

예시 답변: 임시 테이블(#TempTable)는 tempdb 데이터베이스에 생성되며 인덱스, 제약 조건 및 통계를 지원합니다. 테이블 변수(@TableVar)은 메모리에 저장되고 통계 지원이 제한적이어서 소규모 데이터 세트에 적합합니다. 임시 테이블은 대규모 또는 복잡한 데이터 세트에 더 적합하며, 테이블 변수는 작고 유지 기간이 짧은 데이터에 더 효율적입니다.


7) T-SQL에서 오류 처리와 트랜잭션을 어떻게 처리하시겠습니까?

후보자에게 기대하는 것: 면접관은 거래 무결성과 예외 처리에 대한 이해도를 확인하고 있습니다.

예시 답변: 나는 사용한다 BEGIN TRANSACTION, COMMIT예산 및 ROLLBACK 데이터 일관성을 보장하기 위한 문장입니다. 또한 다음을 포함합니다. TRY...CATCH 오류를 원활하게 처리하는 블록입니다. 예:

BEGIN TRY
  BEGIN TRANSACTION
    -- SQL operations here
  COMMIT TRANSACTION
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION
  PRINT ERROR_MESSAGE()
END CATCH

이 방법을 사용하면 오류가 발생해도 일부 데이터만 업데이트되는 것을 방지할 수 있습니다.


8) T-SQL에서 윈도우 함수를 어떻게 사용하나요? 예를 들어주시겠어요?

후보자에게 기대하는 것: 면접관은 지원자가 고급 분석 질문에 얼마나 능숙한지 평가하고 싶어합니다.

예시 답변: 윈도우 함수를 사용하면 데이터를 축소하지 않고 현재 행과 관련된 행 집합에 대한 계산을 수행할 수 있습니다. 예:

SELECT 
  EmployeeID, 
  Salary,
  RANK() OVER (ORDER BY Salary DESC) AS SalaryRank
FROM Employees;

이를 통해 급여를 기준으로 직원에게 순위 번호를 부여하여 성과 추세를 쉽게 분석할 수 있습니다.


9) 복잡한 T-SQL 프로젝트에 참여했던 경험과 그 프로젝트에서 어떻게 과제에 접근했는지 말씀해 주세요.

후보자에게 기대하는 것: 면접관은 경험, 문제 해결 능력, 팀워크에 대한 깊이를 찾습니다.

예시 답변: 이전 직장에서는 T-SQL 저장 프로시저를 사용하여 데이터웨어하우스 ETL 파이프라인을 구축했습니다. 당시 과제는 대용량 데이터를 효율적으로 처리하는 것이었습니다. 분할된 테이블, 증분 로드, 그리고 일괄 처리를 통해 쿼리를 최적화했습니다. 또한 BI 팀과 협력하여 일관된 스키마 디자인을 확보하고 보고 속도를 40% 이상 향상시켰습니다.


10) 자신이 작성한 저장 프로시저로 인해 프로덕션 환경에서 교착 상태가 발생하는 상황을 어떻게 처리하시겠습니까?

후보자에게 기대하는 것: 면접관은 지원자의 위기 관리 능력과 기술적 인식 능력을 테스트하고 있습니다.

예시 답변: 먼저 SQL Server를 사용하여 교착 상태를 식별합니다. sys.dm_tran_locks 교착 상태 그래프를 분석했습니다. 그런 다음 리소스 접근 순서를 분석하고 일관된 순서로 잠금을 획득하도록 절차를 리팩토링했습니다. 이전 직장에서는 영향을 받은 트랜잭션에 대한 재시도 로직을 구현하고, 유사한 패턴을 조기에 감지하기 위해 정기적인 모니터링을 예약했습니다.

이 게시물을 요약하면 다음과 같습니다.