2015-03-10 9 views
5

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

हमारे उपयोग के मामले का समर्थन करता है:

  1. उच्च पढ़ें/लिखें throughputs।
  2. पढ़ने के लिए उच्च संवेदनशीलता।
  3. टाइटन में नोड मानों के लिए लगातार अपडेट। कारणों को कैसंद्रा में अपडेट किया जा रहा है। समतल संघनन रणनीतियों
  4. tombstone_compaction_interval 60 सेकंड के रूप में उपयोग करते हुए का उपयोग करके

    1. आक्रामक संघनन:

    ऊपर उपयोग के मामलों को देखते हुए, हम पहले से ही कैसेंड्रा आक्रामक तरीके से निम्न करने के लिए अनुकूलित कर रहे हैं। [चेतावनी] (ReadStage: 7510) ऑर्ग

  5. tombstone_threshold का उपयोग करते हुए 0.01
  6. gc_grace_seconds सेट करके 1800
निम्नलिखित अनुकूलन के बावजूद

होने के लिए, हम अभी भी कैसेंड्रा में चेतावनी को देख रहे हैं के लिए इसी तरह लॉग .apache.cassandra.db.filter.SliceQueryFilter: 0graphindex में 0 लाइव और 10350 tombstoned कोशिकाओं को पढ़ें (tombstone_warn_threshold देखें)। 8001 कॉलम अनुरोध किया गया था, स्लाइस = [00-एफएफ], delInfo = {deletedAt = -9223372036854775808, localDeletion = 2147483647}

कभी कभी समय की प्रगति, हम भी देख विफलता सीमा उल्लंघन किया है और त्रुटियों का कारण बनता।

हमारी cassandra.yaml फ़ाइल में tombstone_warn_threshold 10000 होने के लिए है, और tombstone_failure_threshold 250000 पर अनुशंसित की तुलना में बहुत अधिक होने के लिए, कोई वास्तविक ध्यान देने योग्य लाभ नहीं है।

किसी भी मदद की है कि हम सही विन्यास को इंगित कर सकते हैं बहुत सराहना की जाएगी अगर वहाँ आगे अनुकूलन के लिए कक्ष। आपके समय और मदद के लिए अग्रिम धन्यवाद।

+0

क्या आप अक्सर डेटा हटा रहे हैं? यह मेरी समझ है कि जब तक डेटा स्पष्ट रूप से हटाया या समाप्त नहीं हो जाता तब तक किम्बस्टोन नहीं बनाए जाते हैं। –

+0

हमारा विश्वास यह है कि टाइटन ग्राफडीबी जो आंतरिक रूप से कैसंद्रा के साथ हमारे सभी इंटरैक्शन को संभालती है, वह हटा सकता है और हर अद्यतन के लिए नए बनाता है, जो हटाए जाने की संख्या में जोड़ रहा है। – Rohit

+0

यह पुष्टि करना अच्छा होगा कि क्या यह मामला था। क्या आप अपने कैसंड्रा नोड्स में से एक पर संभाव्य ट्रेसिंग (http://www.datastax.com/documentation/cassandra/2.0/cassandra/tools/toolsSetTraceProbability.html) सक्षम कर सकते हैं यह देखने के लिए कि क्या हटाए गए हैं? एक और संभावना यह है कि कॉलम की समयसीमा समाप्त हो रही है (टीटीएल के साथ सेट), क्या आपको लगता है कि यहां भी हो रहा है? –

उत्तर

6

Tombstones से दूर जमा नहीं कर रहे हैं जब तक एक मेज पर gc_grace_seconds विन्यास किसी दिए गए समाधि का पत्थर के लिए बीत जाने पर। तो यहां तक ​​कि आपके कॉम्पैक्शन अंतराल को बढ़ाने से आपके tombstones को तब तक नहीं हटाया जाएगा जब तक gc_grace_seconds समाप्त नहीं हो जाता है, डिफ़ॉल्ट 10 दिनों के साथ। आप gc_grace_seconds को कम मान पर ट्यून करने का प्रयास कर सकते हैं और अधिक बार मरम्मत कर सकते हैं (आमतौर पर आप हर gc_grace_seconds_in_days - 1 दिनों के लिए मरम्मत शेड्यूल करना चाहते हैं)।

+0

एंडी वापस पाने के लिए धन्यवाद। अच्छा मुद्दा है कि आपने उल्लेख किया है। हम जीसी अनुग्रह सेकंड को 1800 भी सेट कर रहे हैं। मैंने अपनी पोस्ट को उस भाग को प्रतिबिंबित करने के लिए भी संपादित किया। – Rohit

7

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

बारे हटाता http://www.slideshare.net/planetcassandra/8-axel-liljencrantz-23204252 (स्लाइड 34-39)

+1

धन्यवाद कर्टिस। मैं इसे देख लूंगा और देख सकता हूं कि क्या बदलाव हैं जो हम डेटा मॉडल के साथ कर सकते हैं। समस्या का एक हिस्सा यह है कि टाइटन ग्राफिंग सर्वर के उपयोग के साथ डेटा मॉडल हमारे द्वारा समेकित किया गया है। – Rohit

+1

हाय @ रोहित आप इस बारे में एक विचार प्राप्त कर सकते हैं कि टाइटन डेटा [यहां] (http://s3.thinkaurelius.com/docs/titan/0.5.4/data-model.html) से कैसे रहता है। असल में हमें क्या करना है हटाए गए कोने और किनारों को कम करना है। –

1

चर आप मदद कर रहे हैं आप tombstones की समय सीमा समाप्त देखते है, लेकिन यह ध्यान देने योग्य बात यह है कि जब tombstones gc_grace_seconds तक पर्ज नहीं किया जा सकता, कैसेंड्रा कोई गारंटी कि tombstones बनाता है लायक है gc_grace_seconds पर शुद्ध किया जाना चाहिए। दरअसल, कबूतरों को तब तक संकलित नहीं किया जाता है जब तक कि टॉम्बस्टोन युक्त स्टेस्टेबल को कॉम्पैक्ट नहीं किया जाता है, और फिर भी, यदि कोई अन्य कोशिकाएं छायांकित होती हैं तो इसे समाप्त नहीं किया जाएगा।

इसके परिणामस्वरूप टॉम्बस्टोन संभावित रूप से बहुत लंबे समय तक चल रहे हैं, विशेष रूप से यदि आप ऐसे स्टेबल्स का उपयोग कर रहे हैं जो अक्सर कम से कम एसटीसीएस एसस्टेबल हैं (कहें, बहुत बड़े एसटीसीएस एसस्टेबल)। इस समाधान के लिए, उपकरण forceUserDefinedCompaction को JMX समाप्ति बिंदु के रूप में ऐसी मौजूद है - अगर आप JMX अंतिम बिंदुओं का उपयोग कर में निपुण नहीं कर रहे हैं, उपकरण आप के लिए यह करने के लिए स्वचालित रूप से मौजूद जैसे http://www.encql.com/purge-cassandra-tombstones/

1

तो यहाँ हर किसी को अधिकार है। यदि आप अक्सर मरम्मत और कॉम्पैक्ट करते हैं तो आप अपने gc_grace_seconds संख्या को कम करते हैं।

हालांकि यह विचार करने योग्य है कि सम्मिलित नल एक डिलीट के बराबर है। यह आपकी मकबरे की संख्या में वृद्धि करेगा। यदि आप तैयार कथन का उपयोग कर रहे हैं तो इसके बजाय आप UNSET_VALUE डालना चाहेंगे। शायद आपके लिए बहुत देर हो चुकी है, लेकिन अगर कोई और यहां आती है।

संबंधित मुद्दे