আমি জমা দেওয়ার প্রতি শ্রদ্ধা জানালে, আমি প্রদত্ত উত্তরটির সাথে বিনীতভাবে দ্বিমত পোষণ করি, "ধর্মীয় কারণে" নয়। অন্য কথায়, আমি বিশ্বাস করি যে মাইক্রোসফ্ট সরবরাহ করেছে এমন কোনও সুবিধা নেই যা সঞ্চিত পদ্ধতি ব্যবহারের জন্য গাইডেন্সের প্রয়োজনীয়তা হ্রাস করে।
কোনও বিকাশকারীকে সরবরাহ করা কোনও নির্দেশিকা যা কাঁচা পাঠ্য এসকিউএল কোয়েরি ব্যবহারের পক্ষপাতী তা অবশ্যই অনেকগুলি সতর্কতার সাথে ভরাট করতে হবে, যেমন আমার মনে হয় সর্বাধিক বিচক্ষণ পরামর্শ হ'ল সঞ্চিত পদ্ধতি ব্যবহারের জন্য উত্সাহ দেওয়া এবং আপনার বিকাশকারী দলগুলিকে অনুশীলনে নিযুক্ত করা থেকে নিরুৎসাহিত করা think কোডে এসকিউএল স্টেটমেন্ট এম্বেড করা বা এসকিউএল স্প্রোকস (সঞ্চিত পদ্ধতি) এর বাইরে কাঁচা, সাধারণ-পুরাতন পাঠ্য-ভিত্তিক এসকিউএল অনুরোধগুলি জমা দেওয়ার।
আমি মনে করি যে এসএমআরসি কেন ব্যবহারকারীর সাবমিটার হিসাবে বিবেচিত হয়েছে সে প্রশ্নের সহজ উত্তর: স্প্রোকগুলি পার্স করা, অনুকূলিত করা এবং সংকলিত। যেমন, তাদের জিজ্ঞাসা / সম্পাদনের পরিকল্পনাগুলি ক্যাশে করা হয়েছে কারণ আপনি কোনও প্রশ্নের কোনও স্থির উপস্থাপনা সংরক্ষণ করেছেন এবং আপনি সাধারণত এটি কেবলমাত্র পরামিতি দ্বারা পৃথক করে রাখবেন, যা অনুলিপি / আটকানো এসকিউএল বিবৃতিগুলির ক্ষেত্রে সত্য নয় যা সম্ভবত মোড়ফ পৃষ্ঠা-থেকে-পৃষ্ঠা-এবং উপাদান / স্তর থেকে এবং প্রায়শই বিভিন্ন মাত্রায়, এমনকি ডাটাবেসের নামগুলি কল-টু কল থেকে নির্দিষ্ট করা যায় এমন মাত্রায় বৈচিত্র্যযুক্ত হয়। এই ধরণের গতিশীল অ্যাডহকটির জন্য মঞ্জুরিএসকিউএল জমা দেওয়া, ডিবি ইঞ্জিনের কিছু অতি কঠোর নিয়ম অনুসারে আপনার অ্যাডহক স্টেটমেন্টগুলির জন্য ক্যোয়ারী প্ল্যানটি পুনরায় ব্যবহার করার সম্ভাবনা হ্রাস করে। এখানে, আমি দক্ষ সিস্টেম এসপিআরসি এসপি_এক্সেকটসএকএল এর বিপরীতে গতিশীল অ্যাডহক প্রশ্নের (উত্থাপিত প্রশ্নের উদ্ভবের মধ্যে) পার্থক্য করছি।
আরও নির্দিষ্টভাবে, নিম্নলিখিত উপাদানগুলি রয়েছে:
- সিরিয়াল এবং সমান্তরাল ক্যোয়ারী পরিকল্পনা যা ব্যবহারকারীর প্রসঙ্গটি ধরে রাখে না এবং ডিবি ইঞ্জিন দ্বারা পুনরায় ব্যবহারের অনুমতি দেয়।
- এক্সিকিউশন প্রসঙ্গ যা বিভিন্ন ডেটা পরামিতি সহ নতুন ব্যবহারকারীর দ্বারা ক্যোয়ারী প্ল্যানের পুনরায় ব্যবহারের অনুমতি দেয়।
- প্রক্রিয়া ক্যাশে যা আমরা অনুসন্ধান করি তার কার্যকারিতা তৈরি করতে ডিবি ইঞ্জিন অনুসন্ধান করে।
যখন একটি ওয়েব পেজ থেকে এসকিউএল বিবৃতি জারি করা হয়, যখন একটি "অ্যাডহক স্টেটমেন্ট" আখ্যা দেওয়া হয়, ইঞ্জিনটি অনুরোধটি পরিচালনা করার জন্য একটি বিদ্যমান কার্যকরকরণ পরিকল্পনা সন্ধান করে। যেহেতু এটি কোনও ব্যবহারকারীর কাছ থেকে জমা দেওয়া পাঠ্য, এটি বৈধ হলে এটি ইনজেক্ট, পার্সড, সংকলন এবং সম্পাদন করা হবে। এই মুহূর্তে এটি শূন্যের ক্যোয়ারী ব্যয় পাবে। ক্যাশে থেকে নির্বাহের জন্য কোন নির্বাহের পরিকল্পনা রয়েছে তা নির্ধারণের জন্য ডিবি ইঞ্জিন যখন তার অ্যালগরিদম ব্যবহার করে তখন অনুসন্ধান ব্যয় ব্যবহৃত হয়।
অ্যাডহক কোয়েরিগুলি ডিফল্টরূপে শূন্যের একটি মূল ক্যোয়ারী মূল্য গ্রহণ করে। অন্য একই ব্যবহারকারীর প্রক্রিয়া (বা একই একই) দ্বারা ঠিক একই অ্যাডহক ক্যোয়ারী পাঠ্যের সম্পাদনের পরে, বর্তমান ক্যোয়ারী ব্যয়টি মূল সংকলন ব্যয়টিতে পুনরায় সেট করা হয়েছে। যেহেতু আমাদের অ্যাডহক ক্যোয়ারী সংকলন ব্যয়টি শূন্য, এটি পুনরায় ব্যবহারের সম্ভাবনার পক্ষে ভাল হয় না। স্পষ্টতই, শূন্য হ'ল সর্বনিম্ন মূল্যবান পূর্ণসংখ্যা, তবে কেন এটি উচ্ছেদ করা হবে?
যখন মেমরির চাপ দেখা দেয় এবং তারা যদি আপনার প্রায়শই ব্যবহৃত সাইট থাকে তবে ডিবি ইঞ্জিন কীভাবে প্রক্রিয়া ক্যাশে ব্যবহার করছে তা মেমরিটিকে কীভাবে দাবি করতে পারে তা নির্ধারণ করতে একটি ক্লিনআপ অ্যালগরিদম ব্যবহার করে। কোনটি উচ্ছেদ করার পরিকল্পনা করার জন্য এটি বর্তমান ক্যোয়ারী ব্যয় ব্যবহার করে। আপনারা যেমন অনুমান করতে পারেন, শূন্যের ব্যয় নিয়ে পরিকল্পনাগুলি প্রথমে ক্যাশে থেকে উচ্ছেদ করা হয় কারণ শূন্যের মূল অর্থ "এই পরিকল্পনার বর্তমান ব্যবহারকারী বা উল্লেখ নেই"।
- দ্রষ্টব্য: এইডক এক্সিকিউশন পরিকল্পনা - বর্তমান ব্যয় প্রতিটি ব্যবহারকারীর প্রক্রিয়া দ্বারা, পরিকল্পনার মূল সংকলন ব্যয় দ্বারা বৃদ্ধি করা হয়। তবে কোনও পরিকল্পনার সর্বোচ্চ ব্যয়টি মূল সংকলন ব্যয়ের চেয়ে বেশি হতে পারে না ... অ্যাডহক প্রশ্নের ক্ষেত্রে ... শূন্যের ক্ষেত্রে। সুতরাং, এটি সেই মান দ্বারা "বৃদ্ধি" হবে ... শূন্য - যার মূল অর্থ এটি সর্বনিম্ন ব্যয় পরিকল্পনা হিসাবে থাকবে।
অতএব, মেমরির চাপ সৃষ্টি হওয়ার পরে এই জাতীয় পরিকল্পনাটি প্রথম উচ্ছেদ করা সম্ভব বলে সম্ভবত যথেষ্ট সম্ভাবনা রয়েছে।
সুতরাং, আপনার যদি "আপনার প্রয়োজনের বাইরে" প্রচুর মেমরির সাথে একটি সার্ভার তৈরি করে থাকেন তবে আপনি সম্ভবত এই সমস্যাটি কখনও ব্যস্ত সার্ভার হিসাবে অনুভব করতে পারবেন না যার কাজের চাপটি হ্যান্ডেল করার জন্য কেবল "পর্যাপ্ত" মেমরি রয়েছে। (দুঃখিত, সার্ভারের মেমরির ক্ষমতা এবং ব্যবহার কিছুটা বিষয়গত / আপেক্ষিক, যদিও অ্যালগরিদম নেই))
এখন, আমি যদি এক বা একাধিক বিষয় সম্পর্কে সত্যই ভুল হয় তবে আমি অবশ্যই সংশোধন করার জন্য উন্মুক্ত open
সবশেষে, লেখক লিখেছেন:
"এখন আমাদের স্টেটমেন্ট-স্তরের অপ্টিমাইজেশন রয়েছে, সুতরাং কোনও অ্যাপ্লিকেশন থেকে সঠিকভাবে প্যারামিটারাইজড ক্যোয়ারী সঞ্চিত পদ্ধতিতে এম্বেড করা ক্যোয়ারির মতো একই এক্সিকিউশন পরিকল্পনার সুবিধা নিতে পারে।"
আমি বিশ্বাস করি যে লেখক "অ্যাডহক ওয়ার্কলোডের জন্য অনুকূলিতকরণ" বিকল্পটি উল্লেখ করছেন।
যদি তা হয় তবে এই বিকল্পটি একটি দ্বি-পদক্ষেপ প্রক্রিয়া করার অনুমতি দেয় যা তত্ক্ষণাত প্রক্রিয়া ক্যাশে সম্পূর্ণ ক্যোয়ারী প্ল্যান প্রেরণ এড়িয়ে যায়। এটি কেবল সেখানে একটি ছোট ক্যোয়ারী স্টাব প্রেরণ করে। যদি কোয়েরি স্টাবটি প্রক্রিয়া ক্যাশে থাকা অবস্থায় একটি সঠিক কোয়েরি কলটি আবার সার্ভারে প্রেরণ করা হয়, সেই সময় সম্পূর্ণ ক্যোয়ারী এক্সিকিউশন প্ল্যানটি প্রক্রিয়া ক্যাশে সংরক্ষণ করা হয়। এটি মেমোরিতে বাঁচায়, যা মেমোরি চাপের ঘটনার সময়, উচ্ছেদের অ্যালগরিদমকে ক্যাশে হওয়া বৃহত্তর ক্যোয়ারী পরিকল্পনার চেয়ে কম ঘন ঘন আপনার স্টাবকে উচ্ছেদ করতে দেয়। আবার এটি আপনার সার্ভারের মেমরি এবং ব্যবহারের উপর নির্ভর করে।
তবে, আপনাকে এই বিকল্পটি চালু করতে হবে, যেহেতু এটি ডিফল্টরূপে বন্ধ রয়েছে।
সবশেষে, আমি জোর দিয়ে বলতে চাই যে প্রায়শই, বিকাশকারীরা পৃষ্ঠাগুলি, উপাদানগুলি এবং অন্যান্য জায়গায় এসকিউএল এম্বেড করে রাখার কারণ হ'ল কারণ তারা নমনীয় হতে চান এবং গতিশীল এসকিউএল কোয়েরিটি ডাটাবেস ইঞ্জিনে জমা দিতে চান। অতএব, রিয়েল-ওয়ার্ল্ড ইউজ কেসে, এসকিউএল সার্ভারে অ্যাডহক কোয়েরি জমা দেওয়ার সময় আমরা যে ক্যাচিং / দক্ষতাগুলি খুঁজছি সেগুলি খুব একই পাঠ্য, কল-ওভার-কল জমা দেওয়ার সম্ভাবনা নেই।
অতিরিক্ত তথ্যের জন্য, দয়া করে দেখুন:
https://technet.microsoft.com/en-us/library/ms181055(v=sql.105).aspx
http://sqlmag.com/datedia-performance-tuning/don-t-fear-dynamic-sql
সেরা,
হেনরি