एक भारी लेखन डेटाबेस के लिए DRAM SSD पर Oracle redo लॉग लगाना?


9

मेरे पास एक Sun M4000 है जो EMC CX4-120 एरे से जुड़ा है जिसमें राइट-हैवी डेटाबेस है। लगभग 1200 IO / s और 12MB / s पर शिखर लिखते हैं।

ईएमसी के अनुसार, मैं EMC सरणी पर राइट कैश को संतृप्त कर रहा हूं।

मुझे लगता है कि सबसे सरल उपाय है कि रेड लॉग को एक DRAM आधारित SSD में स्थानांतरित करना। इससे EMC सरणी पर लोड आधा घट जाएगा और ऐप्स को लॉग बफर प्रतीक्षा नहीं दिखाई देगी। हां, DBWR एक अड़चन बन सकता है, लेकिन एप्स इसका इंतजार नहीं करेंगे (जैसे वे लोटो पर करते हैं!)।

मैं वर्तमान में लगभग 4 4GB रीडो लॉग के माध्यम से साइकिल चला रहा हूं, इसलिए 20GB या SSD से भी बड़ा फर्क पड़ेगा। चूंकि यह अल्पकालिक भंडारण है और इसे लगातार अधिलेखित किया जा रहा है, फ्लैश आधारित एसएसडी शायद एक महान विचार नहीं है।

M4000 के पास कोई अतिरिक्त ड्राइव लॉट नहीं है, इसलिए PCI-E कार्ड एकदम सही होगा, मैं बाहरी या बूट वॉल्यूम को EMC में ले जा सकता हूं और स्थानीय ड्राइव को खाली कर सकता हूं।

सूरज एक फ्लैश त्वरक F20 PCIe कार्ड बेचता है, लेकिन यह कुछ SATA डिस्क के लिए कैश लगता है, DRAM SSD समाधान नहीं। विवरण स्केच हैं, यह समर्थित रूप में M4000 को सूचीबद्ध नहीं करता है, और मैं मानव सहायता की तलाश में सूर्य के फोन के पेड़ से लड़ने से थक गया हूं। :(

क्या अन्य सहमत हैं कि एक DRAM SSD जाने का रास्ता है? किसी भी हार्डवेयर सिफारिशें?

अद्यतन नीचे एक टिप्पणी में जानकारी के अलावा, मैंने "कमिट" के लिए विभिन्न सेटिंग्स की कोशिश की और इससे कोई फर्क नहीं पड़ा।


क्या आप लॉग को कहीं संग्रह कर रहे हैं? यदि उन्हें अंततः SSD को डिस्क से कॉपी करने की आवश्यकता होती है, तो आप केवल अड़चन को संग्रह में स्थानांतरित कर सकते हैं।
गैरी

हां ... रेडो लॉग संग्रहीत किए जा रहे हैं और IO वास्तव में रीडो लॉग कॉपी के दौरान लगभग 80MB / s तक बढ़ जाता है क्योंकि यह एक अनुक्रमिक लेखन है। मुझे हमेशा लगा कि रेडो लॉग अनुक्रमिक थे, लेकिन लगता है कि नहीं।
rmeden

जवाबों:


9

पहला - मुझे लगता है कि आपके पास सरणी में बहुत कम डिस्क हैं। 1200IOPS को आसानी से 12 स्पिनिंग डिस्क (100 IOPS प्रति डिस्क बहुत उचित है) का समर्थन किया जा सकता है। यदि कैश इसे संभाल नहीं सकता है, तो इसका मतलब है कि 1200 IOPS की आपकी निरंतर लेखन दर आपके डिस्क के समर्थन से अधिक है।

वैसे भी, Redo लॉग के लिए SSD की मदद करने की संभावना नहीं है। पहला, क्या आपका सत्र ज्यादातर कमिट स्टेटमेंट पर इंतजार करता है? सत्यापित करने के लिए स्टेटस्पैक / AWR में शीर्ष प्रतीक्षा घटनाओं की जांच करें। मुझे लगता है कि आपके I / O का ~ 95% रीडो लॉग में बिल्कुल भी नहीं है। उदाहरण के लिए, 5 इंडेक्स वाली तालिका में एक एकल पंक्ति सम्मिलित करें 1 टेबल ब्लॉक को पढ़ने के लिए 1 I / O कर सकते हैं (जिसमें पंक्ति के लिए स्थान है), 5 इंडेक्स ब्लॉक (उन्हें अपडेट करने के लिए), 1 डेटा ब्लॉक, 1 पूर्ववत लिखें ब्लॉक और 5 इंडेक्स ब्लॉक (या अधिक, यदि गैर-पत्ती ब्लॉक अपडेट किए जाते हैं) और 1 फिर से ब्लॉक करें। इसलिए, स्टेटस्पैक की जांच करें और अपनी प्रतीक्षा की घटनाओं को देखें, आप डेटा / इंडेक्स के लिए READ और WRITE दोनों का बहुत इंतजार कर रहे हैं। पढ़ने का इंतजार INSERT को धीमा कर देता है, और WRITE गतिविधि READs को और भी धीमा कर देती है - यह एक ही डिस्क है (BTW - क्या आपको वास्तव में सभी अनुक्रमित की आवश्यकता है? उन लोगों को छोड़ने से जो आवेषण में तेजी लाएंगे) नहीं हैं।

जांच करने के लिए एक और चीज है RAID परिभाषा - क्या यह है RAID1 (मिररिंग - प्रत्येक लिखना दो लिखना है) या RAID 5 (प्रत्येक लिखना 2 पढ़ता है और चेकसम गणना के लिए दो लिखते हैं)। RAID-5, लेखन-गहन भार में धीमा तरीका है।

BTW - अगर डिस्क लेखन भार को नहीं बढ़ा सकती है, तो DBWR एक अड़चन होगी। आपका SGA गंदे ब्लॉकों से भरा होगा, और आपके पास नए ब्लॉक पढ़ने के लिए जगह नहीं बचेगी (जैसे कि इंडेक्स ब्लॉक को प्रोसेस / अपडेट करना होगा) जब तक DBWR डिस्क्स के लिए कुछ गंदे ब्लॉक नहीं लिख सकता। आम तौर पर शीर्ष 5 प्रतीक्षा घटनाओं के आधार पर क्या अड़चन है, इसका निदान करने के लिए स्टेटकैप / awr रिपोर्ट / एड्म की जांच करें।


1
+1 - और अगर मैं कर सका तो मैं इसे +10 दूंगा।
हेल्विक

2
सलाह के लिए +1 वास्तव में देखें कि अड़चन कहां है।
डीसीयूकी

वेट "लॉग फाइल सिंक" और "लॉग बफर स्पेस" हैं। मैं डीडी का उपयोग करके वॉल्यूम के बारे में 150MB / s प्राप्त कर सकता हूं। मुझे संदेह है कि LGWR अगले एक को जमा करने से पहले एक IO के पूरा होने की प्रतीक्षा कर रहा है। IO सेवा का समय लगभग 1ms है। EMC के पास 500MB कैश होता है, कि EMC के अनुसार पूरे बॉक्स को w / o अपग्रेड नहीं किया जा सकता है। हमारे पास सरणी में 22 टीबी हैं, वे इतने कम कैश के साथ कुछ क्यों पेश करेंगे यह मेरे से परे है। Redo लॉग वर्तमान में 5-वाइड RAID 5 में हैं, लेकिन RAID 10 के साथ कोई अंतर नहीं था (कैश पर संदेह करने का एक और कारण)
rmeden

BTW, अगर वहाँ अधिक कैश था डिस्क अभी भी नहीं रख सकता है। EMC सरणी से REDO को स्थानांतरित करके, जो डेटा डिस्क के लिए क्षमता को मुक्त करता है और I / O को आधे में काट देता है। एक छोटा DRAM SSD सबसे सस्ता, उच्च प्रदर्शन डिस्क हो सकता है क्योंकि यह छोटा हो सकता है।
rmeden

मेडन - ओरेकल प्रति सेकंड कितना रीडो लिखता है? आपने कहा कि कुल I / O 12 MB / s और 1200 IOPS है, इसका मतलब बहुत सारे छोटे IOs (औसत 10KB) हैं। यदि आप SSD में फिर से लॉग करते हैं, तो आपको अलग-अलग प्रतीक्षा घटनाएं दिखाई देंगी क्योंकि DBWR अड़चन बन जाएगा और INSERT SGA में मुफ्त बफर का इंतजार करेगा। कृपया जांचें - आपके पास किस प्रकार का RAID है, स्ट्राइप साइज़ क्या है और ओरेकल ब्लॉक साइज़ क्या है (यह भी, क्या आपके डेटाफ़ाइल्स सभी डिस्क पर धारीदार हैं?)। इसके अलावा, जांच आई / ओ के अधिकांश के लिए स्टेटस्पेक स्रोत में - है यह फिर से करना या किसी अन्य बात - मैं / हे प्रति टेबल-स्पेस जाँच
Ofir मनोर

2

dd, block i / o की तुलना में कुछ भी नहीं है।

कुछ अन्य विचारों के लिए, चारों ओर की जाँच करें, anandtech.com ने विभिन्न संयोजनों में बनाम SSD को घुमाते हुए SAS के साथ एक एक्स्टेसिव टेस्ट (MS SQL सर्वर के साथ दिया गया) किया, और Solaris की दुनिया में SSD के साथ विभिन्न भागों (लॉग, कैश, आदि) का ZFS है। )।

लेकिन हाँ, अगर RAID 5 बनाम RAID 10 समान है (लिखने के लिए), तो आप कुछ गलत कर रहे हैं। रैखिक लिखते हैं, के साथ RAID 5 तेज हो सकता है (यानी यह स्मृति में समता कर सकता है, फिर धारियों और समता को एक साथ लिख सकता है), लेकिन यादृच्छिक छोटे ब्लॉक (4-8k) के साथ, आप धारियों को अपडेट करके मार सकते हैं (के रूप में) दूसरों द्वारा नोट किया गया), छापे 10 को 2x से अधिक तेज होना चाहिए, यदि नहीं, तो कुछ गलत है।

हार्डवेयर पर पैसा खर्च करने से पहले आपको गहरी खुदाई करने की आवश्यकता है।


2

मैंने "मजबूरन" विकल्प का उपयोग करके बढ़ते UFS विभाजन के बारे में एक पोस्ट देखा और Oracle पैरामीटर "filesystemio_options" को "सेटॉल" करने के लिए सेट किया।

मैंने इसे आजमाया और ओरेकल में 4-5x सुधार लिखते हैं! हाँ!

प्रमुख लक्षण डिस्क पर कम थ्रूपुट लेकिन अच्छी प्रतिक्रिया समय थे। यह कुछ लोगों की मदद करने लगता है लेकिन दूसरों को नहीं। इसने निश्चित रूप से मेरे लिए काम किया।

मैं नए सर्वरों के लिए SSDs पर विचार कर सकता हूं, लेकिन यह सर्वर अब ठीक चल रहा है।

रॉबर्ट


सबसे अधिक संभावना है कि आपके द्वारा अनुभव किया गया स्पीड-अप प्रत्यक्ष I / O को सक्षम करने के कारण नहीं था, लेकिन एसिंक्रोनस I / O को सक्षम करने से हुआ। Oracle में, setall का अर्थ है सीधा + async।
kubanczyk

1

अगर यह बॉक्स केवल x86 / 64 बॉक्स का होता था, जो लिनक्स चला रहा होता है, तो मैंने फ्यूजनियो PCIe ड्राइव कार्ड में से एक की खुशी से सिफारिश की होगी - वे आश्चर्यजनक रूप से तेज़ हैं और SSDs जैसे भारी लेखन के साथ 'मर' नहीं जाते हैं। दुर्भाग्य से वे स्पार्क या सोलारिस के साथ समर्थित नहीं हैं, आप इस पर चर्चा करने के लिए उनसे संपर्क करना चाह सकते हैं।


1

F20e PCIe कार्ड फंक्शन I / O के समान है। यह मूल रूप से सिर्फ एक PCIe फ्लैश एसएसडी संलग्न है। भारी काम के बोझ के साथ, आपको पर्याप्त खाली ब्लॉक बनाए रखने के बारे में चिंता करने की आवश्यकता होगी (कुछ प्रकार के ड्राइव आधारित कचरा संग्रह के माध्यम से) ताकि आप एसएसडी पर अड़चन / कार्यक्रम चक्र के साथ हवा न हों, और साथ ही साथ एक फ्लैश आधारित एसएसडी पर उपलब्ध सीमित लेखन चक्र। यह निश्चित रूप से तेज़ है, लेकिन इस काम के लिए सबसे अच्छी किट नहीं हो सकती है।


जॉन को चिढ़ाता है। मुझे नहीं लगता था कि यह मेरे लिए काम करेगा। वैसे भी सूर्य M4000 पर इसका समर्थन नहीं करता है। :(
rmeden
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.