আমাদের বিভাজন কৌশলটি মূল্যায়নে সহায়তা করতে আমি কীভাবে এই ডিএমভিগুলির ফলাফল ব্যাখ্যা করতে পারি?


12

সংস্করণ: এসকিউএল সার্ভার ২০০৮ আর 2 এন্টারপ্রাইজ এড্টন। (10.50.4000)

আমাদের বিভাজন কৌশলটি মূল্যায়ন করার প্রয়াসে, আমি পার্টিশনগুলিতে সূচকের বিপরীতে অ্যাক্সেসের পদ্ধতিগুলি পেতে (এই শব্দটির বিস্তৃত অর্থে, যদিও আমি স্তূপগুলি অপসারণ করছি) এই প্রশ্নটি লিখেছিলাম wrote পার্টিশনযুক্ত টেবিলগুলিতে আমার ফোকাস সংকীর্ণ করার সাথে সাথে আমি বিশ্বাস করি যে আমাকে দেখার প্রয়োজন range_scan_countএবং singleton_lookup_countএটির জন্য খুব কঠিন সময়টি ধারণ করাও দরকার।

SELECT 
    t.name AS table_name,
    i.name AS index_name,
    ios.partition_number, 
    leaf_insert_count,
    leaf_delete_count,
    leaf_update_count,
    leaf_ghost_count,
    range_scan_count,
    singleton_lookup_count,
    page_latch_wait_count ,
    page_latch_wait_in_ms,
    row_lock_count ,
    page_lock_count,
    row_lock_wait_in_ms ,
    page_lock_wait_in_ms,
    page_io_latch_wait_count ,
    page_io_latch_wait_in_ms
FROM sys.dm_db_partition_stats ps
    JOIN sys.tables t 
        ON ps.object_id = t.object_id
    JOIN sys.schemas s 
        ON t.schema_id = s.schema_id
    JOIN sys.indexes i 
        ON t.object_id = i.object_id
    AND ps.index_id = i.index_id
OUTER APPLY sys.dm_db_index_operational_stats(DB_ID(), NULL, NULL, NULL) ios                            
WHERE   
    ps.object_id = ios.object_id
    AND ps.index_id = ios.index_id
    AND ps.partition_number = ios.partition_number
    and ps.index_id = ios.index_id
    and ps.partition_number = ios.partition_number                                  
    and s.name <> 'sys'     
    and ps.index_id <> 0 ;

প্রাসঙ্গিক আউটপুট (টেবিলগুলির এসওর ফর্ম্যাটিংয়ের ফাঁক প্রদত্ত, এটি শেষের দুটি স্তম্ভ range_scan_countএবং singleton_lookup_countযথাক্রমে কোয়েরি থেকে প্রথম 9 টি কলামের একটি নমুনা ):

╔════════╦═════════════════╦════╦═══╦═══╦═══╦═══╦════════╦══════════╗
║ datetb ║ idx_datetb_col  ║  1 ║ 0 ║ 0 ║ 0 ║ 0 ║ 205740 ║  3486408 ║
║ datetb ║ idx_datetb_col  ║  2 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  1079649 ║
║ datetb ║ idx_datetb_col  ║  3 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  1174547 ║
║ datetb ║ idx_datetb_col  ║  4 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  2952991 ║
║ datetb ║ idx_datetb_col  ║  5 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  3974886 ║
║ datetb ║ idx_datetb_col  ║  6 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  2931450 ║
║ datetb ║ idx_datetb_col  ║  7 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  3316960 ║
║ datetb ║ idx_datetb_col  ║  8 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  3393439 ║
║ datetb ║ idx_datetb_col  ║  9 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  3735495 ║
║ datetb ║ idx_datetb_col  ║ 10 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  4803804 ║
║ datetb ║ idx_datetb_col  ║ 11 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  7655091 ║
║ datetb ║ idx_datetb_col  ║ 12 ║ 1 ║ 0 ║ 0 ║ 0 ║ 174326 ║ 47377226 ║
╚════════╩═════════════════╩════╩═══╩═══╩═══╩═══╩════════╩══════════╝

আমি কয়েকটি ভিন্ন সম্ভাবনা দেখতে পাচ্ছি তবে এ সম্পর্কে কীভাবে চিন্তা করা যায় সে সম্পর্কে আমার কিছু দিকনির্দেশ দরকার (অবশ্যই আমি এটি " মে " তে পোড়াচ্ছি কারণ আমি জানি যে এটি "নির্ভর করে" তবে আমি ধারণাগত বোঝারও সন্ধান করছি):

  1. সমস্ত পার্টিশনের জন্য একই মানগুলি ইঙ্গিত range_scan_count দিতে পারে যে আমরা ভাল পার্টিশন নির্মূলকরণ পাচ্ছি না কারণ আমরা সমস্ত পার্টিশন প্রায় একই সংখ্যক বার স্ক্যান করছি।
  2. সব পার্টিশন মান তারতম্য singleton_lookup_countজন্য উল্লেখযোগ্যভাবে কম মান অনুষঙ্গী range_scan_count পারে ভাল ঘন পার্টিশন বর্জন কারণ আমরা করছি স্ক্যানিং কম আমরা চেয়ে করছি চাইছেন নির্দেশ করে।
  3. ?

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

সম্পাদনা

এখানে একটি ক্লিপড ডিডিএল রয়েছে:

CREATE TABLE [dbo].[date_table](
    [date_id] [int] NOT NULL,
    [calendar_date] [datetime] NULL,
    [valdate] [datetime] NULL,
        CONSTRAINT [PK_datedb] PRIMARY KEY CLUSTERED 
        (
            [date_id] ASC
        ) ON [partschm]([date_id]);

CREATE UNIQUE NONCLUSTERED INDEX [idx_datetb_col] ON [dbo].[date_table]
(
    [calendar_date] DESC,
    [date_id] ASC
) ON [partschm]([date_id])
GO

আপনি টেবিল স্কিমা অন্তর্ভুক্ত করতে প্রশ্নটি সম্পাদনা করতে পারেন? যে কোনও ব্যাখ্যা বিভাজনের ব্যবসায়ের অর্থের উপর নির্ভর করে।
— জন সেগেল

@ জোনসিগেল আমি এটি করতে পেরে খুশি হব, তবে এটি কোডের প্রাচীরের ফলস্বরূপ তাই আমি একটি ক্লিপড সমতুল্য সাথে আপডেট করছি
— স্বশেক

উত্তর:


4

সূচকের ব্যবহারের দিকে নজর না দিয়ে, আমি আপনার ক্যোয়ারী সর্বাধিক পরিমাণে লজিক্যাল রিডের সাথে সন্ধান করার জন্য পরিকল্পনার ক্যাশেটি দেখতে চাই। সাধারণত যখন আমি বিভাজন নিয়ে কাজ করছি, আমি কেবলমাত্র মুষ্টিমেয় কিছু কোয়েরি পেয়েছি যা পঠনগুলিকে প্রাধান্য দিচ্ছে - যেমন সার্ভারের 50-80% সামগ্রিকভাবে পড়ে। তারা সফলভাবে পার্টিশন নির্মূলকরণ করছে কিনা তা দেখার জন্য এই প্রশ্নগুলি দেখুন।

যদি তারা পার্টিশন নির্মূল না করে তবে আপনারা মনে করেন তাদের উচিত (আপনার পার্টিশন স্কিমের উপর ভিত্তি করে), তবে বিভাগীয় নির্মূলকরণ পেতে ক্যোয়ার লেখকদের সাথে কাজ করুন।

যদি তারা পার্টিশনগুলি মুছে ফেলছে না, এবং তারা (ক্যোরিটি লেখার পদ্ধতি বা পার্টিশনটি তৈরি করার পদ্ধতিটির কারণেই) করতে না পারে, তবে কঠোর প্রশ্ন জিজ্ঞাসা করার সময় এসেছে।

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


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