none
Windows2003 Memory이슈 (page faults, page) RRS feed

  • 질문

  •  

    저희 쪽에서 MS-SQL 2000 Ent를 Win2003 Std.에서 운용중입니다.

     

    해당 DB의 데이터 사이즈와 사용률은 상당히 낮은 편인데요. (각각 10G, 초당 10-20정도의 Transcation 수행)

     

    시스템이 상당히 느립니다. 이유를 살펴보니 Disk Access가 수없이 일어나서 인데요.

     

    해당 프로세서를 찾으니 Sql서버더군요.

     

    아무래도 메모리(2G입니다) 부족으로 paging이 많이 일어나는가보다 하고 성능 모니터를 켰는데..

     

    Page /sec는 0입니다. 그런데 Page Faults /sec는 500을 넘어갑니다.

     

    디스크는 RAID5로 구성되어 C드라이브쪽에 시스템 페이지 파일이 있습니다. 그런데 성능 모니터 상에서는 C드라이브에는

     

    거의 억세스가 없더군요.

     

    Page /sec 0, Page Faults /sec 500이상의 의미가 잘 이해가 안됩니다. Page Faults가 일어나면 Paging이 일어나야 되는거 아닌가요?

     

    디스크는 무진장 읽어대는데 시스템 페이징 파일쪽으로 읽고 쓰기는 없는 이유는 Page /sec가 0인거 때문일거 같은데요.

     

    다른 드라이브 쪽의 Read가 확 늘어나면서 Page Faults가 수도 없이 생기는 이유를 모르겠습니다.

     

    아마 Page Faults에 대한 정확한 이해가 없어서 그런 듯합니다. 이 부분에 대한 조언을 부탁드립니다.

     

    감사합니다.

    2007년 10월 26일 금요일 오전 2:37

모든 응답

  • Page Fault = Hard Fault + Soft Fault 값의 합산입니다.

                       

                       1. Soft Fault 는 Working Set 이 아닌 물리적 메모리상에 요청하는 페이지가 있기 때문에

                           메모리를 액세스하면 해결됩니다. 즉 Performance에 별로 영향이 없습니다.( Not DISK ) 

                   

                           그런 이유인지 Soft Fault는 성능카운터가 없습니다 :-)

                       

                       2. Hard Fault 는 요청하는 페이지가 메모리상에 없기때문에 디스크에 segment를

                          요청하고 Memory 와 DISK에 따르는 DISK I/O와 전환때문에 퍼포먼스저하를

                          일으킵니다. 메모리상에 요청하는 페이지가 다 있다면 Page/sec이 발생하지 않겠지요..

     

     

    SQL서버는 잘돌아간다면 :-)   많은양의 소프트폴트를 발생합니다

     

    Pages / Sec = Hard Faults 값입니다 즉 DISK I/O를 필요로 합니다.

    이 값이 높다면  Hard Faults 값에 의존하는 Application 이나 쿼리를 의심해볼 필요가 있습니다.

    악성쿼리에의한 스캔으로 DISK I/O 를 발생하면 극도로 낮은 퍼포먼스를 경험하게 됩니다.

     

     

    ;; Pages /Sec 과 PF Delta , Physical Disk  Queue Length 값을 모니터링하시기 바랍니다.

     

    2007년 10월 26일 금요일 오전 5:32
  • Pages /sec 는 일정하게 0을 유지합니다.

     

    Dis Queue Length는 10이상이 나옵니다. 즉 디스크가 쉴사이가 없다는거죠.

     

    초당 20~30MB씩 읽어대고 있습니다. SQL Sever가요. 이것들은 성능 모니터에서 확인된거구요.

     

     

    Hard Paging이 일어나지도 않고, 부하도 별로 없는데 SQL Server가  왜 이렇게 디스크를 많이 쓰는지 알 수가 없네요~

     

     

     

     

    2007년 10월 26일 금요일 오전 6:33
  • 작업관리자 > 보기 > 열  에서 I/O 읽기바이트, I/O 쓰기바이트 를 추가한후

    정렬시킨 후 가장 많이 발생하는 프로세스를 확인하세요 ( tlist /s 로 추가 확인)

     

    SQL프로세스일경우   Profiler 를 이용해  데이타를 수집해서

    분석해보는것이 좋을 듯합니다.

     - long running queries , long waits for database locks 위주로

     

    인덱스를 잘못타거나 통계정보가  제대로 업데이트되지 않아

    테이블 스캔하는 악성쿼리가 있는지 살펴보세요.

    2007년 10월 26일 금요일 오전 6:49