একই LOB ডেটা অ্যাক্সেস করার সময় যৌক্তিক বিভিন্ন পাঠ করে


26

এখানে তিনটি সাধারণ পরীক্ষা রয়েছে যা একই ডেটা পড়ে, তবুও খুব আলাদা যৌক্তিক পঠনগুলির প্রতিবেদন করে:

সেটআপ

নিম্নলিখিত স্ক্রিপ্টটি 100 টি অভিন্ন সারি সহ একটি পরীক্ষার সারণী তৈরি করে, প্রতিটি সারণীতে সঞ্চিত তা নিশ্চিত করার জন্য পর্যাপ্ত ডেটা সহ একটি এক্সএমএল কলাম ধারণ করে । আমার পরীক্ষার ডাটাবেসে, উত্পাদিত এক্সএমএলটির দৈর্ঘ্য প্রতিটি সারির 20,204 বাইট।

-- Conditional drop
IF OBJECT_ID(N'dbo.XMLTest', N'U') IS NOT NULL
    DROP TABLE dbo.XMLTest;
GO
-- Create test table
CREATE TABLE dbo.XMLTest
(
    ID integer IDENTITY PRIMARY KEY,
    X xml NULL
);
GO
-- Add 100 wide xml rows
DECLARE @X xml;

SET @X =
(
    SELECT TOP (100) *
    FROM  sys.columns AS C
    FOR XML 
        PATH ('row'),
        ROOT ('root'),
        TYPE
);

INSERT dbo.XMLTest
    (X)
SELECT TOP (100)
    @X
FROM  sys.columns AS C;

-- Flush dirty buffers
CHECKPOINT;

টেস্ট

নিম্নলিখিত তিনটি পরীক্ষার সাথে এক্সএমএল কলামটি পড়ে:

  1. একটি সরল SELECTবিবৃতি
  2. একটি ভেরিয়েবলের জন্য এক্সএমএল নির্ধারণ করা
  3. SELECT INTOএকটি অস্থায়ী সারণী তৈরি করতে ব্যবহার করা
-- No row count messages or graphical plan
-- Show I/O statistics
SET NOCOUNT ON;
SET STATISTICS XML OFF;
SET STATISTICS IO ON;
GO
PRINT CHAR(10) + '=== Plain SELECT ===='

DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS;

SELECT XT.X 
FROM dbo.XMLTest AS XT;
GO
PRINT CHAR(10) + '=== Assign to a variable ===='

DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS;

DECLARE @X xml;

SELECT
    @X = XT.X
FROM dbo.XMLTest AS XT;
GO
PRINT CHAR(10) + '=== SELECT INTO ===='

IF OBJECT_ID(N'tempdb..#T', N'U') IS NOT NULL
    DROP TABLE #T;

DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS;

SELECT 
    XT.X
INTO #T
FROM dbo.XMLTest AS XT
GO
SET STATISTICS IO OFF;

ফলাফল

আউটপুটটি হ'ল:

=== সরল নির্বাচন ====
সারণি 'এক্সএমএল টেস্ট'। স্ক্যান কাউন্ট 1, লজিকাল রিড 3, ফিজিকাল রিডস 1, রিড-ফরোয়ার্ড 0,
    লব লজিকাল 79৯৫, লব ফিজিকাল ৩ 37, লব রিড-ফরোয়ার্ড 6৯6 পড়ে।

=== একটি ভেরিয়েবলকে বরাদ্দ করুন ====
সারণি 'এক্সএমএল টেস্ট'। স্ক্যান কাউন্ট 1, লজিকাল রিড 3, ফিজিকাল রিডস 1, রিড-ফরোয়ার্ড 0,
    লব লজিকাল 0, পঠিত শারীরিক 0, পঠন 0-পঠন 0

=== নির্বাচন করুন ====
সারণি 'এক্সএমএল টেস্ট'। স্ক্যান কাউন্ট 1, লজিকাল রিড 3, ফিজিকাল রিডস 1, রিড-ফরোয়ার্ড 0,
    লব লজিকাল 300, পঠিত শারীরিক পড়া 37, লব রিড-ফরোয়ার্ড 400 পড়ছে।

প্রশ্নাবলি

  • এলওবি এত আলাদা কেন পড়ে?
  • প্রতিটি পরীক্ষায় নিশ্চয়ই একই তথ্য পড়েছিল?

উত্তর:


27

সমস্ত পাঠ সমান হয় না। এসকিউএল সার্ভার জানে যে এলওবি ডেটা অ্যাক্সেস করা ব্যয়বহুল, এবং এটি সম্ভব হলে এড়াতে চেষ্টা করে। এলওবি ডেটা প্রতিটি ক্ষেত্রে যেভাবে পড়া হয় সে সম্পর্কেও বিশদগুলি রয়েছে:

সারাংশ

সংখ্যাগুলি পৃথক কারণ:

  • নির্বাচন প্যাকেট আকারের মধ্যে lob সার্চ খন্ডে
  • ভেরিয়েবল অ্যাসাইনমেন্ট টেস্টে LOB মোটেই পড়ে না
  • "সিলেক্ট ইন" পরীক্ষাটি পুরো পৃষ্ঠায় এলওবি পড়ে reads

বিস্তারিত

  1. সমভূমি SELECT

    পরিকল্পনা নির্বাচন করুন

    ক্লাস্টারড ইনডেক্স স্ক্যান কোনও এলওবি ডেটা পড়ে না। এটি কেবলমাত্র একটি স্টোরেজ ইঞ্জিন এলওবি হ্যান্ডেল বরাদ্দ করে । নিয়ন্ত্রণ পরিকল্পনার মূলটিতে না আসা পর্যন্ত হ্যান্ডেলটি ব্যবহৃত হয় না।

    বর্তমান সারির LOB সামগ্রী টিডিএস প্যাকেট আকারের অংশগুলিতে পড়ে এবং ক্লায়েন্টের কাছে প্রবাহিত হয়। যৌক্তিক পঠন পৃষ্ঠাগুলির স্পর্শের সংখ্যা গণনা করে, তাই:

    রিপোর্ট করা পাঠের সংখ্যা সমীক্ষিত পাঠের সংখ্যার সমতুল্য, এবং প্রতিবারের জন্য একটি এলওবি পৃষ্ঠা রূপান্তর ঘটে।

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

  2. পরিবর্তনশীল অ্যাসাইনমেন্ট

    পরিবর্তনশীল পরিকল্পনা

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

    কোনও এলওবি পঠিত নেই কারণ LOB ডেটা কখনও অ্যাক্সেস হয় না।

  3. SELECT INTO

    পরিকল্পনার মধ্যে নির্বাচন করুন

    উত্স টেবিল থেকে নতুন টেবিলে এলওবি ডেটা অনুলিপি করতে এই পরিকল্পনাটি বাল্ক রোউসেট সরবরাহকারী ব্যবহার করে। এটি প্রতিটি পঠন (কোনও স্ট্রিমিং বা চঞ্চক নয়) একটি সম্পূর্ণ LOB পৃষ্ঠা প্রক্রিয়া করে।

    যৌক্তিক পাঠের সংখ্যা পরীক্ষার টেবিলে এলওবি পৃষ্ঠাগুলির সংখ্যার সাথে মিলে যায়।

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