Oracle-ის სესია VPN-ით ჩაწყდა? შეამოწმეთ keepalive შრეები
მონაცემთა ბაზაზე მშვიდი მუშაობა შეიძლება გადაურჩეს უმოქმედო ქსელურ ნაკადს. გაიარეთ socket-ის გადამრთველი, ბირთვის ნაგულისხმევი მნიშვნელობები და Oracle Net-ის პარამეტრი სწორი თანმიმდევრობით.
ოცდახუთი წუთი სასარგებლო მუშაობისა მონაცემთა ბაზაზე თითქმის არავითარ გამოსავალს არ იძლევა, და ბილიკის ყოველი მოწყობილობიდან ეს ნაკადი უმოქმედოდ გამოიყურება. სწორედ უმოქმედო მდგომარეობა გროვდება. შემდგომი ანგარიში ყოველთვის ერთი ფორმისაა: მოთხოვნა მუშაობდა, შემდეგ სესია გაქრა, და შედეგი არასდროს ჩამოვიდა.
ოთხი შემოწმება წყვეტს, გადარჩება თუ არა მშვიდი სესია, და ისინი socket-იდან გარეთ მიდიან. შეასრულეთ ისინი რიგით, რადგან თითოეული ვარაუდობს, რომ წინა შრე თავის საქმეს აკეთებს.
რომელი ნაკადი ჩუმდება
მთავარია ის კავშირი, რომელიც ატარებს მონაცემთა ბაზის ტრაფიკს, ამოცნობადი საკუთარი მისამართებითა და პორტებით. სხვა არაფერი აახლებს მას. გეითვეისკენ გაგზავნილი ping, მეორე SQL კავშირი იმავე ჰოსტიდან და გვირაბის საკუთარი პულსი ცალკეული ნაკადებია ცალკე მდგომარეობით ყოველ მოწყობილობაზე, რომელიც მათ აკვირდება.
ss -tio dst 10.60.4.20
sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes
socket-ების სია აჩვენებს ცოცხალი კავშირის ტაიმერებსა და რიგის მდგომარეობას, რაც უფრო ინფორმაციულია, ვიდრე ხელმისაწვდომობის ტესტი. sysctl მნიშვნელობები ბირთვის ნაგულისხმევი მნიშვნელობებია keepalive-ის ქცევისთვის, და შემდეგი ნაწილი ხსნის, რატომ შეიძლება ისინი არასდროს გავრცელდეს თქვენს სესიაზე. ნაგულისხმევი მნიშვნელობა, რომელიც არასდროს ამუშავდება, არ გაირჩევა სრული ნაგულისხმევი მნიშვნელობის არქონისგან.
ჩაიწერეთ მისამართები, პორტები და ინტერფეისი, რომლებსაც კავშირი იყენებს. როცა სესია კვდება, სწორედ ეს დეტალები გაძლევთ საშუალებას სწორ მოწყობილობას ჰკითხოთ, რა გააკეთა, იმის ნაცვლად, რომ იკითხოთ, მუშაობდა თუ არა ქსელი.
უმოქმედობის პოლიტიკა იწურება თუ ზღუდავს
ორი პოლიტიკა ერთსა და იმავე სიმპტომს იძლევა და საპირისპირო რეაგირებას მოითხოვს. უმოქმედობის ვადა აცილებს მდგომარეობას, რომლის განახლებაც კვალიფიციურ ტრაფიკს შეეძლო, და keepalive-ს შეუძლია ამის თავიდან აცილება. სესიის აბსოლუტური ზღვარი აცილებს ნაკადს ფიქსირებული ხანგრძლივობის შემდეგ, აქტივობის მიუხედავად, და არც ერთი keepalive ამას არ ცვლის.
ჰკითხეთ თითოეული შუამავლის მფლობელს, რომელს ახორციელებს ის. ფაირვოლი, NAT მოწყობილობა, დატვირთვის ბალანსერი და ღრუბლოვანი გეითვეი ყველას შეუძლია მდგომარეობის შენახვა, და მათ არ უნდა იყოს შეთანხმებული. ყველაზე ვიწრო განსაზღვრავს იმ ვადას, რომელიც უნდა დაამარცხოთ.
ეს განსხვავება ასევე გეუბნებათ, როდის შეწყვიტოთ რეგულირება. თუ პოლიტიკა აბსოლუტური ზღვარია, სწორი გადაწყვეტა უფრო მოკლე სამუშაო ერთეულია, გაგრძელებადი სამუშაო ან დამტკიცებული გამონაკლისი, და ქვემოთ მოცემული შემოწმება მხოლოდ დაადასტურებს, რომ keepalive-ებმა არაფერი შეცვალეს.
socket-ის გადამრთველი Linux-ის ნაგულისხმევი მნიშვნელობების მიღმა
keepalive არჩევითია თითოეული socket-ისთვის. ბირთვის ნაგულისხმევი მნიშვნელობები აღწერს, როგორ იქცევიან ზონდები მას შემდეგ, რაც socket-მა ჩართო მექანიზმი, და ისინი არ ჩრთავენ მას არსებული კავშირებისთვის. პროგრამა, რომელიც არასდროს ითხოვს ამას, ვერ იღებს არც ერთ ზონდს, რაც არ უნდა თქვან sysctl მნიშვნელობებმა.
ამიტომ მხოლოდ რიცხვების აწევა არაფერს ცვლის მონაცემთა ბაზის კლიენტისთვის. მექანიზმი უნდა ჩართოს კლიენტის ბიბლიოთეკამ ან პროგრამამ, და სადაც სტეკი კავშირის დონეზე კონტროლს გვაძლევს, შეზღუდული პარამეტრი სჯობს მთელი ჰოსტის ცვლილებას, რომელიც დაუკავშირებელ სერვისებს ეხება.
პირველ ზონდამდე ინტერვალი ასევე არ არის მოთხოვნის ვადა. ჯანსაღი კავშირი ჩუმად რჩება ზონდებს შორის, და მკვდარი პარტნიორი ზონდის ინტერვალისა და რაოდენობის მიხედვით ამოიცნობა. ამ სამი მნიშვნელობის ერთ ვადად წაკითხვა იწვევს პარამეტრებს, რომლებიც ხარვეზს ან ძალიან გვიან, ან ძალიან ნაჩქარევად აღმოაჩენენ. ისინი ამოცნობას მართავენ, არა პროგრამის მოთმინებას.
EXPIRE_TIME მონაცემთა ბაზის პარამეტრია, არა ქსელის შესწორება
Oracle Net გვთავაზობს საკუთარ სიცოცხლისუნარიანობის მექანიზმს, რომელიც პროცესის ეფექტურ პროფილში კონფიგურირდება და არა თვითნებურ ფაილში, რომელსაც შემთხვევით მსგავსი სახელი აქვს. მნიშვნელობა წუთებში გამოიხატება.
SQLNET.EXPIRE_TIME = 5
მისი მთავარი მიზანი სერვერის მხრიდან მკვდარი კავშირების ამოცნობაა, და გაუმჯობესებული მოდელის მხარდამჭერ პლატფორმებზე ის ასევე არეგულირებს TCP keepalive-ის ქცევას ამ კავშირებისთვის. ეს სასარგებლო თვისებაა: მონაცემთა ბაზის შრეს შეუძლია ზონდების მოწყობა კლიენტ პროგრამის შეცვლის თხოვნის გარეშე.
ზემოთ მოცემული საილუსტრაციო მნიშვნელობა შეთანხმებული არჩევანია სავარაუდო ვადის წინააღმდეგ, არა რეკომენდაცია. დოკუმენტირებული ზოგადი ხელმძღვანელობა უფრო გრძელი ინტერვალია, და სწორი რიცხვი დამოკიდებულია დაყენებულ იმპლემენტაციაზე, მისაღებ ზონდის ხარჯსა და ბილიკზე არსებულ განახლების რეალურ წესებზე. მოათავსეთ პარამეტრი პროფილში, რომელსაც შესაბამისი პროცესი კითხულობს, და დაადასტურეთ, რომ პროცესმა ის აიღო. Oracle ადოკუმენტირებს პროფილების ადგილებსა და ამოცნობის ქცევას თავის პარამეტრების ცნობარში.
გამოსცადეთ მშვიდი ინტერვალი, შემდეგ დაგეგმეთ აღდგენა
გაატარეთ ახალი დაშვებული კავშირი მშვიდ პერიოდში, რომელიც აღემატება იმ ვადას, რომლის დამარცხებასაც ცდილობთ, და დააკვირდით სიცოცხლისუნარიანობის ტრაფიკსა და პროგრამის შედეგს. ნუ ჩაიწერთ სასარგებლო დატვირთვის შიგთავსს, რომელიც არ გჭირდებათ; ტაიმერები და კავშირის მდგომარეობა პასუხობს კითხვას.
ss -tio dst 10.60.4.20
# after the quiet interval, same command
ls -l "$ORACLE_HOME/network/admin/sqlnet.ora"
თუ სესია მაინც ქრება, ვადა ეკუთვნის მოწყობილობას, რომელიც ჯერ არ გიკითხავთ, ან პოლიტიკა აბსოლუტური ზღვარია. თუ გადარჩა, აღნიშნეთ რომელი შრე შეიცვალა, რათა შემდეგმა მშვიდმა ოპერაციამ გამოძიება არ გაიმეოროს.
დაბოლოს, გადაწყვიტეთ, რა ხდება, როცა კავშირი მართლაც ვარდება, რადგან სიცოცხლისუნარიანობის შემოწმებები ამცირებს სიხშირეს და არასდროს აქრობს შესაძლებლობას. დაადგინეთ მონაცემთა ბაზის ოპერაციის ჩაწერილი შედეგი სანამ ხელახლა გაგზავნით: პასუხის დაკარგვა არაფერს ამტკიცებს იმის შესახებ, დადასტურდა თუ არა სამუშაო. ყველაფრისთვის, რაც უნდა გადაურჩეს ლეპტოპის დახურვას ან გვირაბის ხელახლა გაშვებას, სერვერის საკუთრებაში არსებული სამუშაო ხანგრძლივი შედეგით უფრო მყარი დიზაინია, და keepalive დამგეგმავი არ არის.