Q&A

  • 서버로 쿼리 던진 후 알고 싶은게...
쿼리를 던져서 데이터를 가져오잖아요...

그런데 셀렉트 양이 많으면 시간이 걸려서 메모리가 많이 올라갑니다...

그건 그렇다 치고 원하는 데이터를 가져온 후에 메모리를 보면 올라간 상태 그대로 있거든요?

이거 원래 이런가요? 아니면 메모리 관리를 잘못해서 이런가요...

셀렉트 해 온 후에 원래의 메모리 상태로 되돌리는 방법 없을까요?

서버-클라이언트를 사용하고 있어서 서버에서 자료를 가져온 후에는 서버의 메모리가 내려가야 할듯 싶어서요...

부탁드립니다.
2  COMMENTS
  • Profile
    김경록 2003.12.05 21:24
    일단, 어떤 DB인지는 잘 모르겠군여..
    DB를 명시했더라면 좋았을 것을..
    일단, Oracle 기준으로 약간 설명을 드리면,
    CS환경이든 3-Tier 환경이든간에 Select된 내역은 Server측 DB의
    Cache에 저장이되도록 되어 있습니다.
    왜냐하면, 똑같은 Query가 왔을때 SQL에 대해서 Parsing을 한 후
    Cache 내용을 보게 되는데, 이때 Cache에 있다면,
    Disk Access를 하지 않고, 메모리의 Cache에서 직접 가져 옵니다.
    즉, Disk Access에 대해서 Load를 줄이겠다는 방법입니다.
    그렇다면, Server측에서 Cache의 사용을 줄이거나, 작게 한다면,
    되지 않겠느냐고 말씀하실 수 있습니다만,
    Query를 서버측에 날려서 DATA가 되돌아오는 시간을 늦게 하실 의양이
    있다면 그렇게 하셔도 좋습니다.
    하지만, Cache에 있는 DATA에 대한 Hit율(%)이 낮아지므로,
    Disk Access에 대한 Load가 많이 걸리게 될 가능성이 농후합니다.

    따라서, 이런것들을 고려해서 DBA는 Database Server의
    Cache를 적정량으로 조정을 잘 하셔야 하며,
    Disk Array에 대한 고려를 해 보셔야 할 것입니다..
    물론, 회사 사정으로 인해서 Disk Array, Memory를 확장할 수 없다면,
    뭐..  어쩔 수 없구여..

    답이 되었는지 모르겠네여..



  • Profile
    ^자]물병[리^ 2003.12.08 20:19
    성의있는 답변 정말 감사드립니다.

    말이좀 어렵긴 하지만 대충 이해는 가네요 ^^*

    캐쉬 메모리를 의도적으로 비울 수는 없나요?

    메모리를 많이 차지하는 select를 던질 일이 거의 없거든요... 몇일에 한번정도

    근데 이것때문에 메모리가 차 있어서 ㅡㅡ;

    참고로 저희는 ms-sql을 사용했습니다..