디스크에서 읽기와 AppFabric 캐시에서 읽기 간의 성능 비교
이 샘플에서는 디스크를 사용하는 것보다 AppFabric 캐시를 사용하여 데이터를 저장하고 읽는 것이 훨씬 더 효율적이라는 것을 보여 줍니다.
이 샘플에서는 디스크 또는 캐시에서 파일에 액세스하려는 사용자 요청을 시뮬레이션하기 위해 많은 이미지 파일을 읽고, 이러한 이미지 파일을 서비스하는 데 걸린 시간을 비교합니다.
참고
샘플은 교육용으로만 제공됩니다. 프로덕션 환경에서 사용하도록 작성된 것은 아니며 프로덕션 환경에서 테스트되지 않았습니다. Microsoft는 이러한 샘플에 대한 기술 지원을 제공하지 않습니다.
사전 요구 사항
사용자는 Windows PowerShell 스크립팅에 대한 지식이 있어야 합니다.
이 샘플에서는 다음을 가정합니다.
Windows PowerShell 2.0이 설치되어 있습니다.
Windows Server용 Microsoft AppFabric 1.1이 설치되어 있습니다. 따라서 GAC에 필수 DLL이 추가되어 있습니다.
AppFabric 캐시 구성
아직 AppFabric 캐시를 구성하지 않은 경우 Windows Server용 Microsoft AppFabric 1.1 구성 도구를 사용하여 AppFabric 캐시를 구성합니다(기본 설정 사용). 이 샘플에서는 AppFabric 캐시가 기본 설정(cacheHostName=AppFabricCachingService and cacheName=default)을 사용하여 구성된다고 가정합니다.
캐시 클러스터 시작
관리자 모드에서 Windows PowerShell 명령 창을 열고 다음 명령을 실행하여 분산 캐시 관리 모듈을 추가합니다.
Import-Module DistributedCacheAdministration
다음 명령을 실행하여 캐시 클러스터에 클라이언트로 액세스할 수 있는 권한을 사용자 계정에 부여합니다. 사용자 이름과 도메인 이름을 제공합니다.
Grant-CacheAllowedClientAccount domain\username
Get-CacheAllowedClientAccounts 명령을 사용하여 액세스 권한이 사용자 계정에 부여되었는지 확인합니다.
Start-CacheCluster 명령을 사용하여 클러스터를 시작합니다.
이 샘플 빌드 및 실행
이 샘플은 GAC의 AppFabric 캐시 DLL(Microsoft.ApplicationServer.Caching.Client.dll 및 Microsoft.ApplicationServer.Caching.Core.dll)에 자동으로 연결합니다.
Visual Studio에서 DiskVersusCachePerformance.sln 솔루션을 엽니다.
명령 프롬프트를 열고 디렉터리를 <샘플 위치>\CacheVersusDiskPerformance\DiskVersusCachePerformance\bin\Debug로 변경합니다.
이 샘플에 하나의 명령줄 매개 변수인 파일 공유 디렉터리(DiskVersusCachePerformance 폴더의 일부) 경로를 전달해야 합니다. "명령줄 인수" 섹션의 프로젝트 속성에 이 매개 변수를 추가할 수도 있습니다.
다음과 같이 exe를 실행하여 샘플 테스트를 시작합니다.
<Location of the sample>\CacheVersusDiskPerformance\DiskVersusCachePerformance\bin\Debug> DiskVersusCachePerformance.exe ..\..\..\fileshare
파일 공유 폴더에 있는 useractions.xml 파일에 이 샘플이 수행한 작업이 설명되어 있습니다. 다음과 같은 작업이 지원됩니다.
작업 | 매개 변수 | 설명 |
---|---|---|
PageSize |
Size |
페이지 크기(읽을 파일 수) 설정 |
LogIn |
UserName |
사용자 로그인 |
LogOut |
UserName |
사용자 로그아웃 |
ViewAlbum |
AlbumIndex |
“album[Index]” 폴더로 이동 |
ViewPage |
PageIndex |
파일 읽기 [PageIndex*PageSize - PageIndex*(PageSize+1)-1] |
ViewNextPage |
해당 없음 |
다음 파일 집합으로 이동 [(PageIndex+1)*PageSize - PageIndex*(PageSize+2)-1] |
ViewPrevPage |
해당 없음 |
이전 파일 집합으로 이동 |
다음과 같이 일련의 작업이 정의될 수 있습니다.
<useraction> <action>PageSize</action> <data>500</data> </useraction>
<useraction> <action>LogIn</action> <data>tom</data> </useraction>
<useraction> <action>ViewAlbum</action> <data>0</data> </useraction>
<useraction> <action>ViewPage</action> <data>0</data> </useraction>
<useraction> <action>ViewNextPage</action> <data>null</data> </useraction>
<useraction> <action>ViewPrevPage</action> <data>null</data> </useraction>
<useraction> <action>LogOut</action> <data>tom</data> </useraction>
위의 세그먼트는 다음과 같이 해석됩니다.
페이지당 항목 수를 500으로 설정
tom 로그인(로그온한 사용자가 페이지에 액세스할 수 있도록 허용)
album0 선택
첫 번째 페이지 보기(디스크 또는 캐시에서 0-499개의 파일을 읽음)
다음 페이지 보기(디스크에서 500-999개의 파일을 읽으려고 시도)
이전 페이지 보기(파일이 캐시에 로드되었으므로 캐시에서 0-499개의 파일을 다시 읽음)
로그아웃(부여된 권한을 되돌림)
로그아웃할 때마다 이 샘플은 디스크에서 파일에 액세스할 때와 AppFabric 캐시에서 파일에 액세스할 때의 성능을 비교하여 보고합니다.
참고
이후에 이 샘플을 실행하는 경우 Restart-CacheCluster
명령을 사용하여 캐시를 지우고 10-15초 동안 기다립니다.
참고
이 샘플을 실행하는 동안 [size2_il.cur-DiskRead- error 2 Delay (ticks) 7128] 같은 메시지가 나타날 수 있습니다. 이 오류 메시지를 통해 FileInfo에 보고된 파일 크기와 디스크에서 읽은 실제 파일 크기가 다르다는 것을 알 수 있습니다. 그러나 캐시에 저장되어 있는 데이터의 크기와 디스크에서 읽은 데이터의 크기는 같기 때문에 이 차이는 무시해도 됩니다.
문제 해결
캐시에 데이터가 추가되지 않으면 캐시의 제거 정책 때문일 수 있습니다. 캐시에 제거 정책이 설정되지 않도록 하려면 다음 명령을 실행하여 기본 캐시를 제거하고 제거 정책이 없는 기본 캐시를 다시 만드십시오.
Remove-Cache -CacheName default
New-Cache -CacheName default -Eviction None
이 샘플 제거
캐시에서 데이터를 정리하려면 Restart-CacheCluster 명령을 사용하여 캐시 클러스터를 다시 시작합니다.
참고 항목
다른 리소스
2012-03-05