SQL Server In-Memory OLTP에 ASP.NET 세션 상태 저장하기
· Version : SQL Server, ASP.NET
SQL Server In-Memory OLTP에 ASP.NET의 세션 상태를 저장하는 방법에 대해서 알아본다. ASP.NET 에서 세션 상태를 사용하면 사용자가 웹 응용 프로그램을 구성하는 다른 ASP.NET 페이지를 탐색할때, 사용자 값을 저장하고 검색할 수 있다. 현재 ASP.NET에는 Microsoft ASP.NET 세션 상태 모듈과 세션 상태 데이터 원본 간의 인터페이스를 제공하는 세 가지 세션 공급자가 있다.
· InProcSesstionStateStore : ASP.NET 작업자 프로세스의 메모리에서 세션 상태를 저장
· OutOfProcSesstionSaateStore : 외부 서버 프로세스의 메모리에 세션 상태를 저장
· SqlSessionStateStore : Microsoft SQL Server 데이터베이스에 세션 상태를 저장
이번 포스트에서는 SqlSesstionStateStore 공급자를 다루며 세션 데이터 저장소 옵션으로 SQL Server In-Memory OLTP를 사용하도록 구성하는 방법에 대해서 살펴 본다. SqlSesstionStateStore를 구성하기 위해서는 최신의 ASP.NET Async 버전의 Session State provider사용 하거나 이전 버전의 공급자 환경에서 사용할 수 있도록 Github 저장소에서 In-Memory OLTP SQL을 다운로드하여 script로 구성할 수 있다.
[최신의 ASP.NET async SQL Session State provider]
Microsoft ASP.NET 팀은 SQL Server를 세션데이터 저장소로 사용할 수 있도록 비동기를 지원하는 SqlSessionState provider를 출시 했다. 이 버전의 공급자에는 기본적으로 재시도 로직이 추가되어 제공되며, In-Memory OLTP 및 일반적인 Disk 테이블을 지원한다. 아래 단계에 따라 공급자를 설치하고 SQL Server In-Memory OLTP를 사용하도록 구성할 수 있다.
1. Nuget에서 최신 Microsoft ASP.NET Async SqlSessionState Provider 를 설치한다. 웹 프로젝트의 .NET framework 4.6.2 이상 버전 이어야 한다.
2. 프로젝트의 Web.config 파일에서 SqlSessionStateProviderAsync 요소에 다음 특성을 추가하여 In-Memory OLTP를 사용하고 재시도 횟수와 재시도 간격(ms)을 설정한다.
· UseInMemoryTable : In-Memory OLPT의 경우 값을 true로 설정하고 디스크 기반의 테이블 경우 false로 설정한다.
· RetryInterval : 재시도 간격 시간(ms)을 설정한다.
3. 세션 상태를 저장하는데 사용중인 SQL Server 데이터베이스에 대해 다음 T-SQL명령을 실행하여 데이터베이스 격리 수준을 스냅숏으로 설정한다.
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON; |
참고로 UseInMemoryTable, ReteryInterval 및 MaxRetryNumber 특성값을 설정하지않은 경우 공급자는 RetryInterval 및 MaxRetryNumber의 기본값을 아래 표 값으로 설정한다.
SQL Server Option |
ReteryInterval (ms) |
MaxRetryNumber |
In-Memory OLTP |
1 |
10 |
Disk based table |
1000 |
10 |
[이전 버전의 ASP.NET Session State provider 사용]
최신 버전의 SqlSessionStateStore 공급자로 업그레이드 할 수 없는 경우 아래 단계를 수행하여 In-Memory OLTP를 사용하도록 이번 버전의 ASP.NET 세션 상태 공급자를 구성 할 수 있다.
1. Github에서 aspstate_sql2016(no retry logic : https://github.com/Microsoft/sql-server-samples/blob/master/samples/applications/aspnet-session-state/aspstate_sql2016_with_retry.sql) 또는 aspnet_sql2016(with retry login : https://github.com/Microsoft/sql-server-samples/blob/master/samples/applications/aspnet-session-state/aspstate_sql2016_with_retry.sql)중 하나를 다운로드하여 실행 한다.
2. 웹 프로젝트의 .NET framework 버전을 4.5 이상으로 설정한다.
3. Web.config에서 sql 세션 상태 공급자를 사용하도록 수정한다.
· Mode : SQL Server로 설정하여 세션 상태가 SQL Server에 저장되었음을 나타낸다.
· SQL Server에 대한 연결 문자열을 지정하도록 SqlConnectionString을 설정한다.
[참고자료]
2018-06-18 / Sungwook Kang / http://sqlmvp.kr
SQL Server, ASP.NET, In-Memory OLPT, Session State, SqlSessionStateProviderAsync, SqlSesstionStateStore, 세션 상태 저장, MS SQL
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server 2016 Tempdb 경합(contention) 최적화 (0) | 2019.03.25 |
---|---|
XEvent를 사용하여 Auto tuning 작업 모니터링 (0) | 2019.03.25 |
SQL Server에서 JSON 데이터 저장하기 (0) | 2019.03.25 |
Azure SQL에서 네트워크를 구성하는 방법 (0) | 2019.03.25 |
SQL Server 네이티브 컴파일된 저장 프로시저 성능 모니터링 (0) | 2019.03.25 |