টেম্পডিবিতে ছড়িয়ে পড়া বাছাই করুন তবে অনুমান করা সারিগুলি প্রকৃত সারিগুলির সমান


14

একটি এসকিউএল সার্ভার 2016 এসপি 2-তে সর্বাধিক মেমোরি সহ 25 জিবি সেট করা রয়েছে আমাদের একটি ক্যোয়ারী রয়েছে যা এক মিনিটে প্রায় 80 বার কার্যকর করে exec কোয়েরিটি প্রায় 4000 পৃষ্ঠাগুলি টেম্পিডবিতে ছড়িয়ে দেয়। এটি টেম্পডিবির ডিস্কে প্রচুর আইও তৈরি করে।

আপনি যখন ক্যোয়ারী প্ল্যানে (সরল ক্যোয়ারী) এক নজরে দেখুন তখন আপনি দেখতে পাবেন যে আনুমানিক সারিগুলির সংখ্যা প্রকৃত সারিগুলির সংখ্যার সমান তবে তবুও ছড়িয়ে পড়ে। সুতরাং মেয়াদোত্তীর্ণ পরিসংখ্যান সমস্যার কারণ হতে পারে না।

আমি টেম্পডিবিতে কিছু পরীক্ষার এবং নিম্নলিখিত কোয়েরি স্পিল করেছি:

select id --uniqueidentifier
from SortProblem
where [status] ='A'
order by SequenceNumber asc
option (maxdop 1)

তবে আমি যদি কোনও আলাদা কলামটি নির্বাচন করি তবে কোনও স্পিল আসবে না:

select startdate --datetime
from SortProblem
where [status] ='A'
order by SequenceNumber asc 
option (maxdop 1)

সুতরাং আমি আইডি কলামটির আকার 'প্রসারিত' করার চেষ্টা করেছি:

select CONVERT(nvarchar(512),id)
from SortProblem
where [status] ='A'
order by SequenceNumber asc 
option (maxdop 1)

তারপরেও কোনও স্পিলিং ঘটে না।

টেম্পিডিবিতে একটি অনন্য পরিচয়দাতা কেন ছড়িয়ে পড়ছে এবং একটি ডেটাটাইম কলাম নয়? আমি যখন প্রায় 20000 রেকর্ডগুলি মুছব তখন আইডি কলামটি নির্বাচন করার পরে কোনও স্পিলিং ঘটে না।

নিম্নলিখিত স্ক্রিপ্টের সাহায্যে আপনি সমস্যার পুনঃ উত্পাদন করতে পারেন:

CREATE TABLE SortProblem
  (
     id             UNIQUEIDENTIFIER,
     startdate      DATETIME,
     sequencenumber BIGINT,
     status         VARCHAR(50),
     PRIMARY KEY CLUSTERED(id)
  )

SET nocount ON;

WITH nums(num)
     AS (SELECT TOP 103000 ROW_NUMBER()
                             OVER (
                               ORDER BY 1/0)
         FROM   sys.all_objects o1,
                sys.all_objects o2)
INSERT INTO SortProblem
SELECT newid(),
       DATEADD(millisecond, num, GETDATE()),
       num,
       CASE
         WHEN num <= 100000 THEN 'A'
         WHEN num <= 101000 THEN 'B'
         WHEN num <= 102000 THEN 'C'
         WHEN num <= 103000 THEN 'D'
       END
FROM   nums

CREATE NONCLUSTERED INDEX [IX_Status]
  ON [dbo].[SortProblem]([status] ASC)
  INCLUDE ([sequencenumber]) 

উত্তর:


14

ট্রেস পতাকা 7470 সক্ষম করুন।

ফিক্স: সারণি অপারেটর এসকিউএল সার্ভার ২০১২ বা এসকিউএল সার্ভার ২০১৪-তে টেম্পিডবি করতে ছড়িয়ে পড়ে যখন সারি এবং সারির আকারের আনুমানিক সংখ্যা সঠিক হয়

আমি প্রশ্নের পরিকল্পনার প্রশ্নের উত্তরে যেমন লিখেছি :

এই ট্রেস পতাকা গণনায় একটি তদারকি সংশোধন করে। এটি ব্যবহার করা বেশ নিরাপদ এবং আমার মতে ডিফল্টরূপে হওয়া উচিত। পরিবর্তনটি অনাকাঙ্ক্ষিত পরিকল্পনার পরিবর্তনগুলি এড়াতে কেবল একটি ট্রেস পতাকা দ্বারা সুরক্ষিত।

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