전체 DB를 메모리에 장착 할 수 있습니까?


9

내 데이터베이스의 크기는 약 1GB입니다 (내 DB의 mdf 파일에 따라). 내 데이터베이스 서버에는 4GB의 램이 있습니다. 활성화 된 상태에서 컴퓨터의 메모리 소비량을 살펴보면 약 85 % 사용 (OS 등)

이것은 모든 DB 읽기 활동이 메모리에서만 작동한다는 의미입니까 (즉, 전체 DB가 메모리에 앉아 있음)? 아니면 여전히 디스크로 이동해야하는 경우가 있습니까?


1
글쎄, 비교를 위해 응용 프로그램이 활성화되지 않은 경우 사용법은 무엇입니까? 일반적으로 데이터베이스 시스템의 장점 중 하나는 메모리에 전체 파일이 필요하지 않지만 다른 곳에서 플러시 할 때까지 메모리에서 끌어 낸 내용에 적합하다는 것입니다. '아니오'를 선언해야합니다.
Grant Thomas

@씨. 실망 : 나는 그것이 이점이라고 동의하지만 , 전체 파일을 메모리에 넣을 있는 경우 (이 경우와 같이) 그렇지 않습니까?

필요하다면, 그렇습니다. 그러나 발신자와 그들이 요구하는 데이터의 요구에 따라, 당연히 당연히 아닙니다. 따라서 일반적으로 데이터베이스 메모리 문제가있는 경우 호출 코드 또는 지원 소프트웨어 또는이 둘의 혼합에 문제가 있습니다.
Grant Thomas

1
관점의 예 : 저는 매우 큰 포털 사이트를 소유하고있는 매우 큰 인터넷 회사를 알고 있습니다. 그들은 ca. 해당 포털에 대한 자체 광고 서버에서 3 억 개의 광고. 광고 서버의 구조는 회계 및 타겟팅에 대한 모든 정보가 포함 된 하나의 큰 Oracle DB가 있지만 RAM에 작은 데이터베이스 (현재 활성 광고 만있는)를 보유하는 32 개의 큰 (32GB RAM) 서버가 있는 것 입니다. 그들은 디스크를 건드리지 않아야합니다. 디스크에 대한 쿼리가 올 때 광고를 찾기 위해 1/1000 초만 있으면 디스크 액세스로 인해 해당 목표를 달성 할 수 없게됩니다.

답변:


5

예, 전체 데이터베이스가 메모리에 저장되어있을 수 있습니다. 검사 점 간격으로 더티 페이지를 디스크로 플러시합니다. 그러나 모든 업데이트는 로그에 기록하고 커밋하기 전에 영구 저장소에서 로그 레코드가 강화 될 때까지 기다려야합니다. 이 구식 SQL Server 2000 I / O 기본 사항 에는 필요한 모든 세부 정보가 포함되어 있습니다.

그러나 당신은 추측 할 필요가 없습니다. 당신은 이것을 정확하게 측정하고 그것이 발생하는지 확인할 수 있습니다. 관련 성능 카운터 는 다음과 같습니다.

  • Page life expectancy 페이지가 참조없이 버퍼 풀에 남아있는 시간 (초)입니다.
  • 초당 페이지 읽기 수 초당 발행 된 실제 데이터베이스 페이지 읽기 수입니다. 이 통계는 모든 데이터베이스에서 총 실제 페이지 읽기 수를 표시합니다. 물리적 I / O는 비용이 많이 들기 때문에 더 큰 데이터 캐시, 지능형 인덱스 및보다 효율적인 쿼리를 사용하거나 데이터베이스 디자인을 변경하여 비용을 최소화 할 수 있습니다.
  • Page writes / sec 초당 발행 된 실제 데이터베이스 페이지 쓰기 수입니다.

‘예, 전체 데이터베이스가 메모리에 저장되어있을 것입니다.’ 따라서 프로덕션 서버의 경우 각각 ~ 60 개 이상의 웹 사이트가 각각 SQL Server 마스터 내의 전용 데이터베이스를 사용하며,이 중 소수만이 사용 가능한 메모리보다 큰 크기에 해당합니다. 어떻게 작동합니까? ? 필자는 이전의 의견에 따라 엔진과 달리 환경에 더 의존한다는 결정적인 불이행이나 두 시나리오의 가능성이 없다고 유혹하고 있습니다.
그랜트 토마스

@씨. 실망 : 당신은 다른 질문에 나의 대답을 적용하고 있습니다. OP는 말했다 : My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. 60 개의 웹 사이트가 있고 버퍼 풀 캐싱이 작동하는 경우에 대한 답변을 원한다면 다음 질문을하십시오.
Remus Rusanu

당신은 여기 전문가이지만 내 호기심 많은 본질을 용서하십시오 :이 이론은 (우리가 구체적인 데이터가 없기 때문에) 기계가 다른 것을 못하고 있다고 가정합니까? 아니면 알 수없는 소비자가 사용하는 특정 메모리 임계 값을 설명합니까?
Grant Thomas

내가 말했듯이 : you don't have to guess, you can measure this exactly.
Remus Rusanu

-5

전체 DB (즉, 데이터)는 메모리 (sql 서버)에 저장되지 않습니다. 인덱스 및 / 또는 키를 검사 한 후 데이터 파일에서 찾고있는 데이터가있는 위치에 대한 포인터를 검색 한 다음 디스크로 이동하여 검색 할 수 있습니다. 키나 인덱스가 없으면 전체 힙을 스캔해야합니다.

실행중인 SQL Server 버전에 따라 디스크 읽기를 최소화하기 위해 잘 사용하는 데이터를 캐싱하는 전략이있을 수 있습니다.

예를 들어 MySql Cluster 데이터베이스와 같은 인 메모리 DB를 얻을 수 있습니다. 이는 고 가용성 / 재해 복구 및 빠른 데이터 검색을 위해 서버 클러스터의 ENTIRE 데이터베이스를 메모리에 맞추도록 설계되었습니다.


1
나는 이것을 표결하기에 충분한 담당자가 아니지만 왜 그것이 메모리에 저장되지 않을 것이라고 말했는지 왜 확신하지 못합니다. 페이지가 버퍼 캐시로 읽 히면 내부 또는 외부 메모리 압력으로 인해 캐시가 잘릴 때까지 페이지가 유지됩니다.
Martin Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.