मैंने निम्नलिखित के रूप में एक बहुत ही मूल 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]
मैंने तब एक 3 गिग बल्क इंसर्ट किया
BULK
INSERT TickData
FROM
'C:\SUMO.csv'
GO
तब SQL सर्वर के लिए RAM का उपयोग स्काईरॉकिंग हो गया, ~ 30Go RAM खा गया:
मुझे लगता है कि यह एक असामान्य व्यवहार है और इससे बचने के लिए कार्रवाई की जा सकती है।
संपादित करें:
ठीक है, यह डिफ़ॉल्ट व्यवहार लगता है। काफी उचित।
हालाँकि, बल्क इंसर्ट ख़त्म होने के बाद मेमोरी लंबे समय तक मुक्त क्यों नहीं होती है?
कुछ अतिरिक्त विचार:
SQL सर्वर के बारे में टिप्पणी के रूप में जब यह "ओएस द्वारा" को बताया गया है, तो मेमोरी को मुक्त करने के बारे में, 24-कोर 32 Gb Xeon सर्वर पर मेरे हाथ का अनुभव यह साबित होता है: मेमोरी-वोरेसिक BCP निकालने के बाद एक बार मेरे पास अपने डेटा प्रोसेसिंग एप्लिकेशन के .Net इंस्टेंसेस का एक पूल है जिसे निकाले गए डेटा को संसाधित करने की आवश्यकता है, और वे अपनी नौकरी करने की कोशिश करने के लिए शेष मेमोरी को साझा करने के लिए घुट / लड़ रहे हैं, जो कि faaaaar को लंबे समय तक ले जाते हैं जब SQL सर्वर चालू होता है सभी एप्लिकेशन साझा करने के लिए ऑफ और मेमोरी उपलब्ध है। मुझे सब कुछ सुचारू रूप से करने के लिए SQL सर्वर एजेंट को रोकना होगा और Apps को Articiallt के कारण दुर्घटनाग्रस्त होने से रोकना होगा जो OutOfMemmroy अपवाद है। कृत्रिम क्रूर मेमोरी कैपिंग / लिमिटेशन के अनुसार, यदि मुफ्त मेमोरी उपलब्ध है, इसका उपयोग क्यों नहीं करते? आदर्श रूप में यह बल्कि केवल जबरन "बेतरतीब ढंग से" सीमित होने के बजाय जो उपलब्ध है, उसके अनुकूल होने के लिए अनुकूल रूप से निर्धारित किया जाएगा। लेकिन मुझे लगता है कि यह बाय-डिज़ाइन है, इसलिए इस अंतिम बिंदु पर मामला बंद हो गया।