2016-12-28 6 views
5

मैं connection pooling के साथ MySQL के temporary tables का उपयोग कर रहा हूं।कनेक्शन पूल और रिटर्न पर अस्थायी तालिकाओं को जारी करना

आम तौर पर, सत्र में बनाए गए अस्थायी टेबल उस सत्र में रहते हैं और कनेक्शन बंद होने पर गिरा दिया जाता है। हालांकि, चूंकि मैं कनेक्शन पूलिंग का उपयोग कर रहा हूं और भौतिक कनेक्शन वास्तव में बंद नहीं होते हैं जब java.sql.Connection.close() कहा जाता है, मुझे आसपास के अस्थायी तालिकाओं को ढूंढना और अगले सत्र को प्रभावित करना है।

यह डीबी पर संसाधन रिसाव का कारण बनता है क्योंकि अस्थायी तालिकाओं को तुरंत मुक्त नहीं किया जाता है, साथ ही नामांकन तालिका नामों के कारण नाम संघर्ष भी होते हैं।

सहजता से, जब मैं कनेक्शन उधार लेता हूं तो मुझे साफ स्लेट की उम्मीद थी। यह कैसे प्राप्त करता है?

  • MySQL के लिए समतुल्य SQL Server's sp_reset_connection प्रतीत नहीं होता है।
  • भले ही वहां था, मैं देख सकता हूं कि कनेक्शन कब वापस आने पर इसे कॉल करने के लिए dbcp2 can be configured पर नहीं देखा जा सकता है।
  • पूल पर लौटने पर हमेशा भौतिक कनेक्शन बंद करना काम कर सकता है, लेकिन मैं नहीं देख सकता कि यह करने के लिए dbcp2 को कैसे कॉन्फ़िगर किया जा सकता है।
अस्थायी तालिकाओं के अलावा

, इस समस्या को भी प्रभावित करता है:

+0

* "पूल पर लौटने पर हमेशा भौतिक कनेक्शन बंद करना" * काम कर सकता है, यह शब्दों में एक विरोधाभास है, है ना? अगर कनेक्शन बंद है, तो यह पूल में वापस नहीं जा रहा है। जब आप 'रोलबैक रिलीज' क्वेरी जारी करके पूरा कर लेते हैं तो आप डीबी कनेक्शन को रिलीज़ करने के लिए पूल को मजबूर करने का प्रयास कर सकते हैं; यह निश्चित रूप से वह करेगा जो आप करने की कोशिश कर रहे हैं, लेकिन दुष्प्रभाव दिलचस्प होंगे और पूलिंग एक हो जाएगी थोड़ा व्यर्थ मूल रूप से, पूलिंग के साथ, आपके कोड को यह सुनिश्चित करना होगा कि यह अपना प्रारंभिक प्रारंभ करे, 'तालिका बनाने से पहले ड्रोप टेम्पलेट टेबल ...' ... –

उत्तर

0

उपयोग MySqlConnection.ClearPool (कनेक्शन) का विमोचन; काम कर सकते हैं। मेरे पास GET_LOCK(), MySqlConnection.ClearPool (कनेक्शन) के लिए इस समस्या का समाधान हो सकता है।

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