অনন্য সূচক আপডেট এবং পরিসংখ্যান সারি পরিবর্তন কাউন্টার


14

নিম্নলিখিত সারণী, অনন্য ক্লাস্টারড সূচক এবং পরিসংখ্যান দেওয়া হয়েছে:

CREATE TABLE dbo.Banana
(
    pk integer NOT NULL, 
    c1 char(1) NOT NULL, 
    c2 char(1) NOT NULL
);

CREATE UNIQUE CLUSTERED INDEX pk ON dbo.Banana (pk);

CREATE STATISTICS c1 ON dbo.Banana (c1);
CREATE STATISTICS c2 ON dbo.Banana (c2);

INSERT dbo.Banana 
    (pk, c1, c2) 
VALUES 
    (1, 'A', 'W'), 
    (2, 'B', 'X'), 
    (3, 'C', 'Y'), 
    (4, 'D', 'Z');

-- Populate statistics
UPDATE STATISTICS dbo.Banana;

উদাহরণ ডেটা

পরিসংখ্যান সারি পরিবর্তন কাউন্টারগুলি কোনও আপডেটের আগে অবশ্যই শূন্য দেখায়:

-- Show statistics modification counters
SELECT
    stats_name = S.[name], 
    DDSP.stats_id,
    DDSP.[rows],
    DDSP.modification_counter
FROM sys.stats AS S
CROSS APPLY sys.dm_db_stats_properties(S.object_id, S.stats_id) AS DDSP
WHERE
    S.[object_id] = OBJECT_ID(N'dbo.Banana', N'U');

শূন্য পরিবর্তন কাউন্টার

প্রতিটি pkকলামের জন্য প্রতিটি কলামের মান এক এক করে বাড়ানো:

-- Increment pk in every row
UPDATE dbo.Banana 
SET pk += 1;

কার্যকর করার পরিকল্পনাটি ব্যবহার করে:

বিভাজন অনুসারে বাছাইয়ের পরিকল্পনাটি কার্যকর হবে

এটি নিম্নলিখিত পরিসংখ্যান সংশোধন কাউন্টার উত্পাদন করে:

পোস্ট-আপডেট পরিবর্তন কাউন্টার

প্রশ্নাবলি

  1. স্প্লিট, বাছাই করা এবং সঙ্কুচিত অপারেটররা কী করে?
  2. কেন pkপরিসংখ্যান 2 পরিবর্তন দেন কিন্তু c1c2দেন 5?

উত্তর:


15

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

প্রশ্নের উদাহরণ দিয়ে কাজ করে আমরা উপস্থিত চারটি সারিটির পৃথক একক-সারি আপডেট হিসাবে আপডেটটি লিখতে পারি:

-- Per row updates
UPDATE dbo.Banana SET pk = 2 WHERE pk = 1;
UPDATE dbo.Banana SET pk = 3 WHERE pk = 2;
UPDATE dbo.Banana SET pk = 4 WHERE pk = 3;
UPDATE dbo.Banana SET pk = 5 WHERE pk = 4;

সমস্যাটি হ'ল প্রথম বিবৃতিটি ব্যর্থ হবে, যেহেতু এটি pk1 থেকে 2 থেকে পরিবর্তিত হয় এবং ইতিমধ্যে যেখানে একটি সারি রয়েছে pk= ২। এসকিউএল সার্ভার স্টোরেজ ইঞ্জিনের প্রয়োজন হয় যে একক বিবৃতিতে এমনকি প্রসেসিংয়ের প্রতিটি পর্যায়ে অনন্য সূচকগুলি অনন্য থাকতে পারে । এই সমস্যাটি স্প্লিট, বাছাই এবং সঙ্কুচিত হয়ে সমাধান করা হয়েছে।

বিভক্ত করা বিভক্ত করা

প্রথম পদক্ষেপটি প্রতিটি আপডেটের বিবৃতিটি একটি সন্নিবেশের পরে মুছে ফেলার মধ্যে বিভক্ত করা হয়:

DELETE dbo.Banana WHERE pk = 1;
INSERT dbo.Banana (pk, c1, c2) VALUES (2, 'A', 'W');

DELETE dbo.Banana WHERE pk = 2;
INSERT dbo.Banana (pk, c1, c2) VALUES (3, 'B', 'X');

DELETE dbo.Banana WHERE pk = 3;
INSERT dbo.Banana (pk, c1, c2) VALUES (4, 'C', 'Y');

DELETE dbo.Banana WHERE pk = 4;
INSERT dbo.Banana (pk, c1, c2) VALUES (5, 'D', 'Z');

স্প্লিট অপারেটর স্ট্রিমটিতে একটি অ্যাকশন কোড কলাম যুক্ত করে (এখানে Act1007 লেবেলযুক্ত):

বিভক্ত বৈশিষ্ট্য

অ্যাকশন কোডটি আপডেটের জন্য 1, একটি মুছার জন্য 3 এবং একটি সন্নিবেশের জন্য 4 হয়।

সাজান সাজান

উপরের বিভক্ত বিবৃতিগুলি এখনও একটি মিথ্যা ক্ষণস্থায়ী অনন্য কী লঙ্ঘন তৈরি করবে, সুতরাং পরবর্তী পদক্ষেপটি অনন্য সূচকের কীগুলি দ্বারা আপডেট হওয়া ( pkএই ক্ষেত্রে) কীগুলি দ্বারা বিবৃতিগুলি সাজান , তারপরে ক্রিয়া কোড দ্বারা। এই উদাহরণস্বরূপ, এর সহজ অর্থ হ'ল একই কীতে মুছে ফেলা (3) সন্নিবেশ (4) এর আগে অর্ডার করা হয়। ফলাফলটি হ'ল:

-- Sort (pk, action)
DELETE dbo.Banana WHERE pk = 1;
DELETE dbo.Banana WHERE pk = 2;
INSERT dbo.Banana (pk, c1, c2) VALUES (2, 'A', 'W');
DELETE dbo.Banana WHERE pk = 3;
INSERT dbo.Banana (pk, c1, c2) VALUES (3, 'B', 'X');
DELETE dbo.Banana WHERE pk = 4;
INSERT dbo.Banana (pk, c1, c2) VALUES (4, 'C', 'Y');
INSERT dbo.Banana (pk, c1, c2) VALUES (5, 'D', 'Z');

বৈশিষ্ট্যগুলি বাছাই করুন

পতন পতন

পূর্ববর্তী পর্যায়ে সমস্ত ক্ষেত্রে মিথ্যা স্বতন্ত্রতা লঙ্ঘন এড়ানো গ্যারান্টি যথেষ্ট। একটি অপ্টিমাইজেশান হিসাবে, সঙ্কুচিত সম্মিলন সংলগ্ন মোছাগুলিকে এবং টিপে একই কী মূল্যের ওপর একটি আপডেট মধ্যে:

-- Collapse (pk)
DELETE dbo.Banana WHERE pk = 1;
UPDATE dbo.Banana SET c1 = 'A', c2 = 'W' WHERE pk = 2;
UPDATE dbo.Banana SET c1 = 'B', c2 = 'X' WHERE pk = 3;
UPDATE dbo.Banana SET c1 = 'C', c2 = 'Y' WHERE pk = 4;
INSERT dbo.Banana (pk, c1, c2) VALUES (5, 'D', 'Z');

pk2, 3 এবং 4 এর মানগুলির জন্য মুছুন / সন্নিবেশ করা জোড়গুলিকে একটি আপডেটে একত্রিত করা হয়েছে, pk= 1 এ একক মুছুন এবং pk= 5 এর জন্য একটি সন্নিবেশ রেখে ।

সঙ্কুচিত অপারেটরটি মূল কলামগুলির দ্বারা সারিগুলিকে গোষ্ঠীভুক্ত করে এবং পতনের ফলাফলটি প্রতিফলিত করতে ক্রিয়া কোড আপডেট করে:

বৈশিষ্ট্যগুলি সঙ্কুচিত করুন

ক্লাস্টারড ইনডেক্স আপডেট ক্লাস্টারড ইনডেক্স আপডেট

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

ক্লাস্টারড ইনডেক্স আপডেট ক্রিয়া সম্পত্তি


সারি পরিবর্তন কাউন্টার

নোট করুন যে উপরের তিনটি আপডেট রক্ষণাবেক্ষণের জন্য অনন্য সূচকের কী (গুলি) পরিবর্তন করে না । ফলস্বরূপ, আমরা সূচীর মূল কলামগুলিতে আপডেটগুলি নন-কী কলামগুলি c1এবং ( এবং c2), পাশাপাশি একটি মুছুন এবং একটি সন্নিবেশকে আপডেট করেছি । কোনও মুছুন বা সন্নিবেশ করাই মিথ্যা অনন্য-কী লঙ্ঘনের কারণ হতে পারে না।

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

পরিসংখ্যান সারি পরিমার্জন কাউন্টারে অতএব 2 পরিবর্তনগুলি দেখতে pk, এবং 5 জন্য c1এবং c2:

-- Collapse (pk)
DELETE dbo.Banana WHERE pk = 1;                         -- All columns modified
UPDATE dbo.Banana SET c1 = 'A', c2 = 'W' WHERE pk = 2;  -- c1 and c2 modified
UPDATE dbo.Banana SET c1 = 'B', c2 = 'X' WHERE pk = 3;  -- c1 and c2 modified
UPDATE dbo.Banana SET c1 = 'C', c2 = 'Y' WHERE pk = 4;  -- c1 and c2 modified
INSERT dbo.Banana (pk, c1, c2) VALUES (5, 'D', 'Z');    -- All columns modified

দ্রষ্টব্য: কেবলমাত্র বেস অবজেক্টে প্রয়োগ করা পরিবর্তনগুলি (হিপ বা ক্লাস্টার ইনডেক্স) পরিসংখ্যান সারি পরিবর্তন কাউন্টারগুলিকে প্রভাবিত করে। নন-ক্লাস্টারড ইনডেক্সগুলি গৌণ কাঠামো, বেস অবজেক্টে ইতিমধ্যে করা পরিবর্তনগুলি প্রতিফলিত করে। তারা পরিসংখ্যান সারি পরিবর্তন কাউন্টারগুলিকে মোটেই প্রভাবিত করে না।

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

পরিসংখ্যান আপডেটের উপর প্রভাব

স্বয়ংক্রিয় পরিসংখ্যান আপডেট (সক্ষম থাকলে) ঘটে যখন কোয়েরি অপটিমাইজার পরিসংখ্যানগত তথ্য ও বিজ্ঞপ্তিগুলিকে বিদ্যমান পরিসংখ্যান দরকার তারিখ সীমার বাইরে (ক স্কিমা পরিবর্তনের কারণে অথবা অবৈধ)। পরিসংখ্যানগুলি পুরানো বিবেচনা করা হয় যখন রেকর্ডকৃত সংখ্যার সংখ্যা একটি প্রান্তিক ছাড়িয়ে যায়।

প্রত্যাশিত তুলনায় রেকর্ড করা হচ্ছে বিভিন্ন সারি পরিবর্তনগুলিতে বিভক্ত / সাজান / সঙ্কুচিত বিন্যাসের ফলাফল । এর পরিবর্তে এর অর্থ হ'ল কোনও পরিসংখ্যান আপডেটের তাড়াতাড়ি বা পরে ট্রিগার করা হতে পারে অন্যথায় এটি হতে পারে।

উপরের উদাহরণে, মূল কলামের জন্য সারি পরিবর্তনগুলি 4 টির পরিবর্তে (নেট পরিবর্তন) বৃদ্ধি করে (প্রতিটি টেবিলের সারিটির জন্য একটি প্রভাবিত), বা 5 (সঙ্কুচিত দ্বারা উত্পাদিত প্রতিটি মুছ / আপডেট / সন্নিবেশের জন্য একটি) one

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


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

UPDATE dbo.Banana SET pk = pk + 0; -- Full overlap

pk = pk + 0

UPDATE dbo.Banana SET pk = pk + 1;

pk = pk + 1

UPDATE dbo.Banana SET pk = pk + 2;

pk = pk + 2

UPDATE dbo.Banana SET pk = pk + 3;

pk = pk + 3

UPDATE dbo.Banana SET pk = pk + 4; -- No overlap

pk = pk + 4

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