কোন অস্থায়ী সারণিতে কোন অধিবেশন রয়েছে তা সন্ধান করুন


14

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

ধন্যবাদ,


1
আমরা সেই নির্দিষ্ট ব্যবহারকারীর সন্ধান করতে চাই যা টেম্প ডাটাবেসে স্থান ব্যবহার করছে। এটি এখনকার কাজগুলি 'আমরা আগ্রহী এমন টেম্পডিবি ব্যবহার করি
এসকিউএলএমকি

উত্তর:


16

আমি 2007 এ কানেক্টে কিছু কিছু তৈরি করার জন্য বলেছিলাম। এটি ২০০৮ সালের মুক্তির জন্য প্রত্যাখ্যান করা হয়েছিল এবং পরে কয়েক বছর আগে কানেক্টের মৃত্যুর আগে অবহেলা করা হয়েছিল। আমি এটি এসকিউএল সার্ভারের জন্য নতুন প্রতিক্রিয়া সাইটে এটির সন্ধান করার চেষ্টা করেছি , তবে সেই অনুসন্ধানটি একটি পরম ডাম্পস্টার আগুন। আমার অনুরোধের শিরোনামটি ছিল "সেশন_আইডিতে টেম্প টেবিলের মানচিত্রের জন্য ডিএমভি" - যেহেতু অনুসন্ধানটি কেবলমাত্র OR করতে পারে, "মানচিত্রের টেম্প টেবিল" ফলাফলের 118 পৃষ্ঠাগুলি প্রদান করে। গুগল মনে করছে তারা কানেক্টকে হত্যা করার সময় আইটেমটি কাটা হয়নি বলে মনে হচ্ছে

ইতিমধ্যে, এসকিউএল সার্ভার 2005 এবং 2008 এর জন্য আপনার এই তথ্যটি ডিফল্ট ট্রেস থেকে টানতে সক্ষম হওয়া উচিত:

DECLARE @FileName VARCHAR(MAX)  

SELECT @FileName = SUBSTRING(path, 0,
   LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc'  
FROM sys.traces   
WHERE is_default = 1;  

SELECT   
     o.name,   
     o.OBJECT_ID,  
     o.create_date, 
     gt.NTUserName,  
     gt.HostName,  
     gt.SPID,  
     gt.DatabaseName,  
     gt.TEXTData 
FROM sys.fn_trace_gettable( @FileName, DEFAULT ) AS gt  
JOIN tempdb.sys.objects AS o   
     ON gt.ObjectID = o.OBJECT_ID  
WHERE gt.DatabaseID = 2 
  AND gt.EventClass = 46 -- (Object:Created Event from sys.trace_events)  
  AND o.create_date >= DATEADD(ms, -100, gt.StartTime)   
  AND o.create_date <= DATEADD(ms, 100, gt.StartTime)

এই জোনাথন কেহিয়াস ব্লগ পোস্ট থেকে নির্লজ্জভাবে তুলে নেওয়া হয়েছে

স্থান ব্যবহার নির্ধারণ করতে আপনি এই জাতীয় মতামত থেকে ডেটাতে যোগ দিতে আরও উন্নত করতে পারেন sys.db_db_partition_stats- যেমন:

DECLARE @FileName VARCHAR(MAX)  

SELECT @FileName = SUBSTRING(path, 0,
   LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc'  
FROM sys.traces   
WHERE is_default = 1;  

SELECT   
     o.name,   
     o.OBJECT_ID,  
     o.create_date, 
     gt.NTUserName,  
     gt.HostName,  
     gt.SPID,  
     gt.DatabaseName,  
     gt.TEXTData,
     row_count = x.rc,
     used_page_count = x.upc
FROM sys.fn_trace_gettable( @FileName, DEFAULT ) AS gt  
JOIN tempdb.sys.objects AS o   
     ON gt.ObjectID = o.OBJECT_ID
INNER JOIN
(
 SELECT [object_id], SUM(row_count), SUM(used_page_count)
   FROM tempdb.sys.dm_db_partition_stats
   WHERE index_id IN (0,1)
   GROUP BY [object_id]
) AS x(id, rc, upc)
ON x.id = o.[object_id]
WHERE gt.DatabaseID = 2 
  AND gt.EventClass = 46 -- (Object:Created Event from sys.trace_events)  
  AND o.create_date >= DATEADD(ms, -100, gt.StartTime)   
  AND o.create_date <= DATEADD(ms, 100, gt.StartTime)

এখানে সমস্যাটি একটি টেবিলের নামটি ক্যোয়ারী পাঠ্যের সাহায্যে সম্পর্কিত করার চেষ্টা করছে; এটি কেবল ব্যবহারিক নয়, বেশিরভাগ সময় থেকে ব্যবহারকারী এখনও সেই টেবিলের বিপরীতে কোনও কোয়েরি চালাচ্ছেন না (এটি তৈরি / জনবহুল তৈরির জন্য এখনও চালানো মনে করবেন না)।

যাইহোক, এবং এটি অন্যান্য পাঠকদের জন্য (বা আপনি যখন আপগ্রেড করবেন তখন আপনার জন্য), 2012+ এ ডিফল্ট ট্রেসটি আর টেম্প টেবিল অবজেক্ট তৈরির ট্র্যাক করে না , যদি # টেম্প টেবিলটি হিপ থাকে। নিশ্চিত নয় যে এটি কোনও কাকতালীয় ঘটনা বা সরাসরি সম্পর্কিত যে 2012 সালে শুরু করে সমস্ত টেম্প টেবিলের এখন নেতিবাচকobject_id । আপনি এই তথ্য সংগ্রহ এবং ট্র্যাক করতে সহায়তা করার জন্য অবশ্যই অবশ্যই বর্ধিত ইভেন্টগুলিতে যেতে পারেন, তবে এটি সম্ভবত অনেকগুলি ম্যানুয়াল কাজ (এবং আমি কেবলমাত্র যাচাই করেছি যে এটি আর ট্রেস হিসাবে ট্র্যাক করা হয়নি - আপনি এটি চয়ন করতে সক্ষম নাও হতে পারেন হয় বর্ধিত ইভেন্টগুলিতে)। ডিফল্ট ট্রেস হবে কোনও পিকে বা অন্যান্য সীমাবদ্ধতার সাহায্যে তৈরি করা হয়েছে, বা সৃজন ইভেন্টের পরে যুক্ত বাধা বা সূচকগুলি সহ তৈরি করা # টেম্প টেবিলগুলি তুলুন, তবে তারপরে আপনাকে উপরের সময় ভিত্তিক বিধিনিষেধগুলি ooিলা করতে হবে (১০০ মাইলের পরে একটি সূচি তৈরি করা যেতে পারে) সৃষ্টি)।

এই সাইটে আরও কিছু উত্তর যা কার্যকর হতে পারে:

এসকিউএল সার্ভার ২০১২ এবং তার উপরে এই তথ্যটি ট্র্যাক করার জন্য আমি একটি কাস্টম এক্সটেন্ডেড ইভেন্টস সেশন দিয়ে ব্লগ করেছি:

এবং পল হোয়াইট সরাসরি পৃষ্ঠাগুলি পড়ার বিষয়ে ব্লগ করেছেন (একেবারে হৃদয়ের হতাশার জন্য নয়, কোনওভাবেই স্বয়ংক্রিয়ভাবে চালানো সহজ নয়):


5

এখানে একটি ক্যোয়ারী যা আপনার সন্ধান করা তথ্যগুলি সন্ধান করতে শুরু করা উচিত:

select top 10
    tsu.session_id,
    tsu.request_id,
    r.command,
    s.login_name,
    s.host_name,
    s.program_name,
    total_objects_alloc_page_count = 
        tsu.user_objects_alloc_page_count + tsu.internal_objects_alloc_page_count,
    tsu.user_objects_alloc_page_count,
    tsu.user_objects_dealloc_page_count,
    tsu.internal_objects_alloc_page_count,
    tsu.internal_objects_dealloc_page_count,
    st.text
from sys.dm_db_task_space_usage tsu
inner join sys.dm_exec_requests r
on tsu.session_id = r.session_id
and tsu.request_id = r.request_id
inner join sys.dm_exec_sessions s
on r.session_id = s.session_id
outer apply sys.dm_exec_sql_text(r.sql_handle) st
where tsu.user_objects_alloc_page_count > 0
or tsu.internal_objects_alloc_page_count > 0
order by total_objects_alloc_page_count desc;

এই কোয়েরিটি শীর্ষ 10 টি কাজের জন্য দরকারী তথ্যকে টানায়, যেমন বরাদ্দকৃত / নির্ধারিত পৃষ্ঠাগুলি, কার্যগুলির এসকিউএল পাঠ্য (যদি উপলভ্য থাকে) ইত্যাদি etc.

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


ধন্যবাদ যে বেশ সুন্দর দেখাচ্ছে। অদ্ভুত বিষয়টি হল যদি আমি টেমপ্লেড টেবিলে টেমপ্লেডের উপর একটি 'ডিস্ক ইউজ ব্যবহার টপ টেবিলগুলি' চালিত করি তবে st.text এ প্রদর্শিত হবে না। আমি ক্যোরি চালানোর পরে টেবিলটি এখনও আছে।
এসকিউএলমিখ

1
@ এসকিউএমএলকি আপনি যদি কেবল টেবিলটি সবচেয়ে বড় তা জানতে চান তবে আপনি তা থেকে তা পেতে পারেন tempdb.sys.dm_db_partition_stats। দুর্ভাগ্যক্রমে আপনি বলতে পারবেন না যে কোন অনুলিপিটি #some_table_nameকোন ব্যবহারকারীর অন্তর্ভুক্ত, আপনি যে বিবরণটি টেক্সটটি নির্দিষ্ট সময়ে যে কোনও সময় উল্লেখ করতে সক্ষম হবেন না - এটি বর্তমানে ব্যবহারকারী যে চলমান ক্যোয়ারী নয়। আপনি এটি এবং এটি
অ্যারন বার্ট্র্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.