데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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 설정한다.

 

 

 

[참고자료]

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2017/11/28/asp-net-session-state-with-sql-server-in-memory-oltp/

 

 

 

 

2018-06-18 / Sungwook Kang / http://sqlmvp.kr

 

SQL Server, ASP.NET, In-Memory OLPT, Session State, SqlSessionStateProviderAsync, SqlSesstionStateStore, 세션 상태 저장, MS SQL



출처: https://sqlmvp.tistory.com/1256?category=618825 [Database Lab]
No. Subject Author Date Views
2150 SQL Server 2019 에서 업그레이드된sp_estimate_data_compression_savings 프로시저 (컬럼스토어 압축율 예상) jevida(강성욱) 2019.03.26 521
2149 SQL Server 2019 에서 추가된sys.dm_db_page_info, sys.fn_PageResCracker 기능으로 대기 관련 정보 확인 jevida(강성욱) 2019.03.26 751
2148 SQL Server 2019에서 향상된 Rowstore batch mode jevida(강성욱) 2019.03.26 415
2147 SQL Server 2016부터 도입된 USE HINT를 사용한 추적 플래그 활성화 jevida(강성욱) 2019.03.26 433
2146 In-memory optimized table에 사용되는 Hash Index jevida(강성욱) 2019.03.26 387
2145 VM환경에서 AG를 구성하였을때VSS 백업 동작 변경 jevida(강성욱) 2019.03.25 394
2144 SQL Server 2016 향상된 가용성 그룹 – 데이터베이스 수준의 상태 탐지 장애조치 jevida(강성욱) 2019.03.25 417
2143 SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size jevida(강성욱) 2019.03.25 307
2142 SQL Server 설치시 발생하는 1638 오류 jevida(강성욱) 2019.03.25 409
2141 SQL Server 666코드의 고유 식별자 오류 jevida(강성욱) 2019.03.25 293
2140 SQL Server AlwaysOn synchronous-commit 환경에서 동기화 레이턴시 트러블슈팅 jevida(강성욱) 2019.03.25 348
2139 SQL Server Scheduling and Yielding 트러블슈팅 jevida(강성욱) 2019.03.25 349
2138 SQL Server 2016 Tempdb 경합(contention) 최적화 jevida(강성욱) 2019.03.25 431
2137 XEvent를 사용하여 Auto tuning 작업 모니터링 jevida(강성욱) 2019.03.25 442
» SQL Server In-Memory OLTP에 ASP.NET 세션 상태 저장하기 jevida(강성욱) 2019.03.25 349
2135 SQL Server에서 JSON 데이터 저장하기 jevida(강성욱) 2019.03.25 414
2134 Azure SQL에서 네트워크를 구성하는 방법 jevida(강성욱) 2019.03.25 231
2133 SQL Server 네이티브 컴파일된 저장 프로시저 성능 모니터링 jevida(강성욱) 2019.03.25 435
2132 SQL Server 2017 소규모 시스템에서 향상된 리소스 사용 jevida(강성욱) 2019.03.25 256
2131 클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭 jevida(강성욱) 2019.03.25 392





XE Login