इसलिए हमारे पास हमारे मंचन तालिका से डेटा लेने और इसे हमारे डेटामार्ट में ले जाने के लिए एक सरल बल्क इंसर्ट प्रक्रिया है।
प्रक्रिया "पंक्तियों प्रति बैच" के लिए डिफ़ॉल्ट सेटिंग्स के साथ एक सरल डेटा प्रवाह कार्य है और विकल्प "टैबलॉक" और "नो चेक बाधा" हैं।
मेज काफी बड़ी है। 20187 और 49GB इंडेक्स स्पेस के डेटा साइज़ के साथ 587,162,986। तालिका के लिए संकुल सूचकांक है।
CREATE CLUSTERED INDEX ImageData ON dbo.ImageData
(
DOC_ID ASC,
ACCT_NUM ASC,
MasterID ASC
)
और प्राथमिक कुंजी है:
ALTER TABLE dbo.ImageData
ADD CONSTRAINT ImageData
PRIMARY KEY NONCLUSTERED
(
ImageID ASC,
DT_CRTE_DOC ASC
)
अब हम एक मुद्दा रहा है, जहां BULK INSERT
SSIS के माध्यम से अविश्वसनीय रूप से धीमी गति से चल रहा है। एक लाख पंक्तियाँ डालने में 1 घंटा। तालिका को पॉप्युलेट करने वाली क्वेरी पहले से ही सॉर्ट की गई है और पॉप्युलेट करने के लिए क्वेरी को चलाने में एक मिनट से अधिक समय लगता है।
जब प्रक्रिया चल रही होती है तो मैं BULK इंसर्ट पर प्रतीक्षा करने वाली क्वेरी देख सकता हूं जो 5 से 20 सेकंड तक कहीं भी होती है और एक प्रतीक्षा प्रकार दिखाती है PAGEIOLATCH_EX
। प्रक्रिया केवल INSERT
एक समय में लगभग एक हजार पंक्तियों में सक्षम है ।
कल जब मैं अपने UAT पर्यावरण के खिलाफ इस प्रक्रिया का परीक्षण कर रहा था उसी मुद्दे पर चल रहा था। मैं इस प्रक्रिया को कुछ बार चला रहा था और यह निर्धारित करने का प्रयास कर रहा था कि इस धीमे डालने का मूल कारण क्या है। फिर अचानक यह सब 5 मिनट के भीतर चलने लगा। इसलिए मैंने इसे उसी परिणाम के साथ कुछ और बार चलाया। इसके अलावा थोक आवेषण की संख्या जो 5 सेकंड या अधिक से अधिक गिराए गए फार्म का इंतजार कर रहे थे, लगभग 4।
अब यह चिंताजनक है क्योंकि ऐसा नहीं है कि हमारे पास गतिविधि में कुछ भारी गिरावट थी।
अवधि के दौरान सीपीयू कम है।
कई बार जब यह धीमा होता है तो डिस्क पर कम इंतजार होता है।
डिस्क विलंबता वास्तव में उस समय सीमा के दौरान बढ़ जाती है जब प्रक्रिया 5 मिनट के भीतर चल रही थी।
और आईओ उस समय के दौरान बहुत कम था कि यह प्रक्रिया खराब रूप से चलती है।
मैंने पहले ही जाँच कर ली है और कोई फ़ाइल वृद्धि नहीं हुई क्योंकि फाइलें केवल 70% भरी हुई हैं। लॉग फ़ाइल अभी भी 50% जाने के लिए है। DB सरल रिकवरी मोड पर है। DB में केवल एक फ़ाइल समूह होता है, लेकिन यह 4 फ़ाइलों में फैला होता है।
तो मैं क्या सोच रहा हूं A: मैं उन थोक आवेषण पर इतने बड़े प्रतीक्षा समय क्यों देख रहा था। B: किस तरह का जादू हुआ जिसने इसे तेजी से चलाया?
पक्षीय लेख। यह आज फिर से बकवास की तरह चलता है।
अद्यतन यह वर्तमान में विभाजित है। हालांकि यह एक ऐसी विधि में किया जाता है जो सबसे अच्छा मूर्खतापूर्ण है।
CREATE PARTITION SCHEME [ps_Image] AS PARTITION [pf_Image]
TO ([FG_Image], [FG_Image], [FG_Image], [FG_Image])
CREATE PARTITION FUNCTION [pf_Image](datetime) AS
RANGE RIGHT FOR VALUES (
N'2011-12-01T00:00:00.000'
, N'2013-04-01T00:00:00.000'
, N'2013-07-01T00:00:00.000'
);
यह 4 डी विभाजन में अनिवार्य रूप से सभी डेटा को छोड़ देता है। हालाँकि चूंकि यह सब एक ही फाइल ग्रुप में जा रहा है। वर्तमान में डेटा उन फ़ाइलों में समान रूप से विभाजित है।
अद्यतन 2 ये समग्र प्रतीक्षा कर रहे हैं जब प्रक्रिया खराब चल रही है।
इस अवधि के दौरान यह इंतजार है कि मैं इस प्रक्रिया को चलाने में सक्षम था अच्छी तरह से चल रहा है।
भंडारण उपतंत्र स्थानीय रूप से संलग्न है RAID, नहीं SAN शामिल। लॉग एक अलग ड्राइव पर हैं। RAID नियंत्रक 1 जीबी कैश आकार के साथ PERC H800 है। (यूएटी के लिए) उत्पाद एक पीईआरसी (810) है।
हम बिना बैकअप वाले साधारण रिकवरी का उपयोग कर रहे हैं। इसे रात को प्रोडक्शन कॉपी से बहाल किया जाता है।
हमने IsSorted property = TRUE
SSIS में भी सेट किया है क्योंकि डेटा पहले से ही सॉर्ट है।
PAGEIOLATCH_EX
और ASYNC_IO_COMPLETION
संकेत कर रहे हैं कि यह डिस्क से मेमोरी में डेटा प्राप्त करने में कुछ समय ले रहा है। यह डिस्क सबसिस्टम के साथ एक समस्या का एक संकेतक हो सकता है, या यह स्मृति विवाद हो सकता है। SQL Server में कितनी मेमोरी उपलब्ध है?
ASYNC_NETWORK_IO
इसका मतलब है कि SQL सर्वर किसी क्लाइंट को पंक्तियाँ भेजने का इंतज़ार कर रहा था । मुझे लगता है कि मंचन तालिका से पंक्तियों की खपत वाली SSIS की गतिविधि दिखाई दे रही है।