에러 해결 및 이슈 공유

MSSQL 갑작스러운 특정 사용자의 DB 접근 불가 현상, 쿼리가 너무 복잡합니다.

하나의묵 2023. 1. 3. 18:10

오늘은 다급한 마음을 저도 알기 때문에 해결책 먼저 작성합니다

----------------------------------------------------------------------------------------------------------------------------------------------

일단 저는 MSSQL을 사용하고 아래 문제는 스칼라 UDF 인라인사용 관련 DB호환성 레벨 문제 였습니다.

 

DB서버 데이터 깨짐확인, DB서버 SQL Server 구동확인, DB서버의 다른계정 정상작동 확인DB서버 백업용량 확인, DB서버 트랜젝션 로그 용량확인 등등 모든 것을 확인했는데

 

정확한 로그는 기억안나지만 'XX' 쿼리가 너무 복잡합니다 간단하게 바꾸세요. 혹은 DB 커넥션을 하지못했습니다. 같은 메시지가 뜬다면 다음과 같이 해보시기 바랍니다.

 

1. DB호환성 레벨 변경하기

   ALTER DATABASE [TestdrbitPack6] SET COMPATIBILITY_LEVEL = 150;

 

2-1. 해당 디비에 적용

   ALTER DATABASE SCOPED CONFIGURATION SET TSQL_SCALAR_UDF_INLINING = OFF;

 

2-2. 쿼리별 개별 적용

   OPTION (USE HINT('DISABLE_TSQL_SCALAR_UDF_INLINING'))

 

참고 사이트 

https://learn.microsoft.com/ko-kr/sql/relational-databases/user-defined-functions/scalar-udf-inlining?view=sql-server-ver16 

 

Microsoft SQL Server의 스칼라 UDF 인라인 처리 - SQL Server

스칼라 UDF 인라인 처리 기능은 SQL Server(SQL Server 2019부터)에서 스칼라 UDF를 호출하는 쿼리의 성능을 향상하기 위한 것입니다.

learn.microsoft.com

----------------------------------------------------------------------------------------------------------------------------------------------

 

이제 작년이 된 2022년 회사에서 송년회를 하던 당일. CS팀에서 전달된 한 건의 에러...

바로 특정 계정에서 로그인이 안된다는 소식 이었습니다.

 

제가 개발 중인 프로그램은 계정 그룹별로 DB가 따로 세팅되어 있기때문에 해당 계정에서

사용하는 DB에 문제가 발생하게 되면 특정 병원의 계정들만 로그인이 안될 수가 있었습니다.

 

최근 들어 네이버 클라우드쪽에 올라가있는 DB서버에서 SQL Server 서비스가 다운되거나, DB서버 자체에

연결을 하지못해 장애가 발생하여 DB서버를 재부팅하는 일이 발생했었기 때문에, 오늘도 재부팅을 하면

해결될 줄 알고있었던 저희 개발팀..

 

송년회 시작과 함께 개발팀은 NCP(네이버 클라우드 플랫폼)에서 사용 중인 DB Server와 

프로그램 내부에서 사용중인 소스, 쿼리, 프로시저 등을 확인 했지만, 결국 9시까지 문제를 찾지못했습니다.

결국 야근을 선언하고.. 최후의 결전을 위해 준비된 식당으로가서 간단하게 음식을 먹고 다시 

문제를 확인했습니다.

 

10시, 11시 ... 시간이 갈수록 초조해지고, 소스코드 문제도 아니고, 쿼리문제도 아니며 전체적인 문제도아니고

특정 계정(하필 제일큰 거래처 중 하나)에서 안된다고 하니 다음날들을 욕과 해지걱정... 등이 쌓여가며 개발팀도

지쳐가는 상황이었습니다.

 

새벽 2시쯤  트랜젝션로그 용량 초과와 마지막에 발견한 DB호환 레벨관련 둘중하나가 원인 일 것이라고 생각하고

먼저 트랜젝션 로그용량을 확인해봤는데.. 98.5%를 사용 중이었습니다. 당연히 저는 이 문제일 것이라고 생각하고

로그를 압축하는 방법을 사용하여 공간을 비웠지만,,.... 장애를 고치지 못했습니다.....

 

다들 침울해 있던 와중에 마지막으로 발견한 레벨관련해서 까지만이라도 적용해보자 라고 생각했고, 위에 작성해둔

내용을 적용한 결과..........새벽 3시 24분 우리는 드디어 해결했습니다.

 

여기까지가 지난 이야기이고, 이제 조금 기운을 회복하여 조금 씩 어떤 부분의 문제였는지 파악하고, 해당 부분에 대해

조금씩 학습하는 중입니다.

 

혹시나 같은 문제로 고생하시는 분이 있으실까봐 먼저 해결방법을 작성하고, 추후에 해당 장애에 관한 학습내용을 정리

하여 올릴 예정입니다.