কীভাবে একটি কলামে পরিসংখ্যান তৈরি রোধ করবেন?


18

আমার কাছে একটি কলাম সহ একটি টেবিল রয়েছে যা আমি চাই না যে পরিসংখ্যান তৈরি করা বা আপডেট করা হোক। আমি যদি ক্যোরি অপটিমাইজারকে সেই কলামের কোনও পরিসংখ্যান হিস্টোগ্রামের বিপরীতে প্রাথমিক কীতে পরিসংখ্যানের ঘনত্ব ব্যবহার করতে বাধ্য করি তবে আমি কার্ডিনালিটির প্রাক্কলনের সাথে আরও ভাল যোগদান করতে পারি I অটো আপডেট এবং স্বতঃ-তৈরি পরিসংখ্যানগুলি ডাটাবেস স্তরে রয়েছে এবং আমি এটি পরিবর্তন করতে পারি না।

আপনি যদি পরিসংখ্যান তৈরির প্রতিরোধের বিকল্পগুলির পরামর্শ দিতে চান তবে মনে রাখবেন যে টেবিলটি হাজার হাজার বিভিন্ন প্রশ্নের দ্বারা উল্লেখ করা ভিউতে ব্যবহৃত হয়েছে। যে প্রশ্নগুলি চালানো হয় তার উপরে আমার নিয়ন্ত্রণ নেই।

আমার প্রাথমিক কৌশলটি ছিল কলামে NOCOMPUTEএবং SAMPLE 0 ROWSবিকল্পগুলি দিয়ে পরিসংখ্যান তৈরি করা । আমি এই ছাপের মধ্যে ছিলাম যে এসকিউএল সার্ভার স্বয়ংক্রিয়ভাবে কোনও কলামে পরিসংখ্যান তৈরি করবে না যার ইতিমধ্যে একটি পরিসংখ্যান অবজেক্ট রয়েছে, তবে আমাদের দেব এবং কিউএ সার্ভারে এটি ঘটেছে।

জন্য নতুন পরিসংখ্যান তৈরি করা হয়েছিল COL_GROUP। আমার NORECOMPUTEপরিসংখ্যান আপডেট করা হয়নি। আমি জানি না কেন পরিসংখ্যান তৈরি হয়েছিল এবং আমি অনুসন্ধান চালিয়ে নিজেই এটি ট্রিগার করতে পারিনি।

এসকিউএল সার্ভারকে কোনও কলামে স্বয়ংক্রিয়ভাবে পরিসংখ্যান তৈরি করা থেকে বিরত করার কোনও উপায় আছে? আমার টেবিলটিতে কেবল দুটি কলাম রয়েছে যাতে একটি সমাধান যা একটি একক টেবিলে অটো-স্ট্যাটাস তৈরি হতে বাধা দেয় তাও আমার সমস্যার সমাধান করবে।

এটি কোনও পার্থক্য তৈরির ক্ষেত্রে ট্রেস পতাকা 4139 এবং 2371 চলছে।

আপনি যদি টেবিলের কাঠামোটি নিয়ে ঘুরে দেখতে চান তবে আমি এটি এবং নীচের নমুনার ডেটা অন্তর্ভুক্ত করেছি:

CREATE TABLE X_NO_COLUMN_STATS(
    [COL_USER] [varchar](256) NOT NULL,
    [COL_GROUP] [int] NOT NULL,
 CONSTRAINT [PK_X_NO_COLUMN_STATS] PRIMARY KEY CLUSTERED 
(
    [COL_USER] ASC,
    [COL_GROUP] ASC
)WITH (DATA_COMPRESSION = PAGE)
);

-- prevent stats from being updated on COL_GROUP
CREATE STATISTICS [X_NO_COLUMN_STATS__COL_GROUP] ON X_NO_COLUMN_STATS ([COL_GROUP]) WITH NORECOMPUTE, SAMPLE 0 ROWS;

BEGIN TRANSACTION;
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',104);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',106);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',107);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',108);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',110);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',111);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',112);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',113);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',114);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',116);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',117);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',118);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',121);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',123);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',124);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',125);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',126);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',129);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',132);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',137);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',139);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',140);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',144);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',145);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',147);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',152);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',153);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',154);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',155);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',162);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',163);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',165);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',168);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',169);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',170);
INSERT INTO X_NO_COLUMN_STATS VALUES ('CUSER1',178);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',102);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',103);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',109);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',110);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',111);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',112);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',114);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',115);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',119);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',120);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',121);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',123);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',124);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',126);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',128);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',136);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',137);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',138);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',142);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',143);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',148);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',151);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',152);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',155);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',156);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',157);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',158);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',165);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',167);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',168);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',169);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',171);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',173);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',176);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',177);
INSERT INTO X_NO_COLUMN_STATS VALUES ('OUSER19',178);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',104);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',108);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',109);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',111);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',112);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',113);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',114);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',116);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',117);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',118);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',121);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',123);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',124);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',125);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',126);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',129);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',132);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',137);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',139);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',140);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',144);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',145);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',147);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',152);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',154);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',155);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',162);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',163);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',165);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',168);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',169);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',170);
INSERT INTO X_NO_COLUMN_STATS VALUES ('TUSER30',178);
COMMIT TRANSACTION;

আমি জানি sp_autostatsতবে অটোমেটিক পরিসংখ্যানগুলি রোধ করতে আমার কিছু প্রয়োজন need sp_autostatsকেবলমাত্র পরিসংখ্যানকে স্বয়ংক্রিয়ভাবে আপডেট হওয়া থেকে বিরত রাখে।


1
আপনার আসল টেবিলটিতে কতটা ডেটা রয়েছে? এবং প্রতিদিনের ভিত্তিতে কতটা ডেটা যুক্ত হয়?
জন ওরফে হট 2 ইউজ

আপনি কি উভয় কলামে একটি পরিসংখ্যান তৈরি করে দেখেছেন এবং কীভাবে এটি ক্যোয়ারের কার্য সম্পাদনকে প্রভাবিত করে তা দেখেছেন? পরিসংখ্যান তৈরি করুন [X_NO_COLUMN_STATS__COL_GROUP] X_NO_COLUMN_STATS ([COL_USER], [COL_GROUP]) এ; যদি উভয় কলাম কলামে থাকে তবে এটি COL_GROUP এ কোনও স্ট্যাটাস তৈরি করতে পারে না তবে কেবল COL_GROUP থাকলে তা হবে। তবে সেক্ষেত্রে COL_USER পরিসংখ্যানের চেয়ে সেই পরিসংখ্যানগুলির সাথে পারফরম্যান্স আরও ভাল হওয়া উচিত।
সিফ্রেডেনবার্গ

উত্তর:


1

А নতুন ডাটাবেস তৈরি করুন (আসুন একে টেস্টস্ট্যাটস বলুন), অটো তৈরির পরিসংখ্যানটি অক্ষম করুন এবং সেখানে X_NO_COLUMN_STATS টেবিলটি সরান। এর পরে আপনার ডাটাবেসে এমন একটি ভিউ তৈরি করুন যা হিস্টোগ্রাম ছাড়াই টেবিলের দিকে নির্দেশ করবে:

CREATE VIEW X_NO_COLUMN_STATS
AS
    SELECT [COL_USER], [COL_GROUP] FROM TestStats.dbo.X_NO_COLUMN_STATS;
GO

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


দুর্ভাগ্যবশত, এই অপূর্ণতা অনেক আছে: এটা বিদেশী কী সম্পর্ক, প্রবর্তন ক্রস ডাটাবেসের লেনদেন, ভঙ্গ ইত্যাদি আরো অনেক কিছু সময় একটি একক বিন্দু ব্যাকআপ ও পুনরুদ্ধার তোলে চ্যালেঞ্জ,
ব্রেন্ট Ozar

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