SQL Server 인스턴스화: 여러 인스턴스 또는 데이터베이스를 사용해야 합니까?

SQL Server 인스턴스화: 여러 인스턴스 또는 데이터베이스를 사용해야 합니까?

동일한 응용 프로그램의 여러 개에 대해 SQL 서버를 실행할 SAN에 연결된 합리적인 서버가 있습니다. 한 응용 프로그램이 다른 응용 프로그램의 데이터베이스를 읽을 수 있으면 보안 문제가 없습니다.

불행하게도 우리는 32비트 창을 사용하고 있습니다.

나는 서버에서 하나의 인스턴스를 사용하고 AWE를 활성화하여 서버 인스턴스가 우리가 가지고 있는 거의 모든 RAM을 사용할 수 있도록 한 다음 하나의 인스턴스에서 각 데이터베이스를 실행하는 것이 더 낫다고 생각합니다.

하지만 저는 IT 부서의 신들에 의해 이 문제에 대해 기각되었으므로 이에 대한 여러분의 생각이 정말 궁금합니다. 성능 관점에서 볼 때 SQL 인스턴스 하나가 두 개보다 낫다는 제 말이 틀렸습니까?

몇 가지 장애 조치 작업을 수행할 수 있다는 것을 알고 있지만 하나의 블레이드에서 해당 작업을 수행하는 것은 제게는 너무 과한 것처럼 보입니다.

답변1

SQL Server 2000 및 2005 Workgroup 및 Standard(32비트, 64비트인지는 잘 모르겠습니다)는 최대 2GB 메모리만 사용하므로 두 개의 인스턴스가 있으면 전체 4GB를 사용할 수 있습니다. x64 Windows에서 32비트 SQL Standard를 실행하는 경우에도 마찬가지입니다. 실제로는 2GB 메모리당 인스턴스를 원하기 때문에 더욱 그렇습니다.

원칙적으로 두 개의 데이터베이스가 있는 단일 인스턴스를 사용하는 것이 각각 하나의 데이터베이스가 있는 두 개의 인스턴스보다 빠르지만 이것이 큰 차이인지는 확신할 수 없습니다. 별도의 인스턴스를 갖는 것은 관리에 유용할 수 있습니다. 예를 들어 SQL 로그인을 사용하고 여러 데이터베이스에 대해 서로 다른 로그인 집합이 있는 경우 별도의 인스턴스를 사용하면 로그인을 더 쉽게 추적할 수 있습니다.

따라서 귀하의 질문에 대한 대답은 "상황에 따라 다릅니다"입니다 :-)

JR

Re Spence의 의견: 32비트 Windows의 SQL Server Standard는 최대 2GB 메모리를 사용할 수 있습니다. /3GB 스위치를 사용하면 SQL Server Enterprise는 3GB를 사용할 수 있습니다. AWE가 포함된 Windows 2003 Enterprise에서는 최소 16GB의 메모리(아마도 그 이상)를 사용할 수 있으므로 두 개 이상의 SQL Server 인스턴스를 실행하여 메모리에서 더 나은 가치를 얻을 수 있습니다.

유감스럽게도 대답은 여전히 ​​"상황에 따라 다르다"입니다. 8GB 또는 16GB와 같이 많은 메모리가 있는 경우 가장 큰 데이터베이스를 별도의 인스턴스에 배치하여 각각 2GB(또는 /3GB의 경우 3GB)를 가질 수 있도록 하려고 합니다. 4GB만 있는 경우 단일 인스턴스를 사용하고 /3GB 스위치를 사용합니다. 두 개의 인스턴스를 사용하여 사용되는 소량의 추가 메모리는 오버헤드를 감당할 가치가 없기 때문입니다.

다른 사람들이 아래에 언급했듯이 다른 고려 사항이 있을 수 있습니다. 예를 들어 선택 쿼리에서 두 개의 데이터베이스를 동시에 참조하거나 한 데이터베이스에서 다른 데이터베이스로 삽입하는 경우 속도를 위해 동일한 인스턴스에 있어야 합니다.

답변2

32비트는 막다른 골목입니다.

SQL2K5에서는 계획 컴파일, 계획 크기 자체 및 그에 따른 프로세스 캐시와 같은 작업에 대한 메모리 소비가 2k 이상으로 크게 증가했습니다. 또한 권한 토큰 캐시와 같은 다른 구성 요소는 사용자가 많은 경우(예: 대규모 조직 및 중간 계층 가장) 커지는 경향이 있습니다. 이 모든 것이 AWE의 이점을 누릴 수 없기 때문에 사용량이 많은 시스템을 32비트 메모리 공간에 맞추는 데 어려움을 겪습니다. 복잡한 쿼리와 계획이 있는 경우 인스턴스를 집계하면 버퍼 풀의 매우 높은 비율이 이러한 캐시로 도난당하고 데이터에 작은 버퍼 풀이 남게 되어 컴파일된 계획의 캐시가 지속적으로 제거되고 페이지 수명 기대치가 낮아질 수 있습니다.

반면에 동일한 상자에 있는 여러 SQL 인스턴스는 서로 밟는 경향이 있어 서로 메모리 압박을 유발합니다. 인스턴스의 메모리 관리자는 서로 통신하지 않기 때문에 단일 인스턴스에 비해 균형을 찾는 것이 훨씬 어렵습니다. 또한 여러 인스턴스의 프로세서 스케줄링은 OS가 인스턴스 사이에서 SQL 스케줄러를 선점하여 CPU 캐시를 폐기하는 것과 유사한 문제로 어려움을 겪을 수 있습니다.

답변3

IMHO, IT의 신들이 이것에 대해 틀렸다고 말하고 싶습니다. 동일한 인스턴스에서 여러 데이터베이스를 실행하는 데 보안 문제가 없다면 그렇게 하는 것이 좋습니다. 다중 인스턴스는 항상 약간의 오버헤드를 발생시키며, 이는 효과적으로 서버에 차선의 성능을 제공합니다. 관리자 측면에서는 하나의 인스턴스를 유지하는 것이 더 좋습니다.

답변4

항상 그렇듯이 상황에 따라 다릅니다.데이터베이스가 서로 "대화"해야 합니까?

동일한 애플리케이션에 대한 경우 한 데이터베이스에서 다른 데이터베이스를 읽거나 쓰려는 경우가 종종 발생합니다. 그렇다면 단일 인스턴스에 두 개의 DB를 두는 것이 좋습니다. (연결된 서버 없음, 로그인 공유, tempdb 공유가 모두 여기서 장점입니다.)

그러나 두 데이터베이스가 완전히 격리되어 서로 통신하지 않고 실제로 원격으로 서로 관련이 없는 경우(예: SharePoint 및 SAP) 두 개의 인스턴스가 더 바람직할 수 있습니다. (다른 서비스 팩 수준에서 실행하거나 하나의 인스턴스에서 사용하는 메모리를 제한하는 기능은 제가 생각할 수 없는 두 가지 장점입니다.)

관련 정보