다음과 같이 매우 기본적인 SQL 테이블을 만들었습니다.
CREATE TABLE [dbo].[TickData](
[Date] [varchar](12) NULL,
[Time] [varchar](12) NOT NULL,
[Symbol] [varchar](12) NOT NULL,
[Side] [varchar](2) NOT NULL,
[Depth] [varchar](2) NOT NULL,
[Quote] [varchar](12) NOT NULL,
[Size] [varchar](18) NOT NULL
) ON [PRIMARY]
그런 다음 3Gig Bulk Insert를 수행했습니다.
BULK
INSERT TickData
FROM
'C:\SUMO.csv'
GO
그런 다음 SQL 서버의 RAM 사용량이 Skyrocking으로 이동하여 ~ 30Go의 RAM을 소비했습니다.
나는 이것이 비정상적인 행동이라고 생각하고 이것을 피하기 위해 조치를 취할 수 있다고 생각합니다.
편집 :
좋아, 이것은 기본 동작 인 것 같습니다. 그럴 수 있지.
그러나 대량 삽입이 완료된 후 왜 메모리가 해제되지 않습니까?
몇 가지 추가 고려 사항 :
OS가 "통합"할 때 메모리를 비우는 SQL Server에 대한 의견에 따르면 24-Core 32Gb Xeon Server에서의 실습 경험은 이것이 정확하지 않은 것으로 판명되었습니다 : 일단 메모리가 풍부한 BCP 추출이 끝나면 추출 된 데이터를 처리 해야하는 내 데이터 처리 응용 프로그램의 .Net 인스턴스 풀이 있으며 남은 메모리를 공유하여 작업을 수행하려고 시도하기 위해 질식 / 파이팅 상태로 남아 있습니다 .SQL Server가 켜질 때보 다 시간이 오래 걸립니다. 모든 응용 프로그램에서 공유 및 메모리를 사용할 수 있습니다. 모든 것이 순조롭게 진행되고 Articiallt가 OutOfMemmroy 예외를 일으킨 응용 프로그램이 충돌하지 않도록 SQL Server 에이전트를 중지해야합니다. 인공적인 잔인한 메모리 캡핑 / 제한에 대해 사용 가능한 메모리가 사용 가능한 경우, 왜 사용하지 않습니까? 이상적으로는 단지 "무작위로"강제로 제한되는 것이 아니라 이용 가능한 것에 적응하도록 동적으로 설정 될 것이다. 그러나 이것은 의도적으로 설계된 것이므로이 마지막 시점에서 사건이 마감되었습니다.