আমি একটি দৈনিক ডেটাওয়ারহাউস বিল্ডে তুলনামূলকভাবে দীর্ঘ চলমান (20 মিনিট +) স্বয়ংক্রিয় আপডেটের পরিসংখ্যান অপারেশনটি লক্ষ্য করেছি। জড়িত টেবিলটি হ'ল
CREATE TABLE [dbo].[factWebAnalytics](
[WebAnalyticsId] [bigint] IDENTITY(1,1) NOT NULL,
[MarketKey] [int] NOT NULL CONSTRAINT [DF_factWebAnalytics_MarketKey] DEFAULT ((-1)),
/*Other columns removed*/
CONSTRAINT [PK_factWebAnalytics] PRIMARY KEY CLUSTERED
(
[MarketKey] ASC,
[WebAnalyticsId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MarketKeyPS]([MarketKey])
) ON [MarketKeyPS]([MarketKey])
এটি মাইক্রোসফ্ট এসকিউএল সার্ভার 2012 (এসপি 1) - 11.0.3513.0 (এক্স 64) এ চলছে তাই লিখনযোগ্য কলামস্টোর সূচকগুলি উপলভ্য নয়।
সারণীতে দুটি স্বতন্ত্র বাজার কীগুলির জন্য ডেটা রয়েছে। বিল্ডটি নির্দিষ্ট মার্ককি কে একটি স্টেজিং টেবিলের জন্য পার্টিশনটি স্যুইচ করে, কলামস্টোর সূচকটি অক্ষম করে, প্রয়োজনীয় লেখাগুলি সম্পাদন করে, কলামস্টোরটি পুনর্নির্মাণ করে, তারপরে আবার স্যুইচ করে।
আপডেটের পরিসংখ্যানগুলির জন্য কার্যকরকরণ পরিকল্পনায় দেখা যায় যে এটি সারণী থেকে সমস্ত সারি টেনে আনে, সেগুলি সাজায়, সারিগুলির আনুমানিক সংখ্যাটি খারাপভাবে পেয়ে যায় এবং tempdb
স্পিল স্তর 2 দিয়ে ছড়িয়ে পড়ে।
চলমান
SELECT [s].[name] AS "Statistic",
[sp].*
FROM [sys].[stats] AS [s]
OUTER APPLY sys.dm_db_stats_properties ([s].[object_id], [s].[stats_id]) AS [sp]
WHERE [s].[object_id] = OBJECT_ID(N'[dbo].[factWebAnalytics]');
শো
যদি আমি স্পষ্টভাবে চেষ্টা করি এবং সেই সূচকটির পরিসংখ্যানের নমুনা আকারটি অন্যদের দ্বারা ব্যবহৃত ব্যবহারের সাথে হ্রাস করি
UPDATE STATISTICS [dbo].[factWebAnalytics] [PK_factWebAnalytics] WITH SAMPLE 897667 ROWS
ক্যোয়ারীটি আবার 20 মিনিটের জন্য চলতে থাকে এবং সম্পাদন পরিকল্পনাটি দেখায় যে এটি 897,667 নমুনার অনুরোধ করা নয়, সমস্ত সারি প্রক্রিয়াকরণ করছে।
এই সমস্তের শেষে প্রাপ্ত পরিসংখ্যানগুলি খুব আকর্ষণীয় নয় এবং অবশ্যই পুরো স্ক্যানের জন্য ব্যয় করা সময়ের জন্য ওয়ারেন্ট দেবে বলে মনে হয় না।
Statistics for INDEX 'PK_factWebAnalytics'.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Name Updated Rows Rows Sampled Steps Density Average Key Length String Index
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PK_factWebAnalytics Jan 22 2016 11:31AM 420072086 420072086 2 0 12 NO 420072086
All Density Average Length Columns
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0.5 4 MarketKey
2.380544E-09 12 MarketKey, WebAnalyticsId
Histogram Steps
RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 0 3.441652E+08 0 1
2 0 7.590685E+07 0 1
আমি কেন এই আচরণের মুখোমুখি হচ্ছি এবং এই ব্যবহারগুলি বাদ দিয়ে আমি কী কী পদক্ষেপ নিতে পারি NORECOMPUTE
?
একটি নিন্দিত লিপি এখানে আছে । এটি কেবল একটি ক্লাস্টারযুক্ত পিকে এবং একটি কলাম স্টোর সূচী সহ একটি টেবিল তৈরি করে এবং কম নমুনা আকারের সাথে পিকে পরিসংখ্যান আপডেট করার চেষ্টা করে। এটি বিভাজন ব্যবহার করে না - দেখায় যে পার্টিশনের দিকটি আবশ্যক নয়। তবে উপরে বর্ণিত পার্টিশন ব্যবহারের ফলে পার্টিশনটি স্যুইচ করা এবং তারপরে আবার পরিবর্তন করা (এমনকি অন্য কোনও পরিবর্তন ছাড়াই) পার্টিশনের সারি সংখ্যার দ্বিগুণ করে পরিবর্তন_কাউন্টারকে বাড়িয়ে তুলবে এভাবে ব্যবহারিকভাবে গ্যারান্টি দেওয়া যে পরিসংখ্যানগুলি হবে বিবেচিত বাসি এবং স্বয়ংক্রিয় আপডেট।
আমি KB2986627 (যেমন উভয়ই কোনও সারি ছাড়াই ফিল্টার করা হয়েছে এবং তারপরে, যখন এটি ব্যর্থ হয়, একটি ফিল্টারযুক্ত এনসিআইও কার্যকর হয় না) তে উল্লিখিত টেবিলে একটি ক্লাস্টারযুক্ত সূচক যুক্ত করার চেষ্টা করেছি)
11.0.6020.0 নির্মাণের ক্ষেত্রে পুনরায় ত্রুটিযুক্ত সমস্যাটি দেখা যায় নি এবং এসপি 3-তে আপগ্রেড করার পরে বিষয়টি এখন ঠিক হয়ে গেছে।
SELECT WebAnalyticsId, MarketKey from [dbo].[factWebAnalytics] TABLESAMPLE (897667 ROWS) ORDER BY MarketKey, WebAnalyticsId
আমার জন্য 30 সেকেন্ডেরও কম সময়ে চলে। এটি কলামস্টোর সূচকটি ব্যবহার করে না। এটি ক্লাস্টারড ইনডেক্স ব্যবহার করে।