বড় টেবিলের সাথে আমার আই / ও সমস্যা আছে।
সাধারণ পরিসংখ্যান
সারণীতে নিম্নলিখিত প্রধান বৈশিষ্ট্য রয়েছে:
- পরিবেশ: অ্যাজুর এসকিউএল ডাটাবেস (স্তরটি পি 4 প্রিমিয়াম (500 টিটিইউস))
- সারি: 2,135,044,521
- 1,275 টি ব্যবহৃত পার্টিশন
- ক্লাস্টারড এবং পার্টিশনযুক্ত সূচক
মডেল
এটি টেবিল বাস্তবায়ন:
CREATE TABLE [data].[DemoUnitData](
[UnitID] [bigint] NOT NULL,
[Timestamp] [datetime] NOT NULL,
[Value1] [decimal](18, 2) NULL,
[Value2] [decimal](18, 2) NULL,
[Value3] [decimal](18, 2) NULL,
CONSTRAINT [PK_DemoUnitData] PRIMARY KEY CLUSTERED
(
[UnitID] ASC,
[Timestamp] ASC
)
)
GO
ALTER TABLE [data].[DemoUnitData] WITH NOCHECK ADD CONSTRAINT [FK_DemoUnitData_Unit] FOREIGN KEY([UnitID])
REFERENCES [model].[Unit] ([ID])
GO
ALTER TABLE [data].[DemoUnitData] CHECK CONSTRAINT [FK_DemoUnitData_Unit]
GO
বিভাজন এর সাথে সম্পর্কিত:
CREATE PARTITION SCHEME [DailyPartitionSchema] AS PARTITION [DailyPartitionFunction] ALL TO ([PRIMARY])
CREATE PARTITION FUNCTION [DailyPartitionFunction] (datetime) AS RANGE RIGHT
FOR VALUES (N'2017-07-25T00:00:00.000', N'2017-07-26T00:00:00.000', N'2017-07-27T00:00:00.000', ... )
সেবার মান
আমি মনে করি ইনডেক্স এবং পরিসংখ্যানগুলি প্রতি রাতে ইনক্রিমেন্টাল পুনর্নির্মাণ / পুনর্গঠন / আপডেট দ্বারা ভালভাবে বজায় রাখা হয়েছে।
এগুলি সর্বাধিক ব্যবহৃত ব্যবহৃত সূচক পার্টিশনের বর্তমান সূচী পরিসংখ্যান:
এগুলি সর্বাধিক ব্যবহৃত ব্যবহৃত পার্টিশনের বর্তমান পরিসংখ্যান বৈশিষ্ট্য:
সমস্যা
আমি টেবিলের বিপরীতে উচ্চ ফ্রিকোয়েন্সিতে একটি সাধারণ ক্যোয়ারী চালাচ্ছি।
SELECT [UnitID]
,[Timestamp]
,[Value1]
,[Value2]
,[Value3]
FROM [data].[DemoUnitData]
WHERE [UnitID] = 8877 AND [Timestamp] >= '2018-03-01' AND [Timestamp] < '2018-03-13'
OPTION (MAXDOP 1)
কার্যকর করার পরিকল্পনাটি এর মতো দেখাচ্ছে: https://www.brentozar.com/pastetheplan/?id=rJvI_4TtG
আমার সমস্যা হ'ল এই অনুসন্ধানগুলি আই / ও অপারেশনের একটি অত্যন্ত উচ্চ পরিমাণে উত্পাদন করে যার ফলে PAGEIOLATCH_SH
অপেক্ষা করতে বাধা দেয় ।
প্রশ্ন
আমি পড়েছি PAGEIOLATCH_SH
অপেক্ষাগুলি প্রায়শই ভাল-অনুকূলিতকরণের সূচকগুলির সাথে সম্পর্কিত। আই / ও ক্রিয়াকলাপ কীভাবে হ্রাস করবেন তা সম্পর্কে আমার কাছে কোনও সুপারিশ রয়েছে? আরও ভাল একটি সূচক যোগ করে?
উত্তর 1 - @ এস 4 ভি 1 এন এর মন্তব্য সম্পর্কিত
পোস্ট করা ক্যোয়ারী পরিকল্পনাটি এসএসএমএসে আমি কার্যকর করা একটি কোয়েরি থেকে হয়েছিল। আপনার মন্তব্যের পরে আমি সার্ভারের ইতিহাস নিয়ে কিছু গবেষণা করি। পরিষেবা থেকে অতিক্রম করা প্রকৃত ক্যোয়ারীটি কিছুটা আলাদা দেখায় (এন্টি ফ্রেমওয়ার্ক সম্পর্কিত)।
(@p__linq__0 bigint,@p__linq__1 datetime2(7),@p__linq__2 datetime2(7))
SELECT 1 AS [C1], [Extent1]
.[Timestamp] AS [Timestamp], [Extent1]
.[Value1] AS [Value1], [Extent1]
.[Value2] AS [Value2], [Extent1]
.[Value3] AS [Value3]
FROM [data].[DemoUnitData] AS [Extent1]
WHERE ([Extent1].[UnitID] = @p__linq__0)
AND ([Extent1].[Timestamp] >= @p__linq__1)
AND ([Extent1].[Timestamp] < @p__linq__2) OPTION (MAXDOP 1)
এছাড়াও, পরিকল্পনাটি অন্যরকম দেখাচ্ছে:
https://www.brentozar.com/pastetheplan/?id=H1fhALpKG
অথবা
https://www.brentozar.com/pastetheplan/?id=S1DFQvpKz
এবং আপনি এখানে দেখতে পাচ্ছেন, আমাদের ডিবি পারফরম্যান্স এই কোয়েরি দ্বারা খুব সম্ভবত প্রভাবিত।
উত্তর 2 - @ জো ওবিশের উত্তর সম্পর্কিত
সমাধানটি পরীক্ষার জন্য আমি এন্টি ফ্রেমওয়ার্ককে একটি সাধারণ স্কেলকম্যান্ডের সাথে প্রতিস্থাপন করেছি। ফলাফল ছিল একটি আশ্চর্যজনক পারফরম্যান্স উত্সাহ!
ক্যোয়ারী প্ল্যান এখন এসএসএমএসের মতো এবং লজিক্যাল পড়া এবং লেখার জন্য নির্ধারণের জন্য ~ 8 এ নেমে আসে।
সামগ্রিক আই / ও লোড প্রায় 0 এ নেমে গেছে!
এটিও ব্যাখ্যা করে যে আমি পার্টিশনের পরিসীমা মাসিক থেকে প্রতিদিন পরিবর্তনের পরে কেন আমি বড় পারফরম্যান্স ড্রপ পাই। পার্টিশন নির্মূলের অনুপস্থিতির ফলে আরও বেশি পার্টিশন স্ক্যান হতে পারে।