মেমরি-অনুকূলিত টেবিলগুলির সাথে এসকিউএল সার্ভার 2016 এর ভুল আচরণ


13

নিম্নলিখিত এসকিউএল কোয়েরিটি একবার দেখুন:

CREATE TYPE dbo.IN_MEMORY_TABLE_TYPE AS TABLE
(
  source_col INT NULL,
  target_col INT not NULL
  INDEX ix_InMemoryTable NONCLUSTERED (target_col)
)
WITH (MEMORY_OPTIMIZED = ON)
GO

DECLARE
  @t dbo.IN_MEMORY_TABLE_TYPE

INSERT @t
(
  source_col,
  target_col
)
VALUES
  (10, 0),
  (0, 0)

UPDATE r1
SET
  target_col = -1
FROM @t r1
WHERE EXISTS
      (
        SELECT *
        FROM @t r2
        WHERE r2.source_col > 0
      )

SELECT *
FROM @t

GO
DROP TYPE dbo.IN_MEMORY_TABLE_TYPE

এসকিউএল সার্ভার ২০১৪ (12.0.4100.1 X64) এ UPDATEএটি কার্যকর করার সময় ক্যোয়ারীতে থাকা প্রত্যাশাকে সম্পাদন করে এবং নিম্নলিখিত বৈধ ফলাফলটি ফিরে আসে:

উত্স_কোল | target_col
----------------------
10 | -1
0 | -1

যাইহোক, এসকিউএল সার্ভার 2016 (13.0.4001.0 X64) এ কার্যকর করার সময় সমস্ত সারি আপডেট হয় না এবং নিম্নলিখিতটি ফিরে আসে:

উত্স_কোল | target_col
----------------------
10 | -1
0 | 0

এটি আমার কাছে বাগের মতো দেখাচ্ছে, এটি কি আপনার মতো দেখাচ্ছে?


হ্যাঁ, এটি একটি বাগ। এটি এসকিউএল 2017 সিটিপি ২.১ এ পরীক্ষিত এবং এটি এসকিউএল
২০১

উত্তর:


12

হ্যাঁ এটি একটি বাগ, যা কেবল টেবিলের ভেরিয়েবলগুলিকেই প্রভাবিত করে বলে মনে হচ্ছে, বিডাব্লু-ট্রি-ইনডেক্স অ্যাক্সেস পদ্ধতি এবং একটি অসংলগ্ন স্ব-যোগদান।

সরলীকৃত ত্রুটিগুলি ব্যবহার করে DELETE:

CREATE TYPE dbo.IN_MEMORY_TABLE_TYPE AS TABLE
(
    col integer NOT NULL INDEX i NONCLUSTERED (col)
)
WITH (MEMORY_OPTIMIZED = ON);
GO
DECLARE @T AS dbo.IN_MEMORY_TABLE_TYPE;

INSERT @T (col)
VALUES (1), (2), (3), (4), (5);

DELETE T
FROM @T AS T
WHERE EXISTS 
(
    SELECT 1
    FROM @T AS T2
    WHERE T2.col = 1 -- Vary this number 1-5
);

SELECT T.col FROM @T AS T;
GO
DROP TYPE dbo.IN_MEMORY_TABLE_TYPE;

ত্রুটিপূর্ণ পরিকল্পনা

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


এই বাগটি এসকিউএল সার্ভার 2016 এসপি 1 সিই 5 এবং এসকিউএল সার্ভার 2017 সিই 1স্থির হয়েছে :

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