2008.06.04 02:17
기술 자료 ID | : | 601401 |
마지막 검토 | : | 2004년 9월 21일 화요일 |
수정 | : | 2.0 |
1. | Object 변수는 반드시 Nothing 시켜 주어야 합니다.
- Object 변수는 생성을 한 뒤 사용을 한 후 동일 ASP 페이지에서 즉시 Nothing으로 사용된 메모리를 Free 시켜주어야 합니다. 통상적으로 변수를 Nothing 처리 시켜주지 않아도 IIS 가 자체적으로 ASP 페이지 프로그램 종료 때 자동으로 반환하므로 이 작업을 하지 않는데 동시 사용자 수가 많은 경우는 이것을 하지 않게 되면 서버가 메모리를 적시에 반환을 못하게 되어 결국 메모리 부족현상이 일어나는 경우가 있습니다. 그리고 오류 처리를 하는 경우 오류가 난 시점에서 그때까지 만들어진 모든 Object 변수를 Nothing 처리하여 주어야 하는 것을 잊어서는 안됩니다. 오브젝트 변수를 Nothing 시키는 방법은 ‘Set 변수명 = nothing’ 입니다. |
2. | 변수 Nothing 처리는 페이지 레벨로 이루어져야 합니다.
- ASP 프로그램에 세션 변수라는 것이 있어 세션이 활성화 되어 있는 동안 계속 재사용할 수 있습니다. 흔히들 하는 “DB Connection Object 변수를 세션 변수로 만들어 세션 종료시점에 Nothing하면 된다” 라는 우를 범하게 됩니다. 이것은 사실이 아닙니다. DB Access를 하는 ASP 프로그램에서 가장 속도가 많이 걸리는 부분은 SQL 서버의 응답시간이 늦어져서 발생하는 속도 저하 현상입니다. 따라서 가능한 SQL서버의 부하를 덜어야만 응답속도를 최소화 할 수 있는데 위에서 말한 Connection 변수를 세션변수로 사용하게 되면, SQL 서버가 처리하는 동시 접속자수가 계속해서 증가하므로 SQL 서버가 현저히 늦어지는 문제가 발생하며, 실제로 SQL 서버가 답을 느리게 주므로 IIS 서버가 마치 죽은 것처럼 속도가 매우 떨어지는 현상이 발생합니다. 즉, 세션/응용프로그램 수준의 Object 변수는 가능한 사용하지 말아야 합니다. 따라서 DB Connection 변수는 Page 레벨에서 만들어서 바로 그 Page에서 Nothing 시켜주어야 합니다. |
3. | 변수 Nothing 처리는 가능한 빨리 이루어져야 합니다.
- 흔히 ASP 프로그램을 짜는 경우 Object 변수를 ASP 맨 처음에 생성하여 맨 뒤에서 Nothing을 하는 습관을 가진 분들이 있는데 이것 또한 IIS에 동시 접속사용자 수가 많아지면 문제가 될 수 있습니다. Object 변수를 만드는 시점은 그 변수를 사용하는 시점에서 생성을 해야 하고 사용이 끝난 시점에서 바로 Nothing을 시켜야 합니다. 예를 들면, DB Connection 변수의 사용도 한번 Connection을 맺고 페이지 맨 끝에서 Nothing 시켜 주는 것보다 ASP가 다소 길어지지만 여러 번에 걸쳐 필요한 그 시점마다 Connection을 맺게 하는 것이 더 효율적일 수가 있습니다. |
4. | SSI (Server Side Include)는 아주 필요한 곳 이외는 가급적 사용하지 말아야 합니다.
- ASP 가 실행하기 위해서는 IIS에 의해서 매번 Compile을 하여야 하므로 ASP 파일 사이즈가 커지면 컴파일 속도로 인해서 CPU를 많이 사용하게 되며 이것 또한 속도 저하 현상과 매우 밀접한 관계에 있습니다. 따라서 ASP 크기를 줄이기 위해서라도 불필요한 SSI의 사용을 절제해야 합니다. 또한 하나의 ASP 페이지에 HTML 코드가 많이 들어 있어 파일 크기가 많이 늘어나는 경우가 종종 있는데 이것 또한 문제가 됩니다. 확장명 .ASP 인 것들은 언제나 IIS 가 컴파일을 해야 하므로 무조건 파일을 작게 해야 함을 명심하여야 합니다. |
5. | DB Access를 하는 경우 DB 튜닝을 하지 않아서 속도 저하가 발생하는 경우가 있습니다.
- SQL 서버 자체적인 튜닝은 여러 가지 단계가 있습니다. 담당 SQL 관리자에게 문의하시고 특히 Table에 인덱스가 효율적으로 만들어졌는지 Query Optimizaition 이 이루어져야 합니다. |
6. | Object 변수를 사용할 때는 매뉴얼 참조하여 정확히 사용하십시오.
- 예를 들면 SQL Connection 변수나 Record Set 변수는 Nothing을 하기 전에 반드시 .Close 를 실행해 주어야 합니다. 하지만 이것을 생략하여도 어떠한 오류가 발생하지 않으므로 무시하는 경우가 있는데 이것은 잠재적으로 SQL 서버에 부하를 주는 원인이 됩니다. 따라서 Object 변수를 사용할 때는 그 사용방법을 정확히 알고 사용하셔야 한다는 것을 명심하십시오. |
7. | MDAC 2.1 이후 부터는 DB Connection 을 할 때 Provider를 반드시 명시하여야 합니다.
- DB 접속을 할 때 ‘DSN=~~,~~’ 식으로 Provider를 명시하지 않아도 문제가 없었으나 MDAC 2.1 이후 부터는 반드시 ‘Provider=SQLOLEDB,~~’ 와 같이 Provider를 명시하여야 합니다. 그렇지 않은 경우에 속도 저하 또는 서버 장애 현상이 일어날 수 있습니다. |
MaxPoolThreads : REG_DWORD Range: 0 - 0xFFFFFFFF Default: 10 ======> 20 (변경가능 적정값)
[HKEY_LOCAL_MACHINE] SYSTEM CurrentControlSet Services InetInfo Parameters ServerListenBacklog : INTEGER Range: 0 - unlimited Default: 200 ======> 1000(변경가능 적정값)
ServerSize: Long Range: 0 : 2 ======> 2 (변경가능 적정값)
[HKEY_LOCAL_MACHINE] SYSTEM CurrentControlSet Services InetInfo Parameters MaxEndPointConnections : LONG Range: 0 - unlimited Default: 200 ======> 1000(변경가능 적정값)
ProcessorThreadMax REG_DWORD Range: 1 - 0x000000C8Default: 10 ===> 20(변경가능 적정값)
[HKEY_LOCAL_MACHINE] SYSTEM CurrentControlSet Services W3SVC ASP Parameters RequestQueueMax REG_DWORD
[HKEY_LOCAL_MACHINE] SYSTEM CurrentControlSet Services W3SVC ASP Parameters