ভিজুয়ালাইজিং এসকিউএল সার্ভার বর্ধিত ইভেন্টগুলির ডেটা


16

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

আমার যে সমস্যাটি হচ্ছে তা হ'ল এটি প্রদর্শিত হয় যে লাইভ ইভেন্টস বৈশিষ্ট্যটি একটি অভ্যন্তরীণ বাফার ব্যবহার করে, যার অর্থ কখনও কখনও উইন্ডোতে প্রদর্শিত হওয়ার জন্য এটির তথ্যের জন্য আমাকে বেশ কয়েকবার একটি ক্যোয়ারী চালানো উচিত। আমার তাই জিজ্ঞাসা করার জন্য একটি দ্বি-অংশ প্রশ্ন আছে:

  1. লাইভ ফিডে ইভেন্টগুলি প্রদর্শিত হতে এই বিলম্বকে ঘিরে কী উপায় আছে? (আমি এটি একটি স্থানীয় ডাটাবেসে করছি তাই পারফরম্যান্স কোনও সমস্যা নয়)
  2. লাইভ ফিডটি কি বর্ধিত ইভেন্টগুলির ডেটা ভিজ্যুয়ালাইজ করার সর্বোত্তম উপায়? এসএসএমএসে অন্য কোনও সরঞ্জাম আছে কি না এটি আমার ব্যবহারের ক্ষেত্রে আরও ভাল মানিয়ে যায়?

হালনাগাদ

অনুরোধ হিসাবে, এখানে অধিবেশন:

CREATE EVENT SESSION [Simple Query Benchmarking] ON SERVER 
ADD EVENT sqlserver.sql_batch_completed(SET collect_batch_text=(1)
    ACTION(sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.sql_text)
    WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[greater_than_uint64]([duration],(1000)))) 
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=1 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF)
GO

উত্তর:


15

ক্যাভ্যাট : নীচে প্রদত্ত বেশিরভাগ তথ্য আমি জোনাথন কিহায়িয়াসের দুটি বহুবচনে পাঠ্যক্রম থেকে কঠোরভাবে শিখেছি । প্লাস সাবস্ক্রিপশনটির জন্য তার দুটি কোর্সটি যেতে এক মাস ব্যয়যোগ্য।

প্রথমে আগ্রহের কয়েকটি পয়েন্ট যা আমি মনে করি সহায়তা করবে (বা সর্বাধিক আগ্রহী):

  • যখন একটি বর্ধিত ইভেন্ট সেশন শুরু হবে তখন সেশনের ইভেন্টগুলির দ্বারা উত্পন্ন ডেটা সংরক্ষণের জন্য এটি মেমরির একটি অংশ বাফার স্পেসে বরাদ্দ করবে। আপনার সেশনে এটি 4MB এর ডিফল্ট মানতে সেট করা আছে
  • ব্যবহারের জন্য একাধিক লক্ষ্য উপলব্ধ। এই লক্ষ্যগুলি হয় হয় synchronousবা asynchronousকীভাবে তারা ডেটা গ্রহণ করে। টার্গেট ফাইল এবং রিং বাফার হ'ল দুটি সর্বাধিক ব্যবহৃত টার্গেট হ'ল অ্যাসিনক্রোনাস। বিওএল নিবন্ধ এখানে প্রতিটি লক্ষ্য কি টাইপ তা নির্দেশ করে
  • এটি MAX_DISPATCH_LATENCYহ'ল একটি কনফিগারেশন বিকল্প যা ইভেন্টের ডেটা লক্ষ্যগুলিতে প্রেরণ করার সময় নিয়ন্ত্রণ করে। প্রেরণযোগ্যতা কেবলমাত্র অ্যাসিনক্রোনাস লক্ষ্যমাত্রার জন্য ঘটে। দুটি শর্ত রয়েছে যা ইভেন্টের ডেটা প্রেরণের কারণ ঘটায়: (1) অধিবেশনটির জন্য মেমরি বাফার পূর্ণ বা (2) বাফারে ইভেন্টের ডেটা সেশনের ছাড়িয়ে গেছেMAX_DISPATCH_LATENCY কনফিগার বিকল্পটি ।
  • আপনি যখন লাইভ ডেটা ভিউয়ার খুলবেন এটি ইভেন্ট সেশনে একটি অতিরিক্ত লক্ষ্য সংযুক্ত করবে "স্ট্রিমিং টার্গেট"। মেমরি বাফারগুলি প্রেরণ করা হওয়ায় এটি সরাসরি ইভেন্ট স্ট্রিমটি গ্রহণ করবে। এটি সেশনের আসল সময় দেখার জন্য সেশনটির সাথে সম্পর্কিত প্রেরণের বিলম্বকে 3 সেকেন্ডে পরিবর্তিত করবে।

এখন আপনার প্রশ্নের নির্দিষ্ট পয়েন্ট:

আমার যে সমস্যাটি হচ্ছে তা হ'ল এটি প্রদর্শিত হয় যে লাইভ ইভেন্টস বৈশিষ্ট্যটি একটি অভ্যন্তরীণ বাফার ব্যবহার করে, যার অর্থ কখনও কখনও উইন্ডোতে প্রদর্শিত হওয়ার জন্য এটির তথ্যের জন্য আমাকে বেশ কয়েকবার একটি ক্যোয়ারী চালানো উচিত। আমার তাই জিজ্ঞাসা করার জন্য একটি দ্বি-অংশ প্রশ্ন আছে

আমি অবগত নই যে আমি এটি উপরে বর্ণিত বিষয়গুলি বাদ দিয়ে এটি কাজ করে। আমি আশা করব যে ইভেন্টটি এটি ধরা পড়েছে কেবল এটি আপনার লাইভ ডেটা দর্শকের কাছে প্রেরণের জন্য প্রয়োজনীয় চৌকাঠটি পূরণ করেনি। আমি নিম্নলিখিত কোয়েরি দিয়ে এটি পরীক্ষা করেছি AdventureWorks2012:

SELECT * FROM dbo.ErrorLog
WAITFOR DELAY '00:00:01' ;
GO

আপনার ইভেন্টের সেশন কনফিগারেশনটি ব্যবহার করে, আমি কেবলমাত্র AdventureWorks2012স্থানীয় উদাহরণে ডাটাবেসের ডেটা ক্যাপচারের জন্য ফিল্টার করছি তার ব্যতীত, আমি এই সেশনের লক্ষ্যবস্তু ডেটা দেখতে এবং ক্যোয়ারীটি ধরা পড়েছে তা খুঁজে পেতে পারি:

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

এই ক্যোয়ারীটিকে আরও একবার কার্যকর করার ফলে অবশেষে এটি প্রেরণ হবে এবং ডেটা ভিউয়ার একটি ইভেন্ট প্রদর্শন করবে। এখন আপনি যদি সত্যই STOPসেশন এবং বাফার প্রদর্শিত সমস্ত ইভেন্ট দেখতে চান তবে পুরোপুরি প্রেরণ করা হবে। আমি আমার অধিবেশন বন্ধ করার পরে এটি দেখতে পাচ্ছি:

এখানে চিত্র বর্ণনা লিখুন

1. লাইভ ফিডে ইভেন্টগুলি প্রদর্শনের জন্য এই বিলম্বটি ঘটার কোন উপায় আছে? (আমি এটি একটি স্থানীয় ডাটাবেসে করছি তাই পারফরম্যান্স কোনও সমস্যা নয়)

আমি ভেবেছিলাম আপনি MAX_MEMORYইভেন্টটিকে ক্যাপচারের জন্য একটি ছোট বাফরের আকার নির্দেশ করবে এমন একটি কম মানতে পরিবর্তন করতে পারেন। তবে আপনি এসকিউএল সার্ভার ২০১২-এ এটি নির্ধারণ করতে পারেন এমন সর্বনিম্ন মান হ'ল 200KB, যা আমি ব্যবহৃত ক্যোয়ারী তা অবিলম্বে প্রেরণের জন্য এই সীমাটি পূরণ করে না। কেবলমাত্র আমি যা করতে পেরেছি তা হল একটি ক্যোয়ারী কার্যকর করা যা বাফারকে পৌঁছে দেবে এবং পূর্ববর্তী ইভেন্টগুলি প্রেরণ করা হবে:

SELECT *
FROM Person.Person
ORDER BY EmailPromotion DESC;

2. বর্ধিত ইভেন্টগুলির ডেটা ভিজ্যুয়ালাইজ করার সর্বোত্তম উপায় কি লাইভ ফিড? এসএসএমএসে অন্য কোনও সরঞ্জাম আছে কি না এটি আমার ব্যবহারের ক্ষেত্রে আরও ভাল মানিয়ে যায়?

আমি বর্তমানে সচেতন তা নয়। আমি ring_bufferলক্ষ্য হ'ল এক্সএমএলকে জিজ্ঞাসা করা এবং এটি কেবল ছিঁড়ে গেলাম ডেটা বের করার সর্বোত্তম পদ্ধতির পরামর্শ দেব । আমি উপরের উদাহরণটির পুনরাবৃত্তি করতে পারি এবং নীচের কোয়েরিটি সম্পাদন করার সাথে সাথে আমি ইভেন্টটি দেখতে পাচ্ছি।

-- Create XML variable to hold Target Data
DECLARE @target_data XML
SELECT  @target_data = CAST([t].[target_data] AS XML)
FROM    [sys].[dm_xe_sessions] AS s
JOIN    [sys].[dm_xe_session_targets] AS t
        ON [t].[event_session_address] = [s].[address]
WHERE   [s].[name] = N'Simple Query Benchmarking' AND
        [t].[target_name] = N'ring_buffer' ;

-- Return the full XML document
--SELECT @target_data;

--Shred XMl to get needed data
SELECT  DATEADD(hh, DATEDIFF(hh, GETUTCDATE(), CURRENT_TIMESTAMP), n.value('(@timestamp)[1]', 'datetime2')) AS [timestamp],
    n.value('(data[@name="duration"]/value)[1]', 'bigint') as duration,
    n.value('(action[@name="sql_text"]/value)[1]', 'varchar(max)') as sql_text
FROM @target_data.nodes('RingBufferTarget/event[@name=''sql_batch_completed'']') AS q(n)

এখানে চিত্র বর্ণনা লিখুন


3
দুর্দান্ত উত্তর, খুব বিস্তারিত। কেবলমাত্র উল্লেখ করুন এবং এটি যে কোনও বাস্তব আলোচনার চেয়ে আগ্রহের বিষয়; আপনি জোনাথন কেহায়িয়াস উল্লেখ করেছেন এবং আমি সম্মত হই যে, তাঁর বহুবর্ষের কোর্সগুলি 1 মাসের ফি হিসাবে 100%। যাইহোক, তার একটি ব্লগ রয়েছে যেখানে তিনি রিং বাফার টার্গেটটি কীভাবে ঘৃণা করেন সে সম্পর্কে কথা বলেছেন । এটি ২০১৪ সালের ছিল, সুতরাং এখন এটি পরিবর্তন হয়েছে তবে এটি একটি আকর্ষণীয় পঠন ছিল: sqlskills.com/blogs/jonathan/…
কলমিনো

1

নেট 4.7.2 লাইভ টার্গেট ব্যবহার করার সময় ইভেন্ট প্রদর্শনের জন্য প্রাথমিক বিলম্ব হ্রাস করার একটি ঠিক আছে।


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