2011-10-06 2 views
1

내 현재 asp.net 응용 프로그램에서 을 SQL server에 저장합니다. InProc을 지정하면 세션은 서버 메모리에 보관되지만, out of proc (내 경우에는) 세션은 SQL 서버에 보관됩니다.out of proc에 대한 세션 변수가 메모리 문제를 일으 킵니까?

정말 사실입니까? 세션 액세스 (기본적으로 모든 페이지 요청)가 필요한 모든 요청에서 내가 읽은 것부터 db에서 세션을 deserialize하고 요청이 완료되면 다시 저장합니다. 즉, 일단 값이 검색되면 값이 웹 서버에 보관됩니다. 이 점이 InProc과 어떻게 다른가요?

Out of Proc의 경우, 하나의 세션 변수가 요청 될 때만 해당 세션 변수를 검색합니까? 그렇지 않으면 InProc과 같은 것처럼 들립니다. 나는 무엇이 없는가.

+0

(팜 문제/프로세스 문제 등으로 인해) 세션 세션 관리를 필요로하는 경우 StateServer 모드 (서버의 어딘가에서 실행되는 특별한 서비스로 메모리에 저장 됨)를 고칠 수 있습니다.) – dlev

+0

네,하지만 요점은 주로 요청 기간 동안 만 서버가 다른 모드에 대한 메모리에 세션 변수를 가지고 있다고 말합니다. –

+0

음, 물론. 코드가 IIS 작업자 프로세스의 서버 노드에서 실행 중입니다. 어떤 시점에서 그 프로세스는 메모리에있는 데이터를 필요로합니다. 어떻게 다른 방법으로 작동 할 수 있습니까? – dlev

답변

4

정말입니까?

네, 맞습니다.

내가 (기본적으로 모든 페이지 요청) 세션 액세스 을 필요로 모든 요청과 함께, 읽은 것을에서

는 DB에서 세션을 역 직렬화하고 요청이 완료되면 다시 저장합니다. 즉, 값이 검색되면 웹 서버에 보관됩니다. 은 InProc과 어떻게 다른가요?

값은 HTTP 요청이 지속되는 동안에 만 메모리에 저장됩니다. 요청을 시작할 때 SQL Server에서로드되고 요청이 끝나면 SQL Server에 저장됩니다. 이것은 요청간에 값이 메모리에 유지되는 InProc과 다릅니다. 또한 동일한 사용자의 여러 요청이 서버 팜의 다른 노드에서 제공 될 수 있으므로 SQL Server를 사용하면 팜의 모든 노드가 동일한 세션 값을 공유하게됩니다.

+0

서버가 분당 많은 요청을 받았다고 가정하면 동일한 효과가 발생하지 않을 것입니다. 요청이 지속되는 동안 서버 메모리에는 세션 변수가 포함됩니다. 너무 많은 트래픽이있는 사이트의 경우 proc 중 더 많은 오버 헤드가 추가된다고 생각합니다. 네, 노드가 여러 개인 경우 옵션이 없습니다. –

+0

@AlexJ, 세션 당 값이로드됩니다. 따라서 서버가 서로 다른 사용자로부터 많은 트래픽을 받으면 각 요청은 SQL Server에서 해당 세션 값을 가져옵니다. 물론 SQLState는 InProc에 비해 오버 헤드를 추가합니다. 그러나 웹 팜을위한 가장 강력한 솔루션입니다. 또한 세션이 특수 서버의 메모리에 저장되는 웹 팜의 StateServer를 사용할 수 있으며 SQLState에 비해 빠르지 만 안정성은 낮습니다. –

관련 문제