ভারসাম্য রোধ থেকে গণিত কলামগুলিতে স্কেলার ইউডিএফগুলি প্রতিরোধ করার কোনও উপায় আছে কি?


29

এসকিউএল সার্ভারে স্কেলার ইউডিএফগুলির বিপদ সম্পর্কে অনেক কিছু লেখা হয়েছে । একটি নৈমিত্তিক অনুসন্ধান ফলাফলের oodles ফিরে আসবে।

কিছু কিছু জায়গা রয়েছে যেখানে স্কেলার ইউডিএফ হ'ল একমাত্র বিকল্প।

উদাহরণ হিসাবে: এক্সএমএল নিয়ে কাজ করার সময়: এক্সকিউরি একটি গণিত কলাম সংজ্ঞা হিসাবে ব্যবহার করা যায় না। মাইক্রোসফ্ট দ্বারা নথিভুক্ত একটি বিকল্প হ'ল একটি স্কেলার ইউডিএফ-এ আপনার এক্সকিউয়ারিটি আবদ্ধ করতে একটি স্কেলার ইউডিএফ ব্যবহার করুন এবং তারপরে এটি একটি গণিত কলামে ব্যবহার করুন।

এটির বিভিন্ন প্রভাব রয়েছে এবং কিছু কর্মক্ষেত্র রয়েছে।

  • সারণীটি জিজ্ঞাসা করা হলে সারিবদ্ধভাবে সারিতে কার্য সম্পাদন করে
  • টেবিলের বিপরীতে সমস্ত প্রশ্নের ক্রিয়াকলাপ চালাতে বাধ্য করে

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

এটি করার একটি জ্ঞাত উপায় আছে?

উত্তর:


31

হ্যাঁ আপনি যদি:

  • এসকিউএল সার্ভার 2014 বা তারপরে চলছে; এবং
  • সক্রিয় ট্রেস পতাকা 176 সহ কোয়েরি চালাতে সক্ষম ; এবং
  • গণিত কলাম হয় PERSISTED

বিশেষত, কমপক্ষে নিম্নলিখিত সংস্করণগুলির প্রয়োজন :

  • এসকিউএল সার্ভার 2016 এসপি 1 এর জন্য সংশ্লেষিত আপডেট 2
  • এসকিউএল সার্ভার ২০১ R আরটিএমের জন্য সংশ্লেষিত আপডেট
  • এসকিউএল সার্ভার 2014 এসপি 2 এর জন্য সংশ্লেষিত আপডেট

কিন্তু এই সংশোধনগুলিতে প্রবর্তিত বাগ ( 2014 এর জন্য রেফ , এবং 2016 এবং 2017 এর জন্য ) এড়াতে পরিবর্তে আবেদন করুন:

ট্রেস পতাকাটি স্টার্ট-আপ –Tবিকল্প হিসাবে কার্যকর , উভয় বিশ্বব্যাপী এবং সেশন স্কোপ ব্যবহার করে DBCC TRACEON, এবং প্রতি ক্যোয়ারী OPTION (QUERYTRACEON)বা প্ল্যান গাইডের সাহায্যে কার্যকর।

ট্রেস পতাকা 176 স্থির গণিত কলামের প্রসারকে বাধা দেয়।

কোনও কোয়েরি সংকলনের সময় সম্পাদিত প্রাথমিক মেটাডেটা লোডটি কেবলমাত্র সরাসরি উল্লেখ করা নয়, সমস্ত কলামে নিয়ে আসে। এটি সমস্ত গণিত কলাম সংজ্ঞা মেলানোর জন্য উপলব্ধ করে তোলে যা সাধারণত একটি ভাল জিনিস।

দুর্ভাগ্যজনক পার্শ্ব-প্রতিক্রিয়া হিসাবে, যদি কোনও লোডড (গণিত) কলামগুলি কোনও স্কেলার ব্যবহারকারী-সংজ্ঞায়িত ফাংশন ব্যবহার করে, তার উপস্থিতি পুরো ক্যোয়ারির জন্য সমান্তরালতা অক্ষম করে , এমনকি যদি সংযুক্ত কলামটি ব্যবহৃত না হয়

সংজ্ঞা লোড না করে কলামটি অবিরত থাকলে ট্রেস পতাকা 176 এর সাথে সহায়তা করে (যেহেতু সম্প্রসারণ এড়ানো যায়)। এইভাবে, কোনও স্কেলার ব্যবহারকারী-সংজ্ঞায়িত ফাংশন কখনই সংকলন ক্যোয়ারী ট্রিতে উপস্থিত হয় না তাই সমান্তরালতা অক্ষম হয় না।

ট্রেস পতাকা 176 এর মূল ত্রুটি (কেবলমাত্র হালকাভাবে ডকুমেন্ট হওয়া থেকে আলাদা) এটি কোয়েরি এক্সপ্রেশনটিকে টানা গণিত কলামগুলির সাথে মিলে যাওয়া বাধা দেয়: যদি ক্যোয়ারিতে একটি স্থায়ী গণিত কলামের সাথে মেলে এমন একটি অভিব্যক্তি থাকে, তবে ট্রেস পতাকা 176 দ্বারা প্রতিস্থাপনটি প্রকাশ করা আটকাবে গণিত কলাম একটি রেফারেন্স।

আরও তথ্যের জন্য, আমার এসকিউএল পারফরম্যান্স ডটকম নিবন্ধটি দেখুন, যথাযথভাবে বিশিষ্ট গণিত কলামগুলি

যেহেতু প্রশ্নটি এক্সএমএলকে উল্লেখ করেছে, একটি গণিত কলাম এবং স্কেলার ফাংশনটি ব্যবহার করে মানগুলির প্রচারের বিকল্প হিসাবে, আপনি একটি নির্বাচনী এক্সএমএল সূচক ব্যবহার করতেও পারেন, যেমন আপনি নির্বাচিত এক্সএমএল সূচকগুলিতে লিখেছেন : খারাপ নয় মোটেও নয়


10

@ পল এর দুর্দান্ত হ্যাঁ ছাড়াও # 1 আসলে একটি হ্যাঁ # 2 রয়েছে যা:

  • এসকিউএল সার্ভার 2005 এর মতো পিছনে কাজ করে,
  • ট্রেস পতাকা স্থাপনের প্রয়োজন নেই,
  • না গণিত কলামটি প্রয়োজন নাPERSISTED এবং
  • (ট্রেস পতাকা 176 প্রয়োজনের কারণে না), করে স্থায়ী গণিত কলামগুলির সাথে কোয়েরি এক্সপ্রেশন মেলে তা প্রতিরোধ না

একমাত্র ত্রুটি (যতদূর আমি বলতে পারি) হ'ল:

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

এবং এই বিকল্পটি হ'ল এসকিউএলসিএলআর

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

আমি নিম্নলিখিত ব্লগ পোস্ট থেকে প্রাথমিক সেটআপটি ব্যবহার করেছি (আশা করি ওপি এটিকে অবিশ্বাস্য উত্স হিসাবে বিবেচনা করে না 🙃):

খারাপ আইডিয়া জিন্স: একাধিক সূচক ইঙ্গিত

এবং নিম্নলিখিত পরীক্ষাগুলি সম্পাদন করেছেন:

  1. Query সমান্তরালতা (প্রত্যাশার মতো) হিসাবে প্রাথমিক ক্যোয়ারী চালান
  2. ([c2] * [c3])Ralle সমান্তরালতা হিসাবে প্রত্যাশিত হিসাবে একটি অ-স্থিত গণিত কলাম যুক্ত করা হয়েছে (প্রত্যাশার মতো)
  3. Comp NO সমান্তরালতা (প্রত্যাশার মতো) হিসাবে SCHEMABINDINGসংজ্ঞায়িত একটি টি-এসকিউএল স্কেলার ইউডিএফ (এর সাথে তৈরি ) রেফারেন্সযুক্ত একটি অ-স্থিত গণিত কলামটি যুক্ত করা হয়েছে সেই গণিত কলামটি সরিয়ে নিয়েছে addedRETURN (@First * @Second);
  4. সরানো হয়েছে টি-এসকিউএল ইউডিএফ নির্ণিত কলাম যোগ একটি অ-স্থায়ী নির্ণিত কলামে কোনো SQLCLR স্কালে ইউডিএফ (উভয় সঙ্গে চেষ্টা রেফারেন্সড IsDeterministic = trueএবং = false) হিসাবে সংজ্ঞায়িত করা return SqlInt32.Multiply(First, Second);─⇾ সমান্তরালতা (ইয়ে !!)

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

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