2009-04-24 12 views
5

मेरे पास एक ओपन सोर्स जावा एप्लिकेशन है जो दृढ़ता के लिए हाइबरनेट और एचएसक्यूएलडीबी का उपयोग करता है। मेरे सभी खिलौनों के परीक्षणों में, चीजें तेजी से चलती हैं और सबकुछ अच्छा होता है। मेरे पास एक ग्राहक है जो लगातार कई महीनों तक सॉफ्टवेयर चला रहा है और उस समय उनके डेटाबेस में काफी वृद्धि हुई है, और प्रदर्शन धीरे-धीरे गिरा दिया गया है। अंत में यह मेरे लिए हुआ कि डेटाबेस समस्या हो सकती है। जहां तक ​​मैं लॉग स्टेटमेंट से कह सकता हूं, सर्वर में सभी गणना जल्दी होती है, इसलिए यह परिकल्पना के अनुरूप है कि डीबी गलती हो सकती है।hsqldb/hibernate ऐप के प्रदर्शन को कैसे ट्यून करें

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

एक छोटे से अंधेरे को खोजने के लिए पहले से ही कुछ गर्म धब्बे पाए गए हैं - मैंने एक कॉल देखा जहां मैं किसी विशेष वर्ग की सभी वस्तुओं को समझा रहा था ताकि यह पता चल सके कि क्या कोई था। मानदंड में एक पंक्ति परिवर्तन [.setMaxResults (1)] ने आधे सेकेंड से वर्चुअल तात्कालिक तक कॉल को बदल दिया। मैं उन स्थानों को भी देखता हूं जहां मैं एक ही लेनदेन के भीतर कई बार डीबी से एक ही सवाल पूछता हूं। मैंने अभी तक जवाब कैश करने का तरीका नहीं निकाला है, लेकिन जो मैं वास्तव में चाहता हूं वह एक उपकरण है जो मुझे इस तरह की चीजों को अधिक व्यवस्थित रूप से देखने में मदद करता है।

उत्तर

3

दुर्भाग्यवश, जहां तक ​​मुझे पता है, उसके लिए कोई उपकरण नहीं है।

लेकिन वहाँ कुछ चीजें आप जांच करना चाह सकते हैं:

  • आप आलसी लोड करने के बजाय उत्सुक लोड हो रहा है का उपयोग कर रहे हैं? आपकी समस्या के विवरण से, ऐसा लगता है कि आप आलसी लोडिंग का उपयोग नहीं कर रहे हैं ...
  • क्या आपने चालू किया है और अपना दूसरा-स्तरीय कैशिंग सही तरीके से कॉन्फ़िगर किया है? क्वेरी कैश सहित? हाइबरनेट कैशिंग तंत्र बेहद शक्तिशाली और लचीला है।
  • क्या आपने हाइबरनेट खोज का उपयोग करने पर विचार किया है? आपकी क्वेरी के आधार पर, अपाचे ल्यूसीन के शीर्ष पर हाइबरनेट सर्च फुल टेक्स्ट इंडेक्स आपको प्रश्नों को तेज कर सकता है (क्योंकि यह अनुक्रमण प्रणाली बहुत शक्तिशाली है)
+0

मैंने डीबी कॉन्फ़िगरेशन पर कोई प्रदर्शन ट्यूनिंग नहीं किया है। मैंने माना था कि मेरी समस्या खराब विचारों की गलती या गलत सवाल पूछने की अधिक संभावना थी। मुझे लगता है कि मैं प्रश्नों की संख्या और उनके खर्च को कम करने के लिए एक रास्ता खोजना चाहता हूं, और फिर (80% तक उपयोग को काटने के बाद) उस कम लोड पर कैशिंग और अन्य चाल का उपयोग कर डीबी को गति दें। लेकिन मैं डीबी उपयोग को ट्यून करने में एक विशेषज्ञ नहीं हूं। क्या आप आवेदन से पहले डीबी को ट्यून करने का सुझाव देंगे? – PanCrit

+0

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

0

आप HSQLDB में कितना डेटा संग्रहीत कर रहे हैं? मुझे नहीं लगता कि यह डेटा के बड़े सेट प्रबंधित करते समय अच्छा प्रदर्शन करता है, क्योंकि यह केवल फाइलों में सबकुछ संग्रहीत कर रहा है ...

+0

मुझे नहीं लगता कि यह hsqldb क्या कर सकता है की तुलना में यह विशाल है। .script फ़ाइल लगभग 300K लाइनें लंबी है (328 9 1015 वर्ण)। मैंने पहले देखा था, और 3000 बाजार और 150 के व्यापार डीबी में संग्रहीत हैं। सभी वस्तुओं पर कुल 250K पंक्तियां हो सकती हैं। – PanCrit

0

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

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

0

यहां रिपोर्ट करने के लिए बहुत कुछ। मेरे पास कुछ नतीजे हैं, और मैं अभी भी अच्छे उत्तरों की तलाश में हूं।

मैं सहायता करने वाले टूल की एक जोड़ी मिल गया है:

VisualVM (BTrace साथ, या ट्रेस में निर्मित) का पता लगाने के साथ मदद करने का दावा करता है, लेकिन मैं किसी भी उपकरण है जो समय से पता चलता ढूँढने में सक्षम नहीं किया गया है विधि कॉल पर।

आपकीकिट उपयोगी होने के लिए प्रतिष्ठित है; मैंने ओपन सोर्स लाइसेंस के लिए कहा है।

मुझे मिली सबसे उपयोगी चीज हिबर्नेट के आंकड़ों में निर्मित है। यदि आप अपनी संपत्तियों में hibernate.generate_statistics true सेट करते हैं, तो आप sessionFactory.getStatistics() भेज सकते हैं, और विस्तृत ऑब्जेक्ट्स को संग्रहीत किया जा सकता है और पुनर्प्राप्त किया जा सकता है और कैश को क्या प्रभावित करता है। मैंने qeuryStatistics में जो जवाब चाहते थे, उनमें से एक पाया, जो प्रत्येक संकलित क्वेरी के लिए रिपोर्ट करता है, कैश हिट करता है और याद करता है, क्वेरी कितनी बार चलती है, कितनी पंक्तियां वापस आती हैं, और औसत, अधिकतम और न्यूनतम निष्पादन समय। इन समयों ने इसे काफी स्पष्ट किया जहां समय चल रहा था।

मैंने फिर कैशिंग पर कुछ पढ़ा। रजेन्हा का सुझाव सही था। [मैं अपने उत्तर को अभी के रूप में चिह्नित कर दूंगा।] मैंने अपनी संपत्तियों में hibernate.cache.use_query_cache true जोड़ा, और मेरे अधिकांश प्रश्नों में query.setCacheable(true); जोड़ा। मैंने अपनी कुछ .hbm.xml फ़ाइलों में <cache usage="read-write"/> भी जोड़ा। अब मेरे ज्यादातर आंकड़े कैश हिट का विशाल प्रावधान दिखा रहे हैं, और प्रदर्शन काफी बेहतर है।

मुझे अभी भी निष्पादन समय का पता लगाने में मदद करने के लिए कुछ टूल पसंद आएंगे, इसलिए मैं सबसे स्पष्ट रूप से सबसे खराब समस्याओं पर हमला कर सकता हूं, लेकिन यह एक बड़ी मदद है। शायद उपरोक्त ट्रेसिंग टूल में से एक मदद करने के लिए बाहर हो जाएगा।

+0

yourkit उपयोगी और उपयोग करने में आसान है। – PanCrit

0

टेराकोटा 3.1 में, आप टेराकोटा डेवलपर कंसोल का उपयोग करके रीयल-टाइम में उन सभी आंकड़ों की निगरानी कर सकते हैं। आप कैश आंकड़ों के लिए ऐतिहासिक ग्राफ देख सकते हैं, और हाइबरनेट आंकड़े या कैश आंकड़े क्लस्टर-वाइड या प्रति-नोड आधार पर देख सकते हैं।

टेराकोटा खुला स्रोत है। अधिक जानकारी और डाउनलोड Terracotta for Hibernate पर है।

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