I / O अनुरोधों को 15 सेकंड से अधिक समय लेता है


31

आमतौर पर हमारे साप्ताहिक पूर्ण बैकअप लगभग 35 मिनट में समाप्त हो जाते हैं, दैनिक अंतर बैकअप के साथ ~ 5 मिनट में समाप्त होता है। मंगलवार से दैनिकों को पूरा होने में लगभग 4 घंटे लग गए हैं, जिस तरह से आवश्यकता से अधिक होना चाहिए। संयोग से, यह तब से शुरू हुआ जब हमने एक नया SAN / डिस्क कॉन्फिगर किया।

ध्यान दें कि सर्वर उत्पादन में चल रहा है और हमारे पास कोई समग्र समस्या नहीं है, यह सुचारू रूप से चल रहा है - केवल मुख्य रूप से बैकअप प्रदर्शन में प्रकट होने वाले IO समस्या को छोड़कर।

बैकअप के दौरान dm_exec_requests को देखते हुए, बैकअप लगातार ASYNC_IO_COMPLETION पर प्रतीक्षा कर रहा है। अहा, तो हम डिस्क विवाद है!

हालांकि, न तो एमडीएफ (लॉग स्थानीय डिस्क पर संग्रहीत किए जाते हैं) और न ही बैकअप ड्राइव में कोई गतिविधि है (IOPS ~ = 0 - हमारे पास बहुत सारी मेमोरी है)। डिस्क कतार की लंबाई ~ = 0 भी। सीपीयू 2-3% के आसपास होता है, कोई समस्या नहीं है।

SAN एक डेल MD3220i है, LUN जिसमें 6x10k SAS ड्राइव है। सर्वर दो भौतिक रास्तों के माध्यम से SAN से जुड़ा है, प्रत्येक SAN के लिए निरर्थक कनेक्शन के साथ एक अलग स्विच के माध्यम से जा रहा है - कुल चार पथ, उनमें से दो किसी भी समय सक्रिय हो रहे हैं। मैं यह सत्यापित कर सकता हूं कि दोनों कनेक्शन कार्य प्रबंधक के माध्यम से सक्रिय हैं - लोड को समान रूप से विभाजित करना। दोनों कनेक्शन 1G पूर्ण द्वैध चल रहे हैं।

हम जंबो फ्रेम का उपयोग करते थे, लेकिन मैंने उन्हें यहां किसी भी मुद्दे पर शासन करने के लिए अक्षम कर दिया है - कोई बदलाव नहीं। हमारे पास एक और सर्वर है (वही OS + config, 2008 R2) जो अन्य LUN से जुड़ा है, और यह कोई समस्या नहीं दिखाता है। यह हालांकि SQL सर्वर नहीं चला रहा है, लेकिन उनमें से शीर्ष पर केवल CIFS साझा कर रहा है। हालाँकि, इसके LUN में से एक पसंदीदा मार्ग परेशानी SAN के रूप में उसी SAN कंट्रोलर पर है - इसलिए मैंने उस पर भी फैसला सुनाया है।

SQLIO परीक्षण (10G परीक्षण फ़ाइल) के एक जोड़े को चलाने से प्रतीत होता है कि मुद्दों के बावजूद IO सभ्य है:

sqlio -kR -t8 -o8 -s30 -frandom -b8 -BN -LS -Fparam.txt
IOs/sec:  3582.20
MBs/sec:    27.98
Min_Latency(ms): 0
Avg_Latency(ms): 3
Max_Latency(ms): 98
histogram:
ms: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
%: 45  9  5  4  4  4  4  4  4  3  2  2  1  1  1  1  1  1  1  0  0  0  0  0  2

sqlio -kW -t8 -o8 -s30 -frandom -b8 -BN -LS -Fparam.txt
IOs/sec:  4742.16
MBs/sec:    37.04
Min_Latency(ms): 0
Avg_Latency(ms): 2
Max_Latency(ms): 880
histogram:
ms: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
%: 46 33  2  2  2  2  2  2  2  1  1  1  1  0  0  0  0  0  0  0  0  0  0  0  1

sqlio -kR -t8 -o8 -s30 -fsequential -b64 -BN -LS -Fparam.txt
IOs/sec:  1824.60
MBs/sec:   114.03
Min_Latency(ms): 0
Avg_Latency(ms): 8
Max_Latency(ms): 421
histogram:
ms: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
%:  1  3 14  4 14 43  4  2  1  1  1  1  1  1  0  0  0  0  0  0  0  0  0  0  6

sqlio -kW -t8 -o8 -s30 -fsequential -b64 -BN -LS -Fparam.txt
IOs/sec:  3238.88
MBs/sec:   202.43
Min_Latency(ms): 1
Avg_Latency(ms): 4
Max_Latency(ms): 62
histogram:
ms: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
%:  0  0  0  9 51 31  6  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

मुझे पता है कि ये किसी भी तरह से संपूर्ण परीक्षण नहीं हैं, लेकिन वे मुझे यह जानने में सहज बनाते हैं कि यह पूरी तरह से बकवास नहीं है। ध्यान दें कि उच्च लेखन प्रदर्शन दो सक्रिय MPIO रास्तों के कारण होता है, जबकि पढ़ना केवल उनमें से एक का उपयोग करेगा।

अनुप्रयोग ईवेंट लॉग की जाँच से इन बिखरे हुए ईवेंट की तरह पता चलता है:

SQL Server has encountered 2 occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [J:\XXX.mdf] in database [XXX] (150).  The OS file handle is 0x0000000000003294.  The offset of the latest long I/O is: 0x00000033da0000

वे निरंतर नहीं हैं, लेकिन वे नियमित रूप से (प्रति घंटे एक जोड़े, बैकअप के दौरान अधिक) होते हैं। उस ईवेंट के साथ, सिस्टम ईवेंट लॉग इन पोस्ट करेगा:

Initiator sent a task management command to reset the target. The target name is given in the dump data.
Target did not respond in time for a SCSI request. The CDB is given in the dump data.

ये समान SAN / नियंत्रक पर चल रहे गैर-समस्याग्रस्त CIFS सर्वर पर भी होते हैं, और मेरे Googling से वे गैर-महत्वपूर्ण लगते हैं।

ध्यान दें कि सभी सर्वर अप-टू-डेट ड्राइवरों के साथ एक ही एनआईसी - ब्रॉडकॉम 5709 सी का उपयोग करते हैं। सर्वर खुद डेल R610 के हैं।

मुझे यकीन नहीं है कि आगे के लिए क्या जांचना है। कोई सुझाव?

अपडेट - रनिंग परफॉमन
मैंने औसत रिकॉर्डिंग की कोशिश की। बैकअप करते समय डिस्क सेक / रीड एंड परफेक्ट काउंटर। बैकअप धधकते हुए शुरू होता है, और फिर मूल रूप से 50% पर मृत हो जाता है, धीरे-धीरे 100% की ओर रेंगता है, लेकिन 20x समय लेना चाहिए।

बैकअप की शुरुआत के दौरान कार्य की निगरानी दोनों सैन पथ का उपयोग किया जा रहा दिखाता है, फिर छोड़ रहा है।

उसी दौरान प्रदर्शन करेंबैकअप 15:38:50 के आसपास शुरू हुआ - सभी को अच्छी लग रही नोटिस, और फिर चोटियों की एक श्रृंखला है। मुझे लेखन से कोई सरोकार नहीं है, केवल पढना ही फाँसी लगता है।

बैकअप की समाप्ति के दौरान कार्य की निगरानी / बंद पर बहुत कम कार्रवाई पर ध्यान दें, हालांकि बहुत अंत में प्रदर्शन धमाकेदार।

उसी के दौरान परफ्यूम एक 12sec अधिकतम नोट करें, हालांकि औसत कुल मिलाकर अच्छा है।

अद्यतन - एनयूएल डिवाइस का समर्थन
रीड मुद्दों को अलग करने और चीजों को सरल बनाने के लिए, मैंने निम्नलिखित भाग किया:

BACKUP DATABASE XXX TO DISK = 'NUL'

परिणाम बिल्कुल समान थे - एक फट पढ़ने के साथ शुरू होता है और फिर स्टालों, संचालन फिर से शुरू करना और फिर:

परिणाम

अपडेट - IO स्टाल्स में
मैंने शॉन द्वारा सुझाए गए जोनाथन केहियास और टेड क्रुएगर की किताब (पृष्ठ 29) से dm_io_virtual_file_stats क्वेरी चलाई । शीर्ष 25 फाइलों को देखना (एक डेटा फ़ाइल प्रत्येक - सभी परिणाम डेटा फ़ाइलों के रूप में), ऐसा लगता है कि रीड्स लिखने की तुलना में खराब हैं - शायद इसलिए कि राइट सीधे सैन कैश पर जाते हैं जबकि ठंड रीड डिस्क को हिट करने की आवश्यकता होती है - बस एक अनुमान हालांकि ।

आईओ स्टॉल

अद्यतन - प्रतीक्षा आँकड़े
मैंने कुछ प्रतीक्षा आँकड़े एकत्र करने के लिए तीन परीक्षण किए। प्रतीक्षा आँकड़े ग्लेन बेरी / पॉल रैंडल स्क्रिप्ट का उपयोग करके उद्धृत किए जाते हैं । और बस पुष्टि करने के लिए - बैकअप टेप करने के लिए नहीं किया जा रहा है, लेकिन एक iSCSI LUN को। यदि NUL बैकअप के समान परिणाम हों, तो परिणाम स्थानीय डिस्क के समान होते हैं।

साफ किए गए आँकड़े। 10 मिनट के लिए भाग गया, सामान्य भार: कोई बैकअप नहीं

साफ किए गए आँकड़े। 10 मिनट के लिए दौड़ा, सामान्य लोड + सामान्य बैकअप चल रहा है (पूरा नहीं हुआ): सामान्य बैकअप

साफ किए गए आँकड़े। 10 मिनट के लिए दौड़ा, सामान्य लोड + एनयूएल बैकअप चल रहा है (पूरा नहीं हुआ): एनयूएल बैकअप

अद्यतन - Wtf, ब्रॉडकॉम?
मार्क स्टोरी-स्मिथ के सुझावों और काइल ब्रैंड्स के ब्रॉडकॉम एनआईसी के साथ पिछले अनुभवों के आधार पर, मैंने कुछ प्रयोग करने का फैसला किया। जैसा कि हमें कई सक्रिय रास्ते मिल गए हैं, मैं अपेक्षाकृत आसानी से बिना किसी आउटेज के एनआईसी के कॉन्फ़िगरेशन को एक-एक करके बदल सकता था।

टीओई और बड़े सेंड ऑफलोड को निष्क्रिय करने से लगभग पूर्णता प्राप्त हुई: यहाँ छवि विवरण दर्ज करें

Processed 1064672 pages for database 'XXX', file 'XXX' on file 1.
Processed 21 pages for database 'XXX', file 'XXX' on file 1.
BACKUP DATABASE successfully processed 1064693 pages in 58.533 seconds (142.106 MB/sec).

तो कौन सा अपराधी, TOE या LSO है? TOE सक्षम, LSO अक्षम: यहाँ छवि विवरण दर्ज करें

Didn't finish the backup as it took forever - just as the original problem!

टीओई विकलांग, एलएसओ सक्षम - अच्छा दिख रहा है: यहाँ छवि विवरण दर्ज करें

Processed 1064680 pages for database 'XXX', file 'XXX' on file 1.
Processed 29 pages for database 'XXX', file 'XXX' on file 1.
BACKUP DATABASE successfully processed 1064709 pages in 59.073 seconds (140.809 MB/sec).

और एक नियंत्रण के रूप में, मैं इस मुद्दे की पुष्टि करने के लिए TOE और LSO दोनों को अक्षम कर दिया था: यहाँ छवि विवरण दर्ज करें

Processed 1064720 pages for database 'XXX', file 'XXX' on file 1.
Processed 13 pages for database 'XXX', file 'XXX' on file 1.
BACKUP DATABASE successfully processed 1064733 pages in 60.675 seconds (137.094 MB/sec).

निष्कर्ष में ऐसा लगता है कि सक्षम ब्रॉडकॉम एनआईसीएस टीसीपी ऑफलोड इंजन समस्याओं का कारण है। जैसे ही टीओई अक्षम था, सब कुछ एक आकर्षण की तरह काम करता था। मुझे लगता है मैं आगे जाने वाले किसी भी अधिक ब्रॉडकॉम एनआईसी का आदेश नहीं दे रहा हूं।

अपडेट - डाउन CIFS सर्वर जाता है
आज समान और कामकाजी CIFS सर्वर ने IO अनुरोधों को लटकाना शुरू कर दिया। यह सर्वर SQL सर्वर नहीं चला रहा था, बस सादा विंडोज वेब सर्वर 2008 R2 सीआईएफएस पर शेयरों की सेवा कर रहा था। जैसे ही मैंने उस पर टीओई को निष्क्रिय किया, वैसे ही सब कुछ सुचारू रूप से चलने लगा।

बस पुष्टि करता है कि मैं कभी भी ब्रॉडकॉम एनआईसीएस पर टीओई का उपयोग नहीं करूंगा, अगर मैं ब्रॉडकॉम एनआईसी से बिल्कुल भी नहीं बच सकता।


डेटा फाइलें एक समर्पित 6-डिस्क RAID10 LUN पर हैं। बैकअप फ़ाइलों को एक अलग LUN पर संग्रहीत किया जाता है। अब तक मैं कोई संकेत नहीं देखता कि बैकअप ड्राइव / फाइलें प्रभावित होती हैं, यह केवल डेटा ड्राइव लगती है।
मार्क एस रासमुसेन

लिखें कैश सभी LUN के लिए सक्षम है, पूरे बोर्ड में डिफ़ॉल्ट सेटिंग्स। मुझे नहीं लगता कि यह कैश से संबंधित है, क्योंकि एनयूएल बैकअप भी समस्याएं दिखाते हैं - इस प्रकार लेखन मुद्दों को समाप्त करते हैं। पढ़ने के लिए, प्रत्येक नियंत्रक में 2GB रीड कैश है, साथ ही होस्ट पर मेमोरी (जिसमें अनंत PLE दिया गया है जो बहुत सारी मेमोरी है)।
मार्क एस रासमुसेन

जवाबों:


14

ध्यान दें कि सभी सर्वर अप-टू-डेट ड्राइवरों के साथ एक ही एनआईसी - ब्रॉडकॉम 5709 सी का उपयोग करते हैं। सर्वर खुद डेल R610 के हैं।

काइल ब्रांट ब्रॉडकॉम नेटवर्क कार्ड पर एक राय है जो मेरे खुद के (दोहराया) अनुभव को गूँजती है।

ब्रॉडकॉम, डाई मुथा

मेरी समस्याएं हमेशा टीसीपी ऑफ़लोड सुविधाओं के साथ जुड़ी हुई हैं और 99% मामलों में एक-दूसरे नेटवर्क कार्ड को अक्षम या स्विच करने से लक्षणों का समाधान हुआ है। एक क्लाइंट जो (आपके मामले में) डेल सर्वर का उपयोग करता है, हमेशा अलग-अलग इंटेल एनआईसी का आदेश देता है और निर्माण पर ऑन-बोर्ड ब्रॉडकॉम कार्ड को अक्षम करता है।

जैसा कि इस MSDN ब्लॉग पोस्ट में वर्णित है , मैं OS में अक्षम करने के साथ शुरू करूंगा:

netsh int ip set chimney DISABLED

IIRC कुछ परिस्थितियों में कार्ड ड्राइवर स्तर पर सुविधाओं को अक्षम करना आवश्यक हो सकता है, यह निश्चित रूप से ऐसा करने के लिए चोट नहीं पहुंचाएगा।


4

ऐसा नहीं है कि मैं एक SAN / डिस्क विशेषज्ञ हूं (यहाँ पर ऐसे लोग हैं जो मुझसे ज्यादा जानते हैं) ... मैं केवल वही साझा करता हूं जो मैंने थोड़ा किया है और ज्यादातर पढ़ा :)

जोनाथन केहियास और टेड क्रुएगर ने एक पुस्तक "ट्रबलशूटिंग एसक्यूएल सर्वर" लिखी जिसमें डिस्क प्रदर्शन पर कुछ अच्छी जानकारी है। आप यहाँ से मुफ्त में पीडीएफ प्राप्त कर सकते हैं । (मैं अपने डेस्क के लिए इसका मुद्रित संस्करण भी खरीद सकता हूं।)

वैसे भी उनके पास एक अच्छी क्वेरी है जिसका उपयोग sysinos_io_virtual_file_stats को जांचने और आपकी डेटा फ़ाइलों पर औसत विलंबता की जांच करने के लिए किया जा सकता है। आप पा सकते हैं कि RAID10 डेटा फ़ाइलों के लिए निवास करने के लिए आदर्श कॉन्फ़िगरेशन नहीं है।


यहां तक ​​कि अगर RAID10 इष्टतम कॉन्फ़िगरेशन नहीं था, तो मैं यह नहीं देख सकता कि यहां मुद्दा है। सामान्य उपयोग के दौरान डिस्क पर व्यावहारिक रूप से शून्य गतिविधि होती है, और एक गलत RAID स्तर इन जैसे धीमी गति से IO अनुरोधों का हिसाब नहीं दे सकेगा। जैसा कि SQLIO से पता चलता है कि मैं 200MB / s + के साथ लिखने में सक्षम हूं और 2-4k IOPS के साथ 100MB / s + के साथ पढ़ता हूं - इसलिए बहुत क्षमता है। मैंने पोस्ट को dm_io_virtual_file_stats क्वेरी परिणामों के परिणामों के साथ अपडेट किया है। ध्यान दें कि यदि आप इसे सीधे खोलते हैं, तो छवि बड़ी है।
मार्क एस। रासमुसेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.