আমি ২০০৮ আর 1 এসপি 3 10.00.5512 এ তিরস্কার করতে সক্ষম হয়েছি তবে সর্বশেষতম সিইউ (14) ইনস্টল করে এটি স্থির করেছে।
অন্তর্বর্তী সংস্করণগুলিতে স্থির বাগগুলি পর্যালোচনা করে দেখে মনে হচ্ছে আপনাকে নীচের ফিক্স সহ এমন একটি বিল্ডে আপগ্রেড করতে হবে।
আপনি যখন এসকিউএল সার্ভার ২০০৮ অথবা এসকিউএল সার্ভার ২০১২-এ আইএন ধারাটিতে অনেক ধ্রুবক মান রয়েছে এমন কোনও ক্যোয়ারী চালান তখন অ্যাক্সেস লঙ্ঘন
আপনি যেমন 2008 আর 2 তে আছেন আপনার এসপি 1 এর জন্য কমপক্ষে সিইউ 9 বা এসপি 2 এর জন্য সিইউ 5 লাগবে।
লক্ষণগুলির বিবরণ কিছুটা সংক্ষিপ্ত হলেও মিল নেই মেলানো ডেটাটাইপগুলি
আপনি যখন মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০৮, মাইক্রোসফ্ট এসকিউএল সার্ভার ২০১২ অথবা মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০৮ আর 2-তে একটি আইওন ক্লাসে অনেক ধ্রুবক মান রয়েছে এমন কোনও কোয়েরি চালনা করেন তখন অ্যাক্সেস লঙ্ঘন হতে পারে।
দ্রষ্টব্য সমস্যাটি ঘটে যাওয়ার জন্য, আইএন ধারাটিতে থাকা ধ্রুবকগুলি কলামের ডেটা টাইপের সাথে ঠিক মেলে না।
এটি "অনেকগুলি" সংজ্ঞায়িত করে না। পরীক্ষার সময় থেকে আমার সন্দেহ হয়েছিল যে এর অর্থ "20 বা ততোধিক" হতে পারে কারণ এটি কার্ডিনালিটির অনুমানের দুটি ভিন্ন পদ্ধতির মধ্যে কাট অফ পয়েন্ট বলে মনে হয়।
ক্র্যাশ পদ্ধতি ডাকা দুয়েক ভিতরে ঘটছে CScaOp_In::FCalcSelectivity()
যেমন নামের সাথে LoadHistogramFromXVariantArray()
এবং CInMemHistogram::FJoin() -> WalkHistograms()
।
তালিকার আইটেমগুলিতে 19 বা তার চেয়ে কম স্বতন্ত্রতার জন্য এই পদ্ধতিগুলি মোটেই কল করা যাচ্ছিল না। একটি অনুরূপ এসকিউএল সেভার 2000 বাগও এই কাট অফ পয়েন্টটিকে উল্লেখযোগ্য হিসাবে উল্লেখ করেছে।
0 এবং 1047 এর মধ্যে মানগুলির সাথে 100,000 সারি এলোমেলো পরীক্ষার ডেটা এবং একটি হিস্টোগ্রাম নিম্নরূপে শুরু করে একটি পরীক্ষার সারণী পপুলেট করা
+--------------+------------+---------+---------------------+----------------+
| RANGE_HI_KEY | RANGE_ROWS | EQ_ROWS | DISTINCT_RANGE_ROWS | AVG_RANGE_ROWS |
+--------------+------------+---------+---------------------+----------------+
| 0 | 0 | 104 | 0 | 1 |
| 8 | 672 | 118 | 7 | 96 |
| 13 | 350 | 118 | 4 | 87.5 |
| 18 | 395 | 107 | 4 | 98.75 |
| 23 | 384 | 86 | 4 | 96 |
| 28 | 371 | 85 | 4 | 92.75 |
+--------------+------------+---------+---------------------+----------------+
ক্যোয়ারী
SELECT * FROM dbo.[TestTable]
where mpnr in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
option (maxdop 1)
1856 এর আনুমানিক সারি দেখায়।
19 সমতার জন্য আনুমানিক সারিগুলি পৃথকভাবে পূর্বাভাস দেওয়ার জন্য এবং সেগুলি একসাথে যুক্ত করে প্রত্যাশা করা ঠিক এটিই।
+-------+----------------+-------+
| 1-7 | AVG_RANGE_ROWS | 96 |
| 8 | EQ_ROWS | 118 |
| 9-12 | AVG_RANGE_ROWS | 87.5 |
| 13 | EQ_ROWS | 118 |
| 14-17 | AVG_RANGE_ROWS | 98.75 |
| 18 | EQ_ROWS | 107 |
| 19 | AVG_RANGE_ROWS | 96 |
+-------+----------------+-------+
7*96 + 118 + 4*87.5 + 118 + 4*98.75 + 107 + 1*96 = 1856
সূত্র আর পরে কাজ করে 20
তালিকায় যোগ করা হয় (আনুমানিক সারি 1902.75
বদলে 1952
অন্য যোগ করার যে 96
মোট উৎপন্ন হবে)।
BETWEEN
কার্ডিনালিটির অনুমান গণনা করার জন্য আরও একটি পদ্ধতি ব্যবহার করা আছে বলে মনে হচ্ছে।
where mpnr BETWEEN 1 AND 20
শুধুমাত্র 1829.6 সারি অনুমান করে। আমি জানি না যে এটি কীভাবে দেখানো হিস্টোগ্রাম থেকে উদ্ভূত হয়েছে।