সংঘটন শারীরিক অপারেশন: এটি কার্যকর করার আদেশের নিশ্চয়তা দেয়?


12

স্ট্যান্ডার্ড এসকিউএল এ, এর ফলাফল union allকোনও ক্রমে হওয়ার নিশ্চয়তা নেই। সুতরাং, এর মতো কিছু:

select 'A' as c union all select 'B'

যে কোনও ক্রমে দুটি সারি ফিরতে পারে (যদিও, আমি জানি যে কোনও ডাটাবেসে অনুশীলনে, 'এ' 'বি' এর আগে আসবে)।

এসকিউএল সার্ভারে, এটি "কনটেনটেশন" ফিজিক্যাল অপারেশন ব্যবহার করে একটি এক্সিকিউশন প্ল্যানে পরিণত হয়।

আমি সহজেই কল্পনা করতে পারি যে সংক্ষেপণ ক্রিয়াকলাপটি ইনপুটগুলি স্ক্যান করবে, যে কোনও ইনপুট উপলব্ধ রেকর্ড রয়েছে তা ফিরিয়ে দেবে। তবে আমি ওয়েবে নিম্নলিখিত বিবৃতিটি পেয়েছি ( এখানে ):

ক্যোয়ারী প্রসেসর অপারেটররা যাতে পরিকল্পনায় উপস্থিত হয় সেভাবে এই পরিকল্পনাটি কার্যকর করবে, প্রথমটি শীর্ষস্থানীয় এবং শেষটি শেষেরটি।

প্রশ্ন: বাস্তবে কি এটি সত্য? এটি কি গ্যারান্টিযুক্ত?

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

ইঞ্জিন প্রক্রিয়াটি কি একবারে একাধিক ইনপুট রাখার উপায় আছে? আমার পরীক্ষাগুলি (ধ্রুবকগুলির তুলনায় আরও জটিল এক্সপ্রেশন ব্যবহার করে) একটি সমান্তরাল-সক্ষম 8-কোর মেশিনে রয়েছে এবং বেশিরভাগ প্রশ্নের সমান্তরালতার সুবিধা নেয়।

উত্তর:


10

না , মাইক্রোসফ্টের আচরণের গ্যারান্টিযুক্ত কোনও ডকুমেন্টেশন নেই, সুতরাং এটির নিশ্চয়তা নেই

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

যদিও আমরা এটি আরও তদন্ত করতে পারি। যদি ক্যোয়ারী অপ্টিমাইজার কনটেনটেশন অপারেটর ইনপুটটিকে পুনরায় অর্ডার করতে সক্ষম হয় তবে সেই অপটিমাইজেশনের সাথে মিলে অনাবন্ধিত ডিএমভিতে সারি থাকা উচিত sys.dm_exec_query_transformation_stats

SELECT * FROM sys.dm_exec_query_transformation_stats 
    WHERE name LIKE '%CON%' OR name LIKE '%UNIA%'

এসকিউএল সার্ভার 2012 এন্টারপ্রাইজ সংস্করণে, এটি 24 টি সারি তৈরি করে। ধ্রুবকগুলির সাথে সম্পর্কিত রূপান্তরগুলির জন্য মিথ্যা ম্যাচগুলি উপেক্ষা করে কনক্যাটেনেশন ফিজিক্যাল অপারেটর UNIAtoCON(ইউনিয়ন অল টু কনকনাটেশন) সম্পর্কিত একটি রূপান্তর রয়েছে । সুতরাং, শারীরিক অপারেটর স্তরে, এটি প্রদর্শিত হয় যে একবার কংক্রিটেশন অপারেটরটি নির্বাচিত হয়ে গেলে এটি লজিক্যাল ইউনিয়ন অনুসারে প্রসেস করা হবে সমস্ত অপারেটর এটি থেকে প্রাপ্ত।


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

এই দেরিতে শারীরিক পুনর্লিখনটি এসকিউএল সার্ভার ২০০৮ আর 2 সহ কার্যকর ছিল এবং একটি প্রতিরোধের অর্থ এটি আর এসকিউএল সার্ভার ২০১২ এবং তার পরে প্রয়োগ করা হয়নি। একটি ফিক্স জারি করা হয়েছে যা এসকিউএল সার্ভার ২০১৪ এবং তারপরে (2012 নয়) কোয়েরি অপ্টিমাইজার হটফিক্সগুলি সক্ষম করেছে (উদাহরণস্বরূপ ট্রেস ফ্ল্যাগ 4199) দিয়ে এই পুনর্লিখনটি পুনরায় স্থাপন করে।


কিন্তু লজিকাল ইউনিয়ন সম্পর্কে সমস্ত অপারেটর ( UNIA)? একটি UNIAReorderInputsরূপান্তর আছে, যা ইনপুটগুলিকে পুনঃক্রম করতে পারে। এছাড়াও দুটি শারীরিক অপারেটর রয়েছে যা লজিকাল ইউনিয়ন অল, UNIAtoCONএবং UNIAtoMERGE(ইউনিয়ন অল টু মার্জ ইউনিয়ন) প্রয়োগ করতে ব্যবহার করা যেতে পারে ।

সুতরাং এটি প্রদর্শিত হয় যে ক্যোয়ারী অপ্টিমাইজারটি কোনওটির জন্য ইনপুটগুলিকে পুনঃক্রম করতে পারেUNION ALL ; যাইহোক, এটা একটি সাধারণ রূপান্তর হতে বলে মনে হচ্ছে না (এর শূন্য ব্যবহারসমূহ UNIAReorderInputsএসকিউএল সার্ভার উপর আমি নির্দ্ধিধায় অ্যাক্সেসযোগ্য আছে আমরা পরিস্থিতিতে যে অপটিমাইজার ব্যবহার করতে হবে জানি না। UNIAReorderInputs; যদিও এটা অবশ্যই ব্যবহার করা হয় একটি পরিকল্পনা নির্দেশিকা বা ব্যবহারের যখন পরিকল্পনার ইঙ্গিতটি উপরে উল্লিখিত সারি লক্ষ্য শারীরিকভাবে পুনরায় অর্ডার করা ইনপুট ব্যবহার করে উত্পন্ন পরিকল্পনাকে জোর করতে ব্যবহৃত হয়।

ইঞ্জিন প্রক্রিয়াটি কি একবারে একাধিক ইনপুট রাখার উপায় আছে?

কনটেনটেশন ফিজিক্যাল অপারেটর কোনও পরিকল্পনার সমান্তরাল বিভাগের মধ্যে থাকতে পারে। কিছুটা অসুবিধা নিয়ে আমি নীচের ক্যোয়ারীটি ব্যবহার করে সমান্তরাল যুক্তি দিয়ে একটি পরিকল্পনা তৈরি করতে সক্ষম হয়েছি:

SELECT userid, regdate  FROM (  --Users table is around 3mil rows
    SELECT  userid, RegDate FROM users WHERE userid > 1000000
    UNION 
    SELECT  userid, RegDate FROM users WHERE userid < 1000000
    UNION all
    SELECT userid, RegDate FROM users WHERE userid < 2000000
    ) d ORDER BY RegDate OPTION (RECOMPILE)

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


8

ক্রেগ ফ্রিডম্যানের মতে কনটেনটেশন অপারেটরের জন্য মৃত্যুদণ্ড কার্যকর করার গ্যারান্টি রয়েছে।

তার ব্লগ পোস্ট থেকে এমএসডিএন ব্লগে কোয়েরি প্ল্যানগুলি দেখার জন্য :

মনে রাখবেন যে যখন অপারেটরের একাধিক শিশু থাকে তখন বাচ্চাদের ক্রমটি বিবেচনা করে। শীর্ষস্থানীয় শিশুটি প্রথম শিশু এবং নীচেরতম শিশুটি দ্বিতীয়। কনকনেটেশন অপারেটর এই ক্রমে বাচ্চাদের প্রসেস করে।

এবং অনলাইন শোপ্লান লজিকাল এবং ফিজিক্যাল অপারেটরগুলি রেফারেন্স বই থেকে

কনটেনটেশন ফিজিক্যাল অপারেটরের দুটি বা ততোধিক ইনপুট এবং একটি আউটপুট থাকে। সংঘবদ্ধকরণ প্রথম ইনপুট স্ট্রিম থেকে আউটপুট প্রবাহে সারিগুলি অনুলিপি করে, তারপরে প্রতিটি অতিরিক্ত ইনপুট স্ট্রিমের জন্য এই ক্রিয়াকে পুনরাবৃত্তি করে।


সেই উদ্ধৃতিটি আমি যা খুঁজছিলাম তার খুব কাছাকাছি। আমি সেই আদেশে মৃত্যুদণ্ড কার্যকর করা থেকে এই ক্রমটি ফিরিয়ে আনতে ইচ্ছুক - যদিও এটি হতাশাজনক যে ডকুমেন্টেশন এই ক্ষেত্রে সমান্তরাল প্রক্রিয়াকরণ বন্ধ করে দেয়।
গর্ডন লিনফ

2

সম্প্রদায় উইকি উত্তর :

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

কোনও "ফিক্স" আছে কিনা তা আমি জানি না, বা কোনও ফিক্সের প্রয়োজনীয়তা রয়েছে কিনা তা যদি আপনি প্রমাণ করতে পারেন যে কিছু পরিস্থিতিতে প্রশ্নগুলি আলাদা ক্রমে প্রক্রিয়া করা হয়।

কোনও সুস্পষ্ট, অফিসিয়াল ডকুমেন্টেশনের অভাব আমাকে পরামর্শ দেয় যে আপনার উপর নির্ভর করা উচিত নয়। 8 বছর আগে এসকিউএল সার্ভার 2005 এর অপ্টিমাইজার প্রকাশিত হওয়ার সময় এটি হ'ল এক ধরণের জিনিস যা লোকেরা ORDER BYএকটি দর্শনে এবং তা GROUP BYছাড়া সমস্যায় ORDER BYপড়েছিল।

এসকিউএল সার্ভারের নতুন সংস্করণগুলিতে সমস্ত নতুন বৈশিষ্ট্য সহ (আরও আসার সাথে সাথে), আপনি যদি মনে করেন যে আপনি আজ একটি নির্দিষ্ট আচরণের গ্যারান্টি দিতে পারেন তবে আমি এটিকে সত্য করে রাখার আশা করব না (যতক্ষণ না এটি এটি করার নথি না দেওয়া হয়)।

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

মাইক্রোসফ্ট 'x' 'y' করার গ্যারান্টিযুক্ত নয় বলে কখনও সরকারী নথি প্রকাশ করবে না । এটি এখনও একটি কারণ যা এখনও আমরা প্রায় এক দশক পরেও মানুষকে বোঝাতে সমস্যা করতে পারি যে তারা পর্যবেক্ষণের আদেশ ছাড়াই নির্ভর করতে পারে না ORDER BY- এমন কোনও ডকুমেন্টেশন নেই যা বলে যে "এটির নিশ্চয়তা নেই"।

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