ব্যাচ মোড উইন্ডো সমষ্টিগত ফলন পাটিগণিতের ওভারফ্লো কেন করে?


11

নিম্নলিখিত কোয়েরিটি SUMকলাম স্টোর টেবিলের সাথে উইন্ডোড সম্পাদন 1500 total rowsকরে, যার প্রত্যেকটির মান 0 বা 1 থাকে এবং এটি INTডেটা প্রকারকে উপচে ফেলে । ইহা কি জন্য ঘটিতেছে?

SELECT a, p, s, v, m, n,
    SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END)
        OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition
FROM (
    SELECT a, p, s, v, m, n,
        RANK() OVER (PARTITION BY v, s, a, p ORDER BY m) AS rank
    FROM #t /* A columnstore table with 1,500 rows */
)  x
WHERE x.rank = 1
--Msg 8115, Level 16, State 2, Line 1521
--Arithmetic overflow error converting expression to data type int.

সম্পূর্ণ স্ক্রিপ্ট

সম্পূর্ণরূপে অন্তর্ভুক্ত প্রজনন স্ক্রিপ্টের জন্য এই ফাইলটি দেখুন।

অনুসন্ধান পরিকল্পনা

এখানে একটি এনোটেটেড আনুমানিক ক্যোয়ারী প্ল্যান রয়েছে (প্ল্যানটি প্লাস্ট করে দেওয়ার পুরো এক্সএমএল )।

এখানে চিত্র বর্ণনা লিখুন

অনুরূপ ক্যোয়ারী যা সফলভাবে কার্যকর হয়

নিম্নলিখিত নিম্নলিখিত পরিবর্তনগুলি করা হয়, ত্রুটি ঘটবে না:

  • 8649সমান্তরালতার জন্য ব্যয় প্রান্তিক নির্বিশেষে একটি সমান্তরাল পরিকল্পনা পছন্দ করতে ট্রেস পতাকা ব্যবহার করুন
  • 9453ব্যাচ মোড অক্ষম করতে ট্রেস পতাকা ব্যবহার করুন
  • ব্যবহার করুন COUNTপরিবর্তে অ্যাগ্রিগেশন ফাংশন SUMফাংশন
  • WHERE x.rank = 1প্রিকিকেট সরান

উদাহরণস্বরূপ, এই ক্যোয়ারীটি সফলভাবে সম্পাদন করে:

SELECT a, p, s, v, m, n,
    SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END)
        OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition
FROM (
    SELECT a, p, s, v, m, n,
        RANK() OVER (PARTITION BY v, s, a, p ORDER BY m) AS rank
    FROM #t /* A columnstore table with 1,500 rows */
)  x
WHERE x.rank = 1
OPTION (QUERYTRACEON 9453/* Disable batch mode */) 

উত্তর:


6

একাধিক মন্তব্যকারী এই সমস্যাটি পুনরুত্পাদন করতে সক্ষম হয়েছে। আমরা প্রাথমিকভাবে ভেবেছিলাম যে এসকিউএল সার্ভার 2017 সিইউ 10 সমস্যাটি সমাধান করেছে, তবে তারপরে আমরা দেখতে পেয়েছি যে সিইউ 10 সহ আমরা চেষ্টা করা এসকিউএল সার্ভারের সমস্ত সংস্করণে ত্রুটিটি পুনরুত্পাদন করা যেতে পারে। তবে কিছু মন্তব্যকারী সুযোগের একটি উপাদান পর্যবেক্ষণ করেছেন যেখানে একই স্ক্রিপ্ট সবসময় ত্রুটিটি ট্রিগার করে না।

যেহেতু কোনও যৌক্তিক উপায় নেই যে নন-নেতিবাচক সংখ্যার একটি সেট জুড়ে একটি সমষ্টি গণনা করা যায় যার সর্বাধিক সম্ভাব্য পরিমাণ 1,500 হয় 32 বিট পূর্ণসংখ্যাকে উপচে ফেলতে পারে, আমরা বিশ্বাস করি এটি ব্যাচ মোড উইন্ডো সমষ্টি অপারেটরের একটি বাগ g এসকিউএল সার্ভার ২০১ 2016 এ নতুন অপারেটর হওয়ার কারণে এটি ধরে নেওয়া যুক্তিসঙ্গত যে এখনও কিছুটা লোকে বেরিয়ে আসতে পারে।

আমরা মাইক্রোসফ্টের সাথে দায়ের করা বাগ প্রতিবেদনটি এখানে দিই।

প্রতিক্রিয়াটি ছিল:

এটি এসকিউএল সার্ভার 2019 সিটিপি ২.১ এ স্থির করা হয়েছে এবং শিগগিরই আজুর এসকিউএল ডেটাবেজে স্থির করা হবে।

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