টেম্পডিবি লেনদেনের লগটি কোন কোয়েরি পূরণ করছে তা কীভাবে সনাক্ত করবেন?


65

আমি জানতে চাই কিভাবে সঠিক জিজ্ঞাসা বা সঞ্চিত প্রোকটি সনাক্ত করতে পারি যা আসলে টিএমপিডিবি ডাটাবেসের লেনদেনের লগ পূরণ করে।



আমি এই সাইটে নতুন এবং পোস্টটি কীভাবে সম্পাদনা করবেন তা নিশ্চিত নই। আমার কাছে আরও তথ্য দেওয়ার জন্য পিআরডি অ্যাক্সেস নেই। প্রোড ডিবিএর কাছ থেকে আমি যা শুনছি তা হ'ল আপনার কোডটি টেম্পডিবি পূরণ করছে! আমাদের কোডটি টেম্পডিবির লগ পূরণ না করে তা নিশ্চিত করার জন্য কি কোনও কোডিং সেরা অনুশীলন অনুসরণ করা হয়?

@ প্রসানথ আপনাকে এখানে আপনার প্রশ্নের পরিবর্তন করতে আপনার একই ওপেনিডের সাথে এই সাইটের জন্য সাইন আপ করতে হবে। এটি আপনার কোড কেন টেম্পডিবি ব্যবহার করছে তা নির্ভর করে। কার্যকর করার পরিকল্পনায় এটি কী করছে তা দেখানো উচিত এবং আপনি যদি আসল কোড পোস্ট করেন তবে আমরা এটি উন্নত করতে সহায়তা করতে পারি।
ক্যাড রক্স

@ কেডরক্স আমি মনে করি তিনি কোয়েরিটি (বা কোয়েরি) সনাক্ত করার চেষ্টা করছেন, কোনও নির্দিষ্ট, জ্ঞাত জিজ্ঞাসা সমস্যা কেন সৃষ্টি করছে তা নির্ধারণের চেষ্টা করছেন না।
অ্যারন বারট্র্যান্ড

@ অ্যারনবার্ট্র্যান্ড হ্যাঁ, তবে মন্তব্যটি ইঙ্গিত দেয় যে কোডিংয়ের জন্য তিনি সেরা অভ্যাস চান।
ক্যাড রক্স

উত্তর:


73

Http://www.sqlservercentral.com/scriptts/tempdb/72007/ থেকে

;WITH task_space_usage AS (
    -- SUM alloc/delloc pages
    SELECT session_id,
           request_id,
           SUM(internal_objects_alloc_page_count) AS alloc_pages,
           SUM(internal_objects_dealloc_page_count) AS dealloc_pages
    FROM sys.dm_db_task_space_usage WITH (NOLOCK)
    WHERE session_id <> @@SPID
    GROUP BY session_id, request_id
)
SELECT TSU.session_id,
       TSU.alloc_pages * 1.0 / 128 AS [internal object MB space],
       TSU.dealloc_pages * 1.0 / 128 AS [internal object dealloc MB space],
       EST.text,
       -- Extract statement from sql text
       ISNULL(
           NULLIF(
               SUBSTRING(
                 EST.text, 
                 ERQ.statement_start_offset / 2, 
                 CASE WHEN ERQ.statement_end_offset < ERQ.statement_start_offset 
                  THEN 0 
                 ELSE( ERQ.statement_end_offset - ERQ.statement_start_offset ) / 2 END
               ), ''
           ), EST.text
       ) AS [statement text],
       EQP.query_plan
FROM task_space_usage AS TSU
INNER JOIN sys.dm_exec_requests ERQ WITH (NOLOCK)
    ON  TSU.session_id = ERQ.session_id
    AND TSU.request_id = ERQ.request_id
OUTER APPLY sys.dm_exec_sql_text(ERQ.sql_handle) AS EST
OUTER APPLY sys.dm_exec_query_plan(ERQ.plan_handle) AS EQP
WHERE EST.text IS NOT NULL OR EQP.query_plan IS NOT NULL
ORDER BY 3 DESC;

সম্পাদনা

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

আপনি পরিবর্তন হতে পারে inner joinউপর sys.dm_exec_requestsএকটি থেকে left outer join, তারপর আপনি যে বর্তমানে সক্রিয়ভাবে প্রশ্নের দৌড়াচ্ছে সেশনগুলির জন্য সারি ফিরে আসবে।

মার্টিন পোস্ট করা ক্যোয়ারী ...

SELECT database_transaction_log_bytes_reserved,session_id 
  FROM sys.dm_tran_database_transactions AS tdt 
  INNER JOIN sys.dm_tran_session_transactions AS tst 
  ON tdt.transaction_id = tst.transaction_id 
  WHERE database_id = 2;

... session_idলগ স্পেস দখল করে নিচ্ছে এমন সক্রিয় লেনদেনগুলির সাথে এটি সনাক্ত করতে পারে, তবে সমস্যাটির কারণ হিসাবে আপনি প্রকৃত ক্যোয়ারীটি নির্ধারণ করতে পারবেন না, কারণ এখন যদি এটি চলমান না হয় তবে এটি উপরের ক্যোয়ারিতে ধরা পড়বে না সক্রিয় অনুরোধ আপনি সক্রিয়ভাবে সাম্প্রতিকতম ক্যোয়ারীটি ব্যবহার করে প্রতিক্রিয়াশীলভাবে যাচাই করতে সক্ষম হতে পারেন DBCC INPUTBUFFERতবে এটি আপনি কী শুনতে চান তা আপনাকে বলতে পারে না। সক্রিয়ভাবে চালিতদের ক্যাপচারের জন্য আপনি একইভাবে বাইরের সাথে যোগ দিতে পারেন, যেমন:

SELECT tdt.database_transaction_log_bytes_reserved,tst.session_id,
       t.[text], [statement] = COALESCE(NULLIF(
         SUBSTRING(
           t.[text],
           r.statement_start_offset / 2,
           CASE WHEN r.statement_end_offset < r.statement_start_offset
             THEN 0
             ELSE( r.statement_end_offset - r.statement_start_offset ) / 2 END
         ), ''
       ), t.[text])
     FROM sys.dm_tran_database_transactions AS tdt
     INNER JOIN sys.dm_tran_session_transactions AS tst
     ON tdt.transaction_id = tst.transaction_id
         LEFT OUTER JOIN sys.dm_exec_requests AS r
         ON tst.session_id = r.session_id
         OUTER APPLY sys.dm_exec_sql_text(r.plan_handle) AS t
     WHERE tdt.database_id = 2;

আপনি sys.dm_db_session_space_usageসেশন দ্বারা সামগ্রিক স্থান ব্যবহার দেখতে ডিএমভি ব্যবহার করতে পারেন (তবে আবার আপনি ক্যোয়ারির জন্য বৈধ ফলাফলগুলি ফিরে পেতে পারেন না; যদি ক্যোরিটি সক্রিয় না থাকে তবে আপনি যা ফিরে পাবেন তা প্রকৃত অপরাধী নাও হতে পারে)।

;WITH s AS
(
    SELECT 
        s.session_id,
        [pages] = SUM(s.user_objects_alloc_page_count 
          + s.internal_objects_alloc_page_count) 
    FROM sys.dm_db_session_space_usage AS s
    GROUP BY s.session_id
    HAVING SUM(s.user_objects_alloc_page_count 
      + s.internal_objects_alloc_page_count) > 0
)
SELECT s.session_id, s.[pages], t.[text], 
  [statement] = COALESCE(NULLIF(
    SUBSTRING(
        t.[text], 
        r.statement_start_offset / 2, 
        CASE WHEN r.statement_end_offset < r.statement_start_offset 
        THEN 0 
        ELSE( r.statement_end_offset - r.statement_start_offset ) / 2 END
      ), ''
    ), t.[text])
FROM s
LEFT OUTER JOIN 
sys.dm_exec_requests AS r
ON s.session_id = r.session_id
OUTER APPLY sys.dm_exec_sql_text(r.plan_handle) AS t
ORDER BY s.[pages] DESC;

আপনার নিষ্পত্তি সম্পর্কিত এই প্রশ্নের সমস্তগুলির সাথে, আপনি কে টেম্পডিবি ব্যবহার করছেন এবং কীভাবে বিশেষতঃ আপনি যদি এটিকে এটিকে ধরেন তবে সংকীর্ণ করতে সক্ষম হওয়া উচিত।

টেম্পডিবির ব্যবহার হ্রাস করার জন্য কিছু টিপস

  1. কম # টেম্প টেবিল এবং @ টেবিল ভেরিয়েবল ব্যবহার করুন
  2. একযোগে সূচক রক্ষণাবেক্ষণকে হ্রাস করুন, এবং SORT_IN_TEMPDBবিকল্পটি প্রয়োজন না হলে এড়িয়ে চলুন
  3. অপ্রয়োজনীয় কার্সার এড়ানো; স্ট্যাটিক কার্সারগুলি এড়ান যদি আপনি ভাবেন যে এটি কোনও বাধা হতে পারে, যেহেতু স্ট্যাটিক কার্সারগুলি টেম্পডিবায় কাজের টেবিল ব্যবহার করে - যদিও এটি কার্সারের ধরণ যা আমি সর্বদা সুপারিশ করি যদি টেম্পডিবি কোনও বাধা নয় if
  4. স্পুলগুলি এড়াতে চেষ্টা করুন (উদাঃ বড় সিটিই যা কোয়েরিতে একাধিকবার উল্লেখ করা হয়েছে)
  5. মার ব্যবহার করবেন না
  6. স্ন্যাপশট / আরসিএসআই বিচ্ছিন্নতা স্তরের ব্যবহারের পুরোপুরি পরীক্ষা করুন - সমস্ত ডাটাবেসের জন্য কেবল এটি চালু করবেন না যেহেতু আপনাকে বলা হয়েছে যে এটি নলকের চেয়ে ভাল (এটি তবে এটি নিখরচায় নয়)
  7. কিছু ক্ষেত্রে এটি অযৌক্তিক মনে হতে পারে তবে আরও টেম্প টেবিল ব্যবহার করুন। উদাহরণস্বরূপ, অংশগুলিতে একটি হ্রাসযুক্ত ক্যোয়ারী ভাঙ্গা সামান্য কম দক্ষ হতে পারে, তবে এটি যদি টেম্পডবিতে একটি বিশাল মেমরি স্পিল এড়াতে পারে কারণ একক, বৃহত্তর ক্যোয়ারির জন্য মেমরি অনুদানের প্রয়োজন খুব বেশি ...
  8. বাল্ক অপারেশনের জন্য ট্রিগার সক্রিয় করা এড়ান
  9. স্থানীয় ভেরিয়েবল হিসাবে এলওবি প্রকারের (সর্বাধিক প্রকারের, এক্সএমএল, ইত্যাদি) অতিরিক্ত ব্যবহার এড়ানো উচিত
  10. সংক্ষিপ্ত এবং মিষ্টি লেনদেন রাখুন
  11. প্রত্যেকের ডিফল্ট ডাটাবেস হিসাবে tempdb সেট করবেন না -

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


লিঙ্কটি হারুনের জন্য ধন্যবাদ TEMPDB ট্রানজেকশনাল লগগুলি পূরণ করা এড়াতে সাধারণভাবে কোনও কোডিং সেরা অনুশীলনগুলি অনুসরণ করা দরকার?

2
হুঁ, সবেমাত্র এটি পরীক্ষা করা হয়েছে এবং এটি আমার আপত্তিকর সেশনটি খুঁজে পায়নি যদিও session_idনীচের প্রশ্নের সাথে দেখানো হয়েছে SELECT database_transaction_log_bytes_reserved,session_id FROM sys.dm_tran_database_transactions tdt JOIN sys.dm_tran_session_transactions tst ON tdt.transaction_id = tst.transaction_id WHERE database_id = 2। আমি যে প্রশ্নের সন্ধানের প্রত্যাশা করছিলাম তা নিম্নলিখিত চালনার পরে হয়েছিলBEGIN TRAN CREATE TABLE #T(X CHAR(8000)) INSERT INTO #T SELECT name FROM sys.objects
মার্টিন স্মিথ

@ মার্টিন: লক্ষ্য করা গেছে যে সিটিটিতে একটি এসপিআইডি রয়েছে, যা ফলাফলগুলি বর্তমান সেশনে সীমাবদ্ধ রাখবে। আপনি যদি সমস্ত সেশন জুড়ে এটি ছড়িয়ে দিতে চান তবে তা সরিয়ে দিন।
বেন থুল

@ বেনথুল - আমি অন্য সংযোগে ক্যোয়ারী চালিয়েছি। @@SPIDহয় <>না =। আমার জন্য সমস্ত কলামের জন্য উন্মুক্ত লেনদেন সহ স্পিডের জন্য dm_db_task_space_usageপ্রতিবেদনগুলি 0। আপনি যদি এটির জিজ্ঞাসা করার দরকার পড়ে তখন অবাক হন যে অনুরোধটি আসলে কোনও প্রকাশ্য লেনদেনের সাথে নিষ্ক্রিয় হওয়ার পরিবর্তে কার্যকর করা হয়।
মার্টিন স্মিথ

@ মার্টিনস্মিত ক্যোয়ারীটি সক্রিয় অনুরোধগুলি সন্ধান করে, সক্রিয় লেনদেনগুলি নয়। সুতরাং যদি ক্যোয়ারীটি আর চলমান না থাকে তবে আপনি ঠিক বলেছেন, আপনি লেনদেন ডিএমভি ব্যবহার করে পিছনে ট্র্যাক করতে পারেন। তবে অগত্যা আপনি যদি সেই ক্যোয়ারীটি তৈরি না করে এটির কারণ নির্ধারণ করতে সক্ষম হবেন না - একই স্পাইডটি বর্তমান লেনদেনে আরও কয়েকটি বিবৃতি জারি করতে পারে।
অ্যারন বারট্র্যান্ড

5

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/17d9f862-b9ae-42de-ada0-4229f56712dc/tempdb-log-filling-cannot-find-how-or-what?forum=sqldatabaseengine

 SELECT tst.[session_id],
            s.[login_name] AS [Login Name],
            DB_NAME (tdt.database_id) AS [Database],
            tdt.[database_transaction_begin_time] AS [Begin Time],
            tdt.[database_transaction_log_record_count] AS [Log Records],
            tdt.[database_transaction_log_bytes_used] AS [Log Bytes Used],
            tdt.[database_transaction_log_bytes_reserved] AS [Log Bytes Rsvd],
            SUBSTRING(st.text, (r.statement_start_offset/2)+1,
            ((CASE r.statement_end_offset
                    WHEN -1 THEN DATALENGTH(st.text)
                    ELSE r.statement_end_offset
            END - r.statement_start_offset)/2) + 1) AS statement_text,
            st.[text] AS [Last T-SQL Text],
            qp.[query_plan] AS [Last Plan]
    FROM    sys.dm_tran_database_transactions tdt
            JOIN sys.dm_tran_session_transactions tst
                ON tst.[transaction_id] = tdt.[transaction_id]
            JOIN sys.[dm_exec_sessions] s
                ON s.[session_id] = tst.[session_id]
            JOIN sys.dm_exec_connections c
                ON c.[session_id] = tst.[session_id]
            LEFT OUTER JOIN sys.dm_exec_requests r
                ON r.[session_id] = tst.[session_id]
            CROSS APPLY sys.dm_exec_sql_text (c.[most_recent_sql_handle]) AS st
            OUTER APPLY sys.dm_exec_query_plan (r.[plan_handle]) AS qp
    WHERE   DB_NAME (tdt.database_id) = 'tempdb'
    ORDER BY [Log Bytes Used] DESC
GO

4

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

এটি 40 মিনিটের জন্য প্রতি 3 মিনিটে চলেছে, তাই 2 ঘন্টা। আপনি যথাযথ দেখতে পরামিতিগুলি পরিবর্তন করুন।

নীচে একটি নিখরচায়> 50 পৃষ্ঠাগুলি ফিল্টার রয়েছে যে আপনার কাছে প্রচুর ছোট টেবিল রয়েছে এমন ক্ষেত্রে লোকেরা কেবল সাফ করতে চাইতে পারে। অন্যথায় আপনি নীচের সাথে সেই উপদ্রবটিকে ধরবেন না যেমনটি ...

উপভোগ করুন!

DECLARE @minutes_apart INT; SET @minutes_apart = 3
DECLARE @how_many_times INT; SET @how_many_times = 40
--DROP TABLE tempdb..TempDBUsage
--SELECT * FROM tempdb..TempDBUsage
--SELECT session_id, STDEV(pages) stdev_pages FROM tempdb..TempDBUsage GROUP BY session_id HAVING STDEV(pages) > 0 ORDER BY stdev_pages DESC

DECLARE @delay_string NVARCHAR(8); SET @delay_string = '00:' + RIGHT('0'+ISNULL(CAST(@minutes_apart AS NVARCHAR(2)), ''),2) + ':00'
DECLARE @counter INT; SET @counter = 1

SET NOCOUNT ON
if object_id('tempdb..TempDBUsage') is null
    begin
    CREATE TABLE tempdb..TempDBUsage (
        session_id INT, pages INT, num_reads INT, num_writes INT, login_time DATETIME, last_batch DATETIME,
        cpu INT, physical_io INT, hostname NVARCHAR(64), program_name NVARCHAR(128), text NVARCHAR (MAX)
    )
    end
else
    begin
        PRINT 'To view the results run this:'
        PRINT 'SELECT * FROM tempdb..TempDBUsage'
        PRINT 'OR'
        PRINT 'SELECT session_id, STDEV(pages) stdev_pages FROM tempdb..TempDBUsage GROUP BY session_id HAVING STDEV(pages) > 0 ORDER BY stdev_pages DESC'
        PRINT ''
        PRINT ''
        PRINT 'Otherwise manually drop the table by running the following, then re-run the script:'
        PRINT 'DROP TABLE tempdb..TempDBUsage'
        RETURN
    end
--GO
TRUNCATE TABLE tempdb..TempDBUsage
PRINT 'To view the results run this:'; PRINT 'SELECT * FROM tempdb..TempDBUsage'
PRINT 'OR'; PRINT 'SELECT session_id, STDEV(pages) stdev_pages FROM tempdb..TempDBUsage GROUP BY session_id HAVING STDEV(pages) > 0 ORDER BY stdev_pages DESC'
PRINT ''; PRINT ''

while @counter <= @how_many_times
begin
INSERT INTO tempdb..TempDBUsage (session_id,pages,num_reads,num_writes,login_time,last_batch,cpu,physical_io,hostname,program_name,text)
    SELECT PAGES.session_id, PAGES.pages, r.num_reads, r.num_writes, sp.login_time, sp.last_batch, sp.cpu, sp.physical_io, sp.hostname, sp.program_name, t.text
    FROM sys.dm_exec_connections AS r
    LEFT OUTER JOIN master.sys.sysprocesses AS sp on sp.spid=r.session_id
    OUTER APPLY sys.dm_exec_sql_text(r.most_recent_sql_handle) AS t
    LEFT OUTER JOIN (
        SELECT s.session_id, [pages] = SUM(s.user_objects_alloc_page_count + s.internal_objects_alloc_page_count) 
        FROM sys.dm_db_session_space_usage AS s
        GROUP BY s.session_id
        HAVING SUM(s.user_objects_alloc_page_count + s.internal_objects_alloc_page_count) > 0
    ) PAGES ON PAGES.session_id = r.session_id
    WHERE PAGES.session_id IS NOT NULL AND PAGES.pages > 50
    ORDER BY PAGES.pages DESC;
PRINT CONVERT(char(10), @counter) + ': Ran at: ' + CONVERT(char(30), GETDATE())
SET @counter = @counter + 1
waitfor delay @delay_string
end

স্বীকৃত উত্তরের সাথে এটি একত্রিত করা টেম্পডিবির ক্রিয়াকলাপ হ্রাস করার একটি সহজ উপায়। এসকিউএল এজেন্টের নির্ধারিত টাস্কের মাধ্যমে এটি চালানো এসএসএমএস বন্ধ থাকলেও এটি চলমান থাকবে। ভাগ করে নেওয়ার জন্য ধন্যবাদ!
লকস্মিথ

1

দুর্ভাগ্যক্রমে টেম্পডিবি লগ চলমান প্রক্রিয়াগুলি দেখে সরাসরি সেশনআইডিতে ফিরে পাওয়া যায় না।

টেম্পডিবি লগ ফাইলটিকে এমন একটি বিন্দুতে সঙ্কুচিত করুন যেখানে এটি আবার উল্লেখযোগ্যভাবে বৃদ্ধি পাবে। তারপরে লগের বৃদ্ধি ক্যাপচার করতে একটি বর্ধিত ইভেন্ট তৈরি করুন। এটি আবার বাড়লে আপনি বর্ধিত ইভেন্টটি প্রসারিত করতে পারেন এবং প্যাকেজ ইভেন্ট ফাইলটি দেখতে পারেন। ফাইলটি খুলুন, একটি টাইম ফিল্টার যুক্ত করুন, ফাইল টাইপ ফিল্টার (আপনি ডেটা ফাইলের ফলাফল অন্তর্ভুক্ত করতে চান না) এবং তারপরে এটি এসএসএমএসে সেশন আইডি দ্বারা গ্রুপ করুন। আপনি সেশন আইডির সর্বাধিক গোষ্ঠীর সাথে সন্ধান করার সময় এটি অপরাধী (গুলি) খুঁজতে আপনাকে সহায়তা করবে। অবশ্যই আপনাকে অন্য প্রক্রিয়া বা সরঞ্জামের মাধ্যমে সেশন আইডিতে যা চলছে তা সংগ্রহ করতে হবে। হয়ত কেউ কোয়েরি_হ্যাশ কলাম থেকে কীভাবে প্রশ্নটি পাবেন তা জানেন এবং সমাধান পোস্ট করার জন্য যথেষ্ট দয়াবান হবেন।

বর্ধিত ইভেন্টের ফলাফল:

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

বর্ধিত ইভেন্ট তৈরির স্ক্রিপ্ট:

CREATE EVENT SESSION [tempdb_file_size_changed] ON SERVER ADD EVENT 
sqlserver.database_file_size_change(SET collect_database_name=(1)ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.is_system,sqlserver.query_hash,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.sql_text,sqlserver.username) WHERE ([database_id]=(2))) ADD TARGETpackage0.event_file(SET filename=N'C:\ExtendedEvents\TempDBGrowth.xel',max_file_size=(100),max_rollover_files=(25)) 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=OFF,STARTUP_STATE=ON)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.