मैं वर्तमान में काम पर एक प्रमुख परियोजना के लिए ईजेबी 3 के साथ प्रतिष्ठा के रूप में प्रयोग कर रहा हूं। जिन चीजों में मैं देख रहा हूं उनमें से एक क्वेरी कैशिंग है।हाइबरनेट के साथ क्वेरी कैशिंग पूछताछ क्वेरी को दस गुना धीमा क्यों करती है?
मैंने जेपीए एनोटेशन, एक @ लॉकल बिजनेस इंटरफ़ेस और एक ईजेबी-जेएआर में @ स्टेटलेस कार्यान्वयन के साथ एक बहुत ही सरल डोमेन मॉडल बनाया है, जिसे एक ईएआर में तैनात किया गया है, जिसमें कुछ बुनियादी परीक्षण करने के लिए एक बहुत ही सरल वेबपैप है। EAR को JBoss 5.0.1 डिफ़ॉल्ट कॉन्फ़िगरेशन में कोई संशोधन नहीं किया गया है। यह बहुत कठोर था, और उम्मीद के रूप में काम किया।
- मैं एक डोमेन वर्ग है कि केवल एक आईडी और एक स्ट्रिंग मान नक्शे है, और है कि विशेष रूप से 10000 के बारे में पंक्तियों बनाया है:
लेकिन, मेरा नवीनतम परीक्षण शामिल क्वेरी कैशिंग, और मैं कुछ अजीब परिणाम मिला तालिका
- व्यापार सेम में, वहाँ एक बहुत ही सरल क्वेरी, MyClass मीटर
- से चयन मीटर कोई कैश के साथ, इस 400 मि.से के बारे में औसतन
- में कार्यान्वित क्वेरी कैश (क्वेरी पर संकेत के माध्यम से) सक्षम होने के साथ है, पाठ्यक्रम का पहला निष्पादन थोड़ा लंबा लगता है, लगभग 1200 एमएमएस अगले निष्पादन औसत पर 3500ms लेते हैं!
यह मुझे परेशान करता है, इसलिए मैंने लॉग को देखने के लिए हाइबरनेट के show_sql को सक्षम किया। Uncached, और कैश सक्षम के साथ पहले निष्पादन पर, अपेक्षित के रूप में एक चयन लॉग है। जब मुझे कैश हिट मिलनी चाहिए, तो हाइबरनेट डेटाबेस तालिका में प्रत्येक पंक्ति के लिए एक चयन लॉग करता है।
यह निश्चित रूप से धीमी निष्पादन समय की व्याख्या करेगा, लेकिन क्या कोई मुझे बता सकता है कि ऐसा क्यों होता है?
आपको यहां मेरे प्रश्न पर कैश के बारे में कुछ उपयोगी जानकारी मिल सकती है: * http://tech.puredanger.com/2009/07/10/hibernate-query-cache/ –