যেখানে বাফার ক্যাশে পর্যাপ্ত জায়গা নেই এমন প্রশ্নের জন্য এসকিউএল সার্ভার কীভাবে ডেটা পরিচালনা করবে?


10

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

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

তদ্ব্যতীত, আমি কীভাবে GB জিবি মোট ডেটা ফেরত দেওয়ার চেষ্টা করছি, এসকিউএল সার্ভার কীভাবে এটি পরিচালনা করে তা পরিবর্তিত হয়?

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

এছাড়াও, আমি নিশ্চিত যে এই তথ্যটি কোথাও রয়েছে, তবে এটি সন্ধানে আমি ব্যর্থ হয়েছি।


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

উত্তর:


13

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

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

উইন্ডোজ পারফরম্যান্স মনিটরে "পেজ লাইফ প্রত্যাশা" কাউন্টারটি দেখে আপনি এই প্রভাবটি দেখতে পারেন। সেই কাউন্টার সম্পর্কে কিছু দুর্দান্ত বিবরণের জন্য https://sqlperformance.com/2014/10/sql-performance/knee-jerk-page-Live-expectancy দেখুন ।

মন্তব্যে, আপনি যখন জিজ্ঞাসার ফলাফলগুলি উপলব্ধ বাফার জায়গার চেয়ে বড় হয় তখন বিশেষত কী ঘটেছিল তা জিজ্ঞাসা করেছিলেন । সহজ উদাহরণটি ধরুন, select * from some_very_big_table;- ধরুন টেবিলটি 32 গিগাবাইট, এবং 24 max server memory (MB)জিবিতে কনফিগার করা আছে। সমস্ত 32 জিবি টেবিল ডেটা একবারে পৃষ্ঠার বাফারের পৃষ্ঠাগুলিতে পাঠানো হবে, ল্যাচড, নেটওয়ার্ক প্যাকেটে ফর্ম্যাট করা এবং তারের জুড়ে প্রেরণ করা। এটি পৃষ্ঠায় পৃষ্ঠায় ঘটে; আপনার একই সাথে 300 টি অনুসন্ধান চলতে পারে এবং ধরেই নেওয়া হচ্ছে যে সেখানে কোনও ব্লক হচ্ছে না, প্রতিটি প্রশ্নের জন্য ডেটা পৃষ্ঠা বাফার স্পেসে পড়বে, একবারে একটি পৃষ্ঠা, এবং তারের উপরে ক্লায়েন্ট যত তাড়াতাড়ি পারত অনুরোধ এবং ডেটা গ্রাস। একবার প্রতিটি পৃষ্ঠার সমস্ত ডেটা তারে প্রেরণ করা হয়ে গেলে পৃষ্ঠাটি আনচলাচলে হয়ে যায় এবং খুব দ্রুত ডিস্ক থেকে অন্য কোনও পৃষ্ঠা দ্বারা প্রতিস্থাপন করা হবে।

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

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


কৌতূহলের বাইরে, কী ধরণের ক্যোয়ারী 7 জিবি ডেটা টানছে? আমি আশা করি এটি একটি ব্যাচ প্রক্রিয়া।
ডেটাগোড

সম্ভবত অনেকগুলি না এবং আপনি ঠিক বলেছেন এটি একটি ব্যাচের প্রক্রিয়া হবে fully এসকিউএল সেই অনুরোধটি কীভাবে পরিচালনা করবে তা দেখার জন্য আমি কেবল কৌতূহল ছিলাম
ডাস্টিন

5

আপনার জিজ্ঞাসাটি এই দৃশ্যে ঠিক কী করবে আমি তার সাথে কথা বলতে পারি না তবে এসকিউএল সার্ভারের কতটা প্রয়োজন তা নির্ভর করে বিভিন্ন বিকল্প রয়েছে।

  • টেম্পটিডিবিতে ডেটা "ছড়িয়ে" দিতে পারে, এটি আপনার ডিস্কটি ব্যবহার করবে
  • পুরানো পৃষ্ঠাগুলি আপনার বাফার ক্যাশে থেকে বের করে দেওয়া যেতে পারে
  • এসকিউএল সার্ভার কিছু পৃষ্ঠাগুলি বাফার ক্যাশে লোড করতে পারে, সেগুলি ব্যবহার করতে পারে, এবং এরপরে নতুন পৃষ্ঠাগুলিকে ঘোরান

কী ঘটবে তা জানার সর্বোত্তম উপায় হ'ল কোনও পরিবেশ পরিবেশে দৃশ্যধারণ করা এবং এটি অনুসন্ধান করা।


2

আমার প্রশ্ন হ'ল এসকিউএল সার্ভার কীভাবে এমন একটি ক্যোয়ারি পরিচালনা করে যাতে বাফার ক্যাশে আরও বেশি পরিমাণে ডেটা টানতে হবে তারপরে স্থান উপলব্ধ রয়েছে available

এই নির্দিষ্ট অংশটির উত্তর দেওয়ার জন্য আমাকে কীভাবে এটি পরিচালনা করা হয় তা বলি। পৃষ্ঠাগুলি 8KB আকারের। আপনি যখন কোনও ডেটা বড় ডেটা সেট করার অনুরোধ করে এবং এমন একাধিক পৃষ্ঠাগুলির স্মৃতিতে আনার জন্য একটি কোয়েরি চালান তখন এসকিউএল সার্ভার সমস্ত পৃষ্ঠাগুলি একসাথে আনবে না । এটি সুনির্দিষ্ট পৃষ্ঠাগুলি সনাক্ত করবে এবং একে একে 8KB পৃষ্ঠাগুলি মেমোরিতে আনবে এটি থেকে ডেটা পড়বে এবং ফলাফল দেবে এবং এটি এখন চলবে মনে করুন এটি এমন পরিস্থিতির মুখোমুখি হয় যেখানে পুরানো পৃষ্ঠাগুলি ফ্লাশ করা হবে memory @ ম্যাক্সের মতো ডিস্কটি নির্দেশিত। আপনি সঠিকভাবে অনুমান করেছিলেন যে এই কম স্মৃতিটি জিনিসগুলিকে ধীর করতে পারে কারণ পুরানো পৃষ্ঠাগুলি সরিয়ে ফেলতে কিছুটা সময় ব্যয় হবে। এটিই চেকপয়েন্ট এবং লাজিইয়াইটারছবিতে আসে অলস লেখক হ'ল ডিস্কে নতুন পৃষ্ঠা আনতে সর্বদা কিছু ফ্রি মেমরি থাকে কিনা তা নিশ্চিত করা তাদের er লো ফ্রি বাফার সম্মুখীন হওয়ার সাথে সাথে এটি ট্রিগার করা হয় এবং নতুন পৃষ্ঠা হওয়ার জন্য বিনামূল্যে স্থান তৈরি করে free

সম্পাদনা

আমি এটি পেয়েছি, তবে যে অংশটি আমাকে খানিকটা বিস্মিত করে তা হ'ল যদি আপনি যোগ দিচ্ছেন - ফিল্টারিং ডেটা এবং সেই ফলাফলগুলি ক্যাশে আকারের চেয়ে বেশি exceed

যোগদান এবং ফিল্টারিংয়ের জন্য মেমরিটি কোয়েরিটি চালুর আগেই সিদ্ধান্ত নেওয়া হয়েছিল এবং মনে করুন সত্যই কোনও মেমরি ক্রাচ আছে এবং অপারেশন চালানোর জন্য প্রয়োজনীয় মেমরি উপলব্ধ নেই এসকিউএল সার্ভার প্রসেসর "প্রয়োজনীয় মেমরি" দেবে যা

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

অন্ততপক্ষে কোয়েরিটি চলমান শুরু করবে তবে রানটাইমের সময় সম্ভবত এটির মধ্যবর্তী ফলাফলটি টেম্পডবিতে ছড়িয়ে পড়ে এটি ধীর করে দেয়। আমি দৃ strongly়ভাবে আপনাকে ক্যোয়ারী মেমোরি অনুদান বোঝার পরামর্শ দিচ্ছি


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

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