Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

HikariCP:Oracle 11g के लिए अधिकतम लाइफटाइम सेट करने के लिए किस डेटाबेस स्तर के टाइमआउट पर विचार किया जाना चाहिए

संक्षिप्त उत्तर:कोई नहीं (डिफ़ॉल्ट रूप से)।

रिकॉर्ड के लिए (लिंक बदलने की स्थिति में यहां विवरण शामिल करने के लिए), हम संपत्ति के बारे में बात कर रहे हैं maxLifetime HikariCP का:

<ब्लॉकक्वॉट>

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

मेरे अनुभव में, यह अच्छी बात है कि HikariCP ऐसा करता है। जहाँ तक मैं बता सकता हूँ डिफ़ॉल्ट रूप से Oracle कनेक्शन के लिए अधिकतम जीवनकाल लागू नहीं करता (न तो JDBC ड्राइवर साइड (1) पर और न ही सर्वर साइड (2) पर)। तो इस संबंध में, "बुनियादी ढांचे द्वारा लगाई गई कनेक्शन समय सीमा "+अनंत है -- और यह हमारे लिए एक समस्या थी, क्योंकि हमने लंबे समय तक चलने वाले कनेक्शन के साथ समस्याओं का निरीक्षण किया था। इसका मतलब यह भी है कि कोई भी मान "कम से कम 30 सेकंड कम है ", डिफ़ॉल्ट सहित :)

मैं मानता हूं कनेक्शन परत इस बारे में कुछ नहीं करती है क्योंकि यह ऐसी चीजों को संभालने के लिए ऊपर पूल परत पर गिना जाता है। यह (अब बहिष्कृत) निहित कनेक्शन पूल के साथ संभव नहीं था, और मुझे नहीं पता कि यूसीपी (प्रतिस्थापन) ऐसा करता है, लेकिन यदि आप हिकारीसीपी का उपयोग करते हैं तो आप उनका उपयोग नहीं करते हैं।

अब, किसी दिए गए कनेक्शन के लिए 30 मिनट (आमतौर पर विभिन्न उद्देश्यों के लिए कई बार पुन:उपयोग के बाद) के बाद, HikariCP इसे बंद कर देता है और एक नया कनेक्शन बनाता है। इसकी बहुत मामूली लागत है, और लंबे समय तक चलने वाले कनेक्शन के साथ हमारे मुद्दों को ठीक किया। हम उस डिफ़ॉल्ट से खुश हैं, लेकिन फिर भी इसे केवल स्थिति में कॉन्फ़िगर करने योग्य बनाते हैं (नीचे 2 देखें)।

(1) OracleDataSource इसे नियंत्रित करने के लिए कोई कॉन्फ़िगरेशन बिंदु (संपत्ति या सिस्टम गुण) प्रदान नहीं करता है, और मैंने देखा अनंत जीवनकाल।

(2) सर्वर-साइड सीमाओं के लिए, प्रोफ़ाइल पैरामीटर देखें IDLE_TIME . इस उत्तर को उद्धृत करते हुए:

<ब्लॉकक्वॉट>

Oracle डिफ़ॉल्ट रूप से निष्क्रियता के कारण कनेक्शन बंद नहीं करेगा। आप किसी प्रोफ़ाइल को IDLE_TIME के ​​साथ कॉन्फ़िगर कर सकते हैं ताकि Oracle निष्क्रिय कनेक्शन बंद कर सके।

यह सत्यापित करने के लिए कि IDLE_TIME का मान क्या है आपके उपयोगकर्ता के लिए, इस प्रश्नोत्तर के उत्तरों को मिलाकर:

select p.limit
from dba_profiles p, dba_users u
where p.resource_name = 'IDLE_TIME' and p.profile = u.profile and u.username = '...'
;

डिफ़ॉल्ट मान UNLIMITED है ।

कृपया ध्यान दें कि अन्य सीमाएं लागू हो सकती हैं (फ़ायरवॉल... ) जो हस्तक्षेप कर सकती हैं। तो बेहतर होगा कि आप इसे कॉन्फ़िगर करने योग्य बनाएं , यदि आप अपना उत्पाद परिनियोजित करते समय ऐसी समस्याओं का पता लगाते हैं।

Linux पर, आप भौतिक कनेक्शन के अधिकतम जीवनकाल को सत्यापित कर सकते हैं अपने डेटाबेस से जुड़े टीसीपी सॉकेट की निगरानी करके। मैं नीचे अपने सर्वर पर स्क्रिप्ट चला रहा हूं (डीबी के दृष्टिकोण से यह क्लाइंट है होस्ट), इसमें 1 तर्क लगता है, ip:port आपके ऑरैकल नोड का, जैसा कि यह netstat -tan . के आउटपुट में दिखाई देता है (या एक पैटर्न यदि आपके पास कई नोड हैं)।

#!/bin/bash
target="$1"
dir=$(mktemp -d)
while sleep 10
do
    echo "------------ "$(date)
    now=$(date +%s)
    netstat -tan | grep " $target " | awk '{print $4}' | cut -f2 -d: | while read port
    do
        file="p_$port"
        [ ! -e $file ] && touch $file
        ftime=$(stat -c %Z "$file")
        echo -e "$port :\t "$(( now - ftime))
    done
done
\rm "$dir"/p_*
\rmdir "$dir"

<उप>यदि आप इसे चलाते हैं और sleep के दौरान इसे ctrl-c से रोकते हैं समय, इसे लूप से बाहर निकलना चाहिए और अस्थायी निर्देशिका को साफ करना चाहिए, लेकिन यह 100% फुलप्रूफ नहीं है

परिणामों में किसी भी पोर्ट को 1800 सेकंड से अधिक का मान नहीं दिखाना चाहिए (यानी 30 मिनट), एक मिनट दें या लें। नीचे उदाहरण आउटपुट देखें, पहला नमूना 1800 से ऊपर के 2 सॉकेट दिखाता है, वे 10 सेकंड बाद चले गए हैं।

------------ Thu Jul 6 16:09:00 CEST 2017
49806 :  1197
49701 :  1569
49772 :  1348
49782 :  1317
49897 :  835
49731 :  1448
49620 :  1830
49700 :  1569
49986 :  523
49722 :  1498
49715 :  1509
49711 :  1539
49629 :  1820
49732 :  1448
50026 :  332
49849 :  1036
49858 :  1016
------------ Thu Jul 6 16:09:10 CEST 2017
49806 :  1207
49701 :  1579
49772 :  1358
49782 :  1327
49897 :  845
49731 :  1458
49700 :  1579
49986 :  533
49722 :  1508
49715 :  1519
49711 :  1549
49732 :  1458
50026 :  342
49849 :  1046
49858 :  1026

आपको स्क्रिप्ट को देखने के लिए 30 मिनट से अधिक समय तक चलाने की आवश्यकता होगी, क्योंकि यह पहले से मौजूद सॉकेट्स की उम्र नहीं जानता है




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जावा:ऑरैकल डेटाबेस में संग्रहीत कार्यविधि को कॉल करना

  2. मानों के एक ही ब्लॉक से संबंधित मानों को अलग किए बिना कई अद्वितीय मान प्राप्त करें

  3. GTT तालिका आँकड़े और SYS.WRI$_OPTSTAT_TAB_HISTORY

  4. तालिका से अधिकतम मूल्य से शुरू होने वाला ओरेकल अनुक्रम कैसे बनाएं?

  5. Oracle डाटाबेस परिवर्तन अधिसूचना