2011-08-05 3 views
0

BulkCopy 클래스를 사용하여 ~ 17M 행 (2GB 크기)의 테이블을 SQLServer에로드하는 동안 약 6M 개의 레코드를로드 한 후 서버의 메모리가 자동으로 부족한 것으로 보입니다. 즉, 나는 시스템 메모리의 90 % 이상을 차지하고, 메모리 부족 예외를 발생시키지 않고 조용히 데이터로드를 계속 시도하면 매우 느려진다.SQL 서버의 메모리 관리

비슷한 문제가있는 사람이 있습니까? SQLServer를 다시 시작하지 않고 일부 메모리를 지우라고 말할 수있는 방법이 있습니까? 만약 아니라면, 누군가 프로그램 방식으로 서버를 재시작하는 방법을 말해 줄 수 있습니까?

추신 : 나는 메모리를 먹어 치우는 프로그램이 아니라는 것을 확인했습니다.

[편집] 64 비트 Windows 7, 64 비트 sqlserver 2008 R2 및 8GB 메모리를 실행 중입니다.

+0

프로그램이 메모리 소비의 원인이 아닌 것을 어떻게 확인할 수 있었습니까? – RobB

+0

오, 내가 내 프로세스를 죽일 때 훨씬 적은 메모리가 SQL 서버를 다시 시작할 때보다 자유롭게된다. –

답변

1

Sql은 모든 데이터를 메모리에로드하기 위해 약간의 오버 헤드가 있습니다. 따라서 2GB의 원시 데이터가있을 때 메타 데이터와 포인터가 있으며 이러한 것들을 추적하기 위해 메모리에로드되어야합니다. 귀하의 시스템에서 일어나는 일은 모든 것을 메모리에 저장하기 위해 RAM 스토리지가 부족하여 특정 페이지 (OS가 가상 주소를 물리적 주소로 변환하는 데 사용하는 단위)를 하드 드라이브로 스왑해야합니다 (매우 느리게). 더 많은 정보를 저장할 방을 만들 수 있습니다. 일반적으로 데이터베이스를 메모리에 완전히로드하면 데이터베이스가 상당히 커질 수 있으므로이 작업을 수행합니다. SQL 서버는 최근에 사용되지 않았고 가까운 장래에 사용될 가능성이없는 것들을 제거 할 수 있도록 맞춤 메모리 관리 기능을 가지고 있습니다.

Sql을 다시 시작하는 것은 SQL Server의 MySql (MySQL, MsSql 등)의 관련 버전에 따라 프로그램을 통해 서버를 다시 시작하는 방법이 있으므로 실제로 이렇게하는 유일한 방법입니다.

3

SQL Server는 시스템에서 사용할 수있는 모든 메모리를 할당합니다. 최대 메모리에 도달하면 메모리에 남아 있으며 메모리를 비우지 않습니다. 이것은 디자인 의도 된 동작입니다.

당신은 우리에게 정보의 일부 중요한 부분을 말하지 않았다

  • 얼마나 많은 물리적 메모리 시스템이 가지고 있습니까?
  • 은 64 비트 또는 32 비트 OS입니까?
  • 은 64 비트 또는 32 비트 SQL Server 인스턴스입니까?

의심되는 사실은 6M 행에서 테스트가 파일 증가를 시작하고 사용자가 instant file initialization을 사용하지 않도록 설정했기 때문입니다. 성능 카운터를 많이보고 있습니다

  • 그리고, 어떤 SQL 서버 문제 해결 문제와 마찬가지로 Waits and Queues 방법을 다음을 해치지 않을 수 있습니다. 마지막으로, 참으로 메모리 압력으로 인해 문제가 발생하는 경우 Using DBCC MEMORYSTATUS to Monitor SQL Server Memory Usage에서 조사하는 방법에 대한 지침이 있습니다.

  • +0

    감사합니다! 나는 스펙을 추가했다.파일 초기화에 관해서는 ~ 10 기가 디스크 공간을 미리 할당하고 있습니다. 모든 데이터가로드되고 색인이 생성되는 한 벽걸이 시간은 신경 쓰지 않습니다. 카운터로 무엇을해야합니까? 그것의 모니터링 권리? 기본적으로 제 경우는 더 많은 행이 추가 될 것이고 그것에 대한 제 해결 방법은 sqlserver를 다시 시작하여 메모리를 되 찾는 것이고 모든 메모리를 다 사용하기 전에는 행복하게로드하는 것입니다. 'DBCC MEMORYSTATUS'를 시도하고 기다림과 대기열에 대해 읽으 려합니다. 그 사이에 무엇이든 생각한다면 정말 좋을 것입니다. –

    +0

    BCP를 수행하는 세션에 대한'sys.dm_exec_requests'의'wait_time','wait_type','wait_resource' 및'last_wait_type' 값을 확인하시기 바랍니다. 반복적으로 확인하고, 빠르며 느려졌을 때 가장 자주 보는 값을 여기에 게시하십시오. –