এসকিউএল সার্ভার প্রোফাইলার ট্রেস করার সময় কোনও প্রসেসিয়াল কলটিতে ইনকামিং প্যারামিটার মানগুলি রেকর্ড করা সম্ভব?


13

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

আমার কাছে একটি সঞ্চিত প্রক্রিয়া রয়েছে যা একটি 54-পরামিতি উপ-প্রক্রিয়া সম্পাদন করে, একটি লুপের ভিতরে যেখানে সঞ্চিত পদ্ধতিটি কার্সার তৈরি করে তার পরে কিছুক্ষণ লুপ করে। এখানে সরলীকৃত দৃশ্য:

CREATE PROCEDURE 
   [dbo].[OuterProcedure]       
   (  @ProductCode varchar(8),          
     -- 41 more parameters omitted
   )
AS            
  SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED   
  SET NOCOUNT ON           
 DECLARE @AboutFourHundredLocalvariables -- omit about 400 local variable declarations.
 -- OMIT ABOUT 10 temporary table declarations.
 DECLARE  aCursor CURSOR FAST_FORWARD FOR         
   SELECT [ID],bkno,  -- about 40 fields omitted.
              FROM vwVeryComplexViewThatDoesALotOfVeryBrutalJoins         
              WHERE  (about_80_boolean_expressions AND omitted_here)
        ORDER BY some,keys,like,this

OPEN aCursor          
FETCH NEXT FROM aCursor /* Get First Record */         
    INTO @ID, @about_40_fields,.... 
WHILE (@@FETCH_STATUS = 0) AND         
          ( @About80MoreBooleanExpressionsHere)  
BEGIN   /* 1 */            
     -- about 700 lines of logic, math and if-parameter-this-then-that
     -- stuff omitted
            EXEC  @ConsiderItem = 
                      InnerProcedureCallWithinLoop
                                            @from_locn,        
                        @About53PARAMSOMITTED,
                                                ...

    FETCH NEXT FROM CurInventory /* Get Next Record */       
       INTO @ID,@MoreStuff,...    
END                   
CLOSE CurInventory          
DEALLOCATE CurInventory        

সমস্ত পরামিতি মানগুলিতে পাস করার জন্য আমি কীভাবে একটি ট্রেস পেতে পারি InnerProcedureCallWithinLoop? 54 পরামিতি আছে। আমার এসকিউএল-এর ভিতরে কি আমাকে "ডিবাগ-প্রিন্টেফের 54 লাইন" লিখতে হবে বা এসকিউএল ট্রেস করার সময় আমি কীভাবে কোনও প্রসেসি কলের সমস্ত পরামিতি মানগুলি ডাম্প করতে পারি?

আমি এখনই কোনও ট্রেস পেলে আমি এই আউটপুটটি পাই:

EXEC  @ConsiderItem = InnerProcedureCallWithinLoop  @from_locn,        
                        @About53ParmsOmitted

আমি কি জানতে চাই যে @from_locn = 1এবং @About53ParmsOmitted = 'hello world'ইত্যাদি।

এটি আমাকে প্যারামিটারের আসল মূল্য বলে না @from_locn। প্রথম প্যারামিটারের ক্ষেত্রে, এটি আমার শীর্ষ স্তরের সঞ্চিত পদ্ধতিতে চলে গেছে, সুতরাং আমি জানি যে এটি 0 বা 1, কেস হিসাবে হতে পারে। তবে অভ্যন্তরীণ পদ্ধতির 43 টির মধ্যে প্রায় 40 টি লুপের FETCH NEXT FROM aCursorঅভ্যন্তরে অপারেশন থেকে আসে WHILE

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

এটি কোনও এসকিউএল এক্সপ্রেশনটিতে ড্রিল করার এবং স্ক্রিপ্টগুলি তৈরি করার এই চেষ্টার অংশ যা এই জটিল সঞ্চিত প্রক্রিয়াগুলির তদন্ত করতে পারে।

আপডেট আমি একটি আরপিসির "আউটপুট পরম" রেকর্ডিং বিকল্পটি পেয়েছি, তবে "আরপিসি ইন পারাম" রেকর্ডিং বিকল্পটি পাইনি।


এটি কেবল 54 পরামিতিগুলি নয় যেগুলি স্থূল :-) সমস্ত কার্সার হিসাবে লুপিং করছে call এটি মোটামুটি :-) আপনি কি এসকিউএল সেন্ট্রি প্ল্যান এক্সপ্লোরার দিয়ে খেলেন? আপনি বিনামূল্যে সংস্করণ ব্যবহার বা পূর্ণ সংস্করণের একটি ট্রায়াল ব্যবহার এবং যদি আপনি সেই সমস্ত পরামিতি সঙ্গে একটি কল আছে আপনাকে সহায়তা করতে পারে পারে - sqlsentry.net/plan-explorer/sql-server-query-view.asp
মাইক ওয়ালশ

আপনি আমাদের বলতে পারেন কোন ইভেন্টগুলি আপনি ক্যাপচার করছেন?
মাইক ওয়ালশ

2
আপনি যখন ফোন করবেন তখন প্রোফাইলার কেবল একবার সেই ডেটা ধরবে (আমার মনে হয়)? এই সমস্ত প্যারামের সাথে একটি অডিট টেবিল স্থাপন করার চেষ্টা করুন, এবং আপনার কার্সারটি লুপিংয়ের আগে কেবল একটি সন্নিবেশ করুন?
jcolebrand

আরপিসি: সম্পূর্ণ প্যারামিটার মানগুলি দেখায় তবে বাহ্যিক স্তরে।
মাইক ওয়ালশ

3
আপনার যন্ত্রণার প্রতিদান হিসাবে প্রশ্নের জন্য +1। আমি যদি পারতাম তবে আমি এক্সপ্লিটিয়েটিভ ছাড়াই প্রশ্ন পোস্ট করার জন্য আবার +1 করতাম।
মার্ক স্টোরি-স্মিথ

উত্তর:


8

আমি বুলেটটি কামড়ে দেব এবং আপনাকে বলব যে এই জাতীয় ট্রেস স্থাপন করা যায় না, কারণ এটি ট্রেসগুলির [অনুভূত] উদ্দেশ্য নয়। আমি সর্বদা এটি এভাবেই করেছি:

WHIL (@@ FETCH_STATUS = 0) এবং
            (@ প্রায় 80 মুরবুলিয়ান এক্সপ্রেশনস এখানে)
শুরু করুন
    প্রায় 700 লাইন যুক্তি, গণিত এবং যদি-প্যারামিটার-এটি-তবে-যে
    জিনিসগুলি
      INSERT InnerProcedureCallWithinLoop__T्रेसTable
              VALUES (@Fra_s), @
বাদ দেওয়া হয়েছে About53PARAMSOMITTED
      পাগলের সংখ্যা বাড়ছে @ConsiderItem =
            InnerProcedureCallWithinLoop
                  @from_locn,
                        @ About53PARAMSOMITTED,
...

যদি আমি জানি যে এটি কেবলমাত্র একটি অবস্থান থেকে কল করা আছে। অন্যথায়, আমি এটি কলারের পরিবর্তে কলিতে করি।

ALTER PROC InnerProcedureCallWithinLoop
    @from_locn int,
    @About53PARAMSOMITTED ...
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;
INSERT InnerProcedureCallWithinLoop__TraceTable VALUES (@from_locn, @prm2, @prm3....
--- rest of proc

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


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