যখন এসকিউএল সার্ভারের জন্য কোনও উপলব্ধ শারীরিক মেমরি অবশিষ্ট নেই তখন কী ঘটে?


16

গুগল করার সময় আমি কিছু বিবাদী তথ্য পেয়েছি।

কিছু সাইট সূচিত করে যে যখন ডেটার জন্য কোনও শারীরিক মেমরি অবশিষ্ট থাকে না, তখন এসকিউএল সার্ভার ইতিমধ্যে বিদ্যমান ডেটা টিএমপিডিবিতে সরিয়ে দেয় (দেখুন: এসকিউএল সার্ভার: টেম্পডিবি এবং সুপারিশগুলিকে অপসারণ করা )।

তবে অন্যান্য সাইটগুলি সূচিত করে যে, যখন পর্যাপ্ত শারীরিক মেমরি অবশিষ্ট নেই, অপারেটিং সিস্টেমটি PAGE ফাইলটি ব্যবহার করতে পারে এবং শারীরিক স্মৃতি থেকে ডেটাটিকে এতে স্থানান্তর করতে পারে ( এসকিউএল সার্ভারের জন্য পৃষ্ঠা ফাইলটি দেখুন )।

আমি ভাবছি এসকিউএল সার্ভার শারীরিক স্মৃতিশক্তি শেষ হয়ে গেলে ডেটা কোথায় লিখে? টেম্পডিবি বা ওএস পৃষ্ঠা ফাইলটিতে? না হয়ত দুজনেই?

উত্তর:


28

যখন ডেটার জন্য কোনও শারীরিক মেমরি বাকী থাকে না, তখন এসকিউএল সার্ভার ইতিমধ্যে বিদ্যমান ডেটাটিকে TEMPDB এ সরিয়ে দেয়

আপনি যে নিবন্ধটির সাথে লিঙ্ক করেছেন সেটি সর্বোত্তমভাবে বিভ্রান্তিকর এবং কিছু জায়গায় ভুল। আমি মনে করি লেখক কিছু জটিল বিষয়কে অতি-সরল করার চেষ্টা করছেন এবং এটি করার ফলে কিছুটা দূরে গিয়েছিলেন।

এসকিউএল সার্ভার ডেটা মেমরি থেকে (বাফার পুল) সেইভাবে টেম্পিডবিতে স্থানান্তরিত করে না। এটি একটি "সাম্প্রতিক ব্যবহৃত ব্যবহৃত" ক্যাচিং কৌশল (সাধারণভাবে) ব্যবহার করে, সুতরাং যদি মেমরির চাপ থাকে এবং মেমরিতে নতুন ডেটা টানতে হয় তবে এসকিউএল সার্ভার নতুন ডেটা সামঞ্জস্য করতে বাফার পুল থেকে এলআরইউ ডেটা বের করবে। এই আচরণটি প্রায়শই "পেজ লাইফ প্রত্যাশা" (পিএলই) নামে একটি পারফোন কাউন্টার দ্বারা পর্যবেক্ষণ করা হয় :

পিএলই-এর সংজ্ঞাটি সেকেন্ডের মধ্যে প্রত্যাশিত সময়, যা বাফার পুলে একটি ডেটা ফাইল পৃষ্ঠা পড়ে থাকে (ডেটা ফাইলের পৃষ্ঠাগুলির মেমরি ক্যাশে) মেমোরি থেকে দূরে রাখার আগে মেমরিতে থাকবে অন্য কোনও ডেটা রাখার জন্য ফাইল পৃষ্ঠা। পিএলই ভাবার আরেকটি উপায় হ'ল পৃষ্ঠাগুলি ডিস্ক থেকে পড়ার জন্য ফাঁকা স্থান তৈরি করার জন্য বাফার পুলের উপর চাপের তাত্ক্ষণিক পরিমাপ। এই উভয় সংজ্ঞা জন্য, একটি উচ্চতর সংখ্যা ভাল।

ক্যোয়ারী এক্সিকিউশন চলাকালীন, এসকিউএল সার্ভার নির্দিষ্ট ক্রিয়াকলাপের জন্য টেম্পিডবি ব্যবহার করতে পারে। এটি সাধারণত করা হয় যদি অনুমানগুলি খারাপ হয় তবে কম উপলব্ধ মেমরি এই আচরণকে প্রভাবিত করতে পারে।

কিছু অপারেশন যা এইভাবে টেম্পডিবিতে "স্পিল" করতে পারে সেগুলি হ্যাশিং সারিগুলি (যোগ দেয় বা সমষ্টি ইত্যাদির জন্য), মেমরিতে সারিগুলি বাছাই করা এবং সমান্তরাল ক্যোয়ারী এক্সিকিউশন চলাকালীন সারিগুলিকে বাফারিং করে।

ব্যবহারকারীর অনুসন্ধানগুলি স্পষ্টভাবে টেম্পডিবিও (বৈশ্বিক বা স্থানীয় অস্থায়ী টেবিলগুলির সাথে) ব্যবহার করতে পারে এবং স্পষ্টতই টেম্পডিবি ব্যবহার করতে পারে (স্ন্যাপশট বা প্রতিশ্রুত স্ন্যাপশট বিচ্ছিন্নতার স্তর সহ)।

এই অবস্থার কোনওটিই আপনার উদ্ধৃত বক্তব্যটির সাথে সত্যই খাপ খায় না।

যখন পর্যাপ্ত শারীরিক স্মৃতি অবশিষ্ট নেই, অপারেটিং সিস্টেমটি PAGE ফাইলটি ব্যবহার করতে পারে এবং দৈহিক মেমরি থেকে ডেটা এতে স্থানান্তর করতে পারে

এটি অবশ্যই ঘটতে পারে এবং বেশিরভাগ অংশে এসকিউএল সার্ভারের নিয়ন্ত্রণের বাইরে থাকে। কিছু ধরণের ওএস-লেভেল পেজিং রোধ করার চেষ্টা করতে পারেন, যথা "মেমরিতে লক পেজ" (এলপিআইএম) চালু করে :

এই উইন্ডোজ নীতিটি নির্ধারণ করে যে কোনও অ্যাকাউন্টগুলিকে শারীরিক মেমরিতে ডেটা রাখতে কোনও প্রক্রিয়া ব্যবহার করতে পারে, যা ডিস্কে ভার্চুয়াল মেমরিতে ডেটা পৃষ্ঠাভুক্ত করা থেকে সিস্টেমকে বাধা দেয়।

সুতরাং আমরা ডিস্কে পৃষ্ঠাযুক্ত হওয়া থেকে কী বাধা দিতে পারি?

এসকিউএল সার্ভার ২০১২ এর আগে, "একক পৃষ্ঠা অ্যালোকেটর" নামক উপাদানগুলির মাধ্যমে বরাদ্দ করা পৃষ্ঠাগুলি মেমরিতে লক করা হয়েছিল (পেজড করা যায়নি)। এর মধ্যে রয়েছে বাফার পুল (ডাটাবেস পৃষ্ঠাগুলি), পদ্ধতি ক্যাশে এবং মেমরির কিছু অন্যান্য ক্ষেত্র।

দেখুন লক পেজ, ভয় টাস্ক ম্যানেজার, এবং ওয়ার্কিং সেট করুন ... সঙ্গে মজা বিস্তারিত জানার জন্য, বিশেষ করে অধ্যায় "4. এখন আমি জানি যে SQL সার্ভার x64 এ ব্যবহার করতে পারেন" লকড পেজ ", ঠিক কি লক হয়ে গেছে?" অতিরিক্ত সম্পর্কিত পড়া এখানে পাওয়া যাবে: দুর্দান্ত এসকিউএল সার্ভার বিতর্ক: মেমরিতে লক পৃষ্ঠা

এসকিউএল সার্ভার ২০১২ এবং তার পরে, কোনও "একক পৃষ্ঠা বরাদ্দকারী" নেই (একক এবং একাধিক পৃষ্ঠার বরাদ্দকারীগুলিকে একত্রীকরণ করা হয়েছিল, মেমরিটির প্রতি গভীরতর দৃষ্টিভঙ্গি অনুসারে - এসকিউএল সার্ভার 2012/2014 )। কী, ঠিক কী, পেজ করা যায় না তার বিশদটি আমি যে কোনও জায়গায় দেখেছি সে বিষয়ে বিস্তারিতভাবে নথিভুক্ত করা হয়নি। আপনি একটি ক্যোয়ারী ব্যবহার করতে পারেন এই মত তা দেখতে হয় লক:

select osn.node_id, osn.memory_node_id, osn.node_state_desc, omn.locked_page_allocations_kb
from sys.dm_os_memory_nodes omn
inner join sys.dm_os_nodes osn on (omn.memory_node_id = osn.memory_node_id)
where osn.node_state_desc <> 'ONLINE DAC'

একই এমএস সাপোর্ট আর্টিকেল অনুযায়ী, আপনি DBCC MEMORYSTATUSকতটা মেমরি "লকড" রয়েছে তা দেখতে ব্যবহার করতে পারেন।

পার্শ্ব নোট হিসাবে, আপনি এসকিউএল সার্ভারের ওয়ার্কিং সেটটি ত্রুটি লগটিতে ওএস দ্বারা পৃষ্ঠাযুক্ত হওয়ার প্রমাণ দেখতে পাচ্ছেন। এর মতো দেখতে বার্তাগুলি থাকবে:

2019-09-02 10: 19: 27.29 spid11s স্ক্যালি সার্ভার প্রক্রিয়া মেমরির একটি উল্লেখযোগ্য অংশ পৃষ্ঠাযুক্ত হয়ে গেছে। এর ফলে কর্মক্ষমতা হ্রাস পেতে পারে। সময়কাল: 329 সেকেন্ড কার্যকারিতা সেট (কেবি): 68780, প্রতিশ্রুতিবদ্ধ (কেবি): 244052, মেমরির ব্যবহার: 28%।


0

এসকিউএল সার্ভারের আধুনিক সংস্করণগুলিতে পুরোপুরি হ্যাং আপ হওয়ার সত্যিই ছোট্ট সুযোগ রয়েছে। এসকিউএল সার্ভার তার ঠিকানা জায়গাতে। নেট ফ্রেমওয়ার্ক লোড করে এবং এটি সাধারণ ক্রিয়াকলাপের অধীনে ব্যবহার করে। যদি শারীরিক মেমরি এবং পৃষ্ঠা ফাইল উভয়ই শেষ হয়ে যায়, উইন্ডোজ পৃষ্ঠার ফাইলটি বাড়ানোর চেষ্টা করবে; যদিও এটি পৃষ্ঠা ফাইলটি বাড়িয়ে তুলতে পারে, এটি তাত্ক্ষণিক ক্রিয়াকলাপ নয় এবং পৃষ্ঠা ফাইলটি বাড়ার সময় মেমরির বরাদ্দ ব্যর্থ হয়। .NET অ্যাসিনক্রোনাস আই / ও হ্যান্ডলারটিতে একটি বাগ রয়েছে যেখানে এটি একটি এপিসি বিজ্ঞপ্তির প্রতিক্রিয়া হিসাবে মেমরি বরাদ্দ করে। যদি কলটি newব্যর্থ হয় তবে তা ছুড়ে দেবেOutOfMemoryException। এই ব্যতিক্রম টাস্ক শিডিয়ুলারের অভ্যন্তরীণ কোডে ধরা পড়ে; তবে অ্যাসিঙ্ক্রোনাস আই / ও কখনও শেষ হবে না। ফাইল স্ট্রিমের ফাইনালাইজার থ্রেডটি আই / ও শেষ হওয়ার অপেক্ষায় অবরুদ্ধ হবে যাতে এটি বাফারটি আনপিন করতে পারে, এভাবে চূড়ান্তভাবে চূড়ান্তকরণকারী থ্রেডটি ঝুলিয়ে রাখবে। এর ফলে .NET ফ্রেমওয়ার্ক ধীরে ধীরে আরও বেশি মেমোরি ব্যবহার করে যতক্ষণ না আরও মেমোরি বরাদ্দ না দেওয়া হয়, তখন এসকিউএল সার্ভারটি প্রতিক্রিয়াশীল হবে কারণ উইনসক আর বাফার বরাদ্দ করতে পারে না এমনকি অ্যাডমিনের অ্যাক্সেস সংযোগও অকেজো।

স্মৃতিশক্তি ফুরিয়ে যাওয়ার কারণে আমি একটি। নেট অ্যাপ্লিকেশনটিতে একটি টাস্ক শিডিয়ুলার মোট হ্যাঙ্গআপটি আসলে পেয়েছি। ধন্যবাদ, শেষ পর্যন্ত OutOfMemoryExceptionএমন কিছু থ্রেড ছুঁড়ে দেওয়ার কারণে প্রক্রিয়াটি মারা গিয়েছিল যা বেশ কয়েকটি ব্যর্থতার পরে এটি ধরা পড়েনি যাতে আমরা বুঝতে পারি যে প্রকৃতপক্ষে সার্ভারটি কীভাবে ঝুলছিল।

একবার আমি জানছিলাম যে আমি কী সন্ধান করছি, স্থির বিশ্লেষণে বাগটি খুঁজে পাওয়া সহজ ছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.