Tôi đã tạo một bảng SQL rất cơ bản như sau
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]
Sau đó tôi đã thực hiện Chèn 3 Gig
BULK
INSERT TickData
FROM
'C:\SUMO.csv'
GO
Sau đó, việc sử dụng RAM cho máy chủ SQL đã tăng Skyrocking, ăn ~ 30Go RAM:
Tôi thích nghĩ rằng đây là một hành vi bất thường và hành động đó có thể được thực hiện để tránh điều này.
EDIT:
Ok, Đây có vẻ là hành vi mặc định. Đủ công bằng.
Tuy nhiên, tại sao bộ nhớ không được giải phóng lâu sau khi Chèn hàng loạt kết thúc?
Một vài cân nhắc thêm:
Đối với các nhận xét liên quan đến máy chủ SQL giải phóng bộ nhớ khi hệ điều hành "nói với", trải nghiệm thực tế của tôi trên Máy chủ Xeon 24 lõi 32 Gb đã chứng minh điều này là không chính xác: Khi quá trình trích xuất BCP Bộ nhớ-Bộ nhớ đã kết thúc Tôi có một nhóm .Net Instances của ứng dụng xử lý dữ liệu của tôi cần xử lý dữ liệu được trích xuất và chúng bị nghẹt / chiến đấu để chia sẻ bộ nhớ còn lại để cố gắng thực hiện công việc của mình, mất nhiều thời gian hơn khi SQL Server được bật tắt và bộ nhớ có sẵn cho tất cả các ứng dụng để chia sẻ. Tôi phải dừng Tác nhân Máy chủ SQL để mọi thứ diễn ra suôn sẻ và ngăn Ứng dụng gặp sự cố cho Articiallt gây ra Ngoại lệ OutOfMemmroy. Đối với Giới hạn / Giới hạn Bộ nhớ Brutal nhân tạo, nếu Bộ nhớ trống có sẵn, Tại sao không sử dụng nó? Lý tưởng nhất là thà thiết lập một cách tự nhiên để thích nghi với những gì có sẵn thay vì chỉ bị giới hạn một cách "ngẫu nhiên". Nhưng tôi đoán đây là thiết kế phụ, vì vậy trường hợp đóng cửa ở điểm cuối cùng này.