Sitecore 세션 상태 성능 최적화 개요
Sitecore는 SQL Server의 TempDB를 활용하여 세션 상태(session state) 작업의 처리 속도를 크게 향상시킬 수 있습니다. 그러나 많은 개발자가 놓치기 쉬운 부분이 하나 있는데, 바로 SQL Server 서비스가 재시작될 때마다 TempDB가 초기화되어 다시 생성된다는 점입니다. 이로 인해 서비스가 재시작될 때마다 테이블 구조와 사용자 권한을 매번 다시 설정해 주어야 하는 번거로움이 발생합니다.
Sessions DB Performance Boost 스크립트의 위치와 역할
TempDB 기반 세션 저장에 필요한 테이블 구조와 저장 프로시저(Stored Procedure)를 생성하는 스크립트는 Sitecore 설치 압축 파일을 해제한 경로에서 찾을 수 있습니다.
Sitecore 8.1 rev. xxxxxx\Databases\Scripts\Sessions db performance boost.sql
이 스크립트는 Master 데이터베이스에 저장 프로시저를 생성하고, 해당 프로시저가 실행될 때 TempDB 안에 테이블과 인덱스 구조를 만들어 줍니다. 다만 한 가지 주의할 점은 이 스크립트만으로는 실제 데이터베이스 접근 권한이 설정되지 않는다는 것입니다. 따라서 테이블·인덱스 구조를 재초기화하고 사용자 권한까지 함께 재설정해 주는 T-SQL 스크립트를 추가로 작성해야 합니다. 아래 예제는 이미 Sessions db performance boost.sql을 실행했다는 전제 하에 작성되었습니다.
T-SQL 스크립트 예제
exec [master].[dbo].[Sitecore_InitializeSessionState] --create the tables and indexes in TempDB
USE [tempdb]
IF NOT EXISTS(select name from sys.database_principals where name = 'cdsAccount') --continue if the db user account does not exist
BEGIN
CREATE USER [cdsAccount] FOR LOGIN [sql1\cdsaccount] --create the db user in tempdb
ALTER ROLE [db_datareader] ADD MEMBER [cdsAccount] -- assign the data reader role to our db user
ALTER ROLE [db_datawriter] ADD MEMBER [cdsAccount] -- assign the data writer role to our db user
END
위 T-SQL 스크립트의 동작 흐름은 다음과 같습니다.
- 저장 프로시저
Sitecore_InitializeSessionState를 실행하여 TempDB 내부의 테이블과 인덱스 구조를 재초기화합니다. sys.database_principals카탈로그 뷰를 조회하여 데이터베이스 사용자 cdsAccount의 존재 여부를 확인합니다.- 해당 사용자가 존재하지 않는 경우에만 사용자를 새로 생성하고,
db_datareader와db_datawriter역할을 부여하여 읽기·쓰기 권한을 구성합니다.
SQL Agent Job으로 재시작 시 자동 적용하기
필요한 코드를 확보했다면, 남은 과제는 SQL Server 서비스가 재시작될 때 이를 어떻게 자동으로 적용하느냐입니다. 다행히 SQL Server 에이전트(SQL Agent)가 시작될 때 실행되도록 예약된 SQL Agent Job을 생성하면 이 문제를 간단히 해결할 수 있습니다.
참고로 잡 생성까지 포함한 완성형 .sql 스크립트를 저장소에서 제공하고 있으며, 리포지토리의 readme 파일에는 생성 및 검증하려는 데이터베이스 사용자 계정에 맞게 수정해야 하는 항목이 안내되어 있습니다. 이를 활용하면 환경별 계정명에 맞춰 손쉽게 커스터마이징할 수 있습니다.
함께 참고하면 좋은 자료
- T-SQL 스크립트 및 SQL Agent Job 샘플
- Sitecore 공식 문서: SQL Server 성능 최적화 가이드
- 데이터베이스 관련 추가 학습 자료
마무리
피드백 탭을 통해 의견을 남기거나 질문을 보내실 수 있으며, 언제든지 저희와 대화를 시작하실 수 있습니다.