ক্যাভ্যাট : নীচে প্রদত্ত বেশিরভাগ তথ্য আমি জোনাথন কিহায়িয়াসের দুটি বহুবচনে পাঠ্যক্রম থেকে কঠোরভাবে শিখেছি । প্লাস সাবস্ক্রিপশনটির জন্য তার দুটি কোর্সটি যেতে এক মাস ব্যয়যোগ্য।
প্রথমে আগ্রহের কয়েকটি পয়েন্ট যা আমি মনে করি সহায়তা করবে (বা সর্বাধিক আগ্রহী):
- যখন একটি বর্ধিত ইভেন্ট সেশন শুরু হবে তখন সেশনের ইভেন্টগুলির দ্বারা উত্পন্ন ডেটা সংরক্ষণের জন্য এটি মেমরির একটি অংশ বাফার স্পেসে বরাদ্দ করবে। আপনার সেশনে এটি 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)