অপ্টিমাইজেশন: আপনার পদ্ধতির শীর্ষে পরিবর্তনশীল ঘোষণাগুলি সরিয়ে নেওয়া


15

কিছু সঞ্চিত পদ্ধতি অপ্টিমাইজ করার কাজ করার সময়, আমি ডিবিএর সাথে বসেছিলাম এবং উচ্চ ব্লকিং এবং / অথবা উচ্চ পঠন / লেখার ক্রিয়াকলাপের সাথে কিছু সঞ্চিত পদ্ধতিতে গিয়েছিলাম।

ডিবিএর একটি জিনিস উল্লেখ করা হয়েছিল তা হ'ল TABLEপুনরায় সংস্থানগুলি এড়ানোর জন্য আমার সঞ্চিত পদ্ধতির শীর্ষে সমস্ত ভেরিয়েবলগুলি (বিশেষত একটিগুলি) ঘোষণা করা উচিত ।

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

সমস্ত ভেরিয়েবল ঘোষণাকে আপনার সঞ্চিত পদ্ধতির শীর্ষে স্থানান্তর করা কি পুনরুদ্ধারগুলিকে হ্রাস করে?

উত্তর:


18

না।

এটি হয় দীর্ঘদিন আগে সত্য হয়ে ওঠে (এবং এটি আর কমপক্ষে এসকিউএল সার্ভার 2000 এর পরে নেই), বা এটি কখনই সত্য ছিল না এবং আপনার ডিবিএ কেবলমাত্র তার সুপারিশটি নিম্নলিখিতগুলির সাথে বিভ্রান্ত করেছে :

সঞ্চিত প্রক্রিয়া শুরুর সময় অস্থায়ী টেবিলগুলির জন্য সমস্ত ডিডিএল বিবৃতি (সূচী তৈরির মতো) একসাথে দলবদ্ধ করা গুরুত্বপূর্ণ। এই ডিডিএল বিবৃতি একসাথে রেখে স্কিমা পরিবর্তনের কারণে অপ্রয়োজনীয় সংকলন এড়ানো যায়।

এই পৃষ্ঠায় এই সুপারিশের পিছনে যুক্তির আরও একটি ব্যাখ্যা আপনি খুঁজে পেতে পারেন ।

আমরা যদি এই মাইক্রোসফ্ট কেবি একবার দেখে নিই, আমরা দেখতে পাচ্ছি যে সঞ্চিত পদ্ধতির পুনঃসংযোগের কারণ নিম্নলিখিতগুলির মধ্যে একটি হতে পারে (এসকিউএল সার্ভার ২০০+):

  1. স্কিমার পরিবর্তন হয়েছে।
  2. পরিসংখ্যান বদলেছে।
  3. ডিএনআর পুনরায় কম্পাইল করুন।
  4. সেট বিকল্প পরিবর্তন করা হয়েছে।
  5. টেম্প টেবিল পরিবর্তন করা হয়েছে।
  6. রিমোট রোসেট পরিবর্তন করা হয়েছে।
  7. ব্রাউজ পার্ম পরিবর্তিত জন্য।
  8. অনুসন্ধানের বিজ্ঞপ্তি পরিবেশ পরিবর্তন হয়েছে।
  9. এমপিআই ভিউ পরিবর্তন হয়েছে।
  10. কার্সার বিকল্পগুলি পরিবর্তন করা হয়েছে।
  11. রিকম্পাইল অপশন সহ।

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

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


3

এটি কোনও পার্থক্য করা বা সংকলিত লকগুলি হ্রাস করতে বা স্ট্যাকের নীচে বা শীর্ষে একটি ভেরিয়েবলের অর্ধেক পথ ঘোষিত করার জন্য কম পুনঃসংশোধনের কারণ তৈরি করা উচিত নয়। পাঠ্যযোগ্যতার জন্য আমি প্রায়শই এর চেয়ে শীর্ষে এটি করি।

প্রশ্নের "আমার ডিবিএ কী ভাবছে" অংশটি পেতে, কেবলমাত্র আমি যে জিনিসটি সামনে আসতে পারি (নিকের পয়েন্ট ব্যতীত যে তারা কীভাবে কিছু ব্যবহৃত হত তা নিয়ে ভাবছেন) সম্ভবত তারা প্যারামিটার স্নিফিংয়ের কথা বলছিলেন (দেখুন) সহজ আলাপের এই লিঙ্কে বিকল্প 2 )

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

উদাহরণগুলির আগে / পরে সেগুলি পোস্ট করুন এবং আমরা দেখতে পাব যে ডিবিএ এখানে কী চালাচ্ছে।

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