sp_prepexec (sp_execute) বনাম sp_executeSQL


8

প্রশ্নের মাংস: প্রকৃত সঞ্চিত প্রক্রিয়াগুলি কি কেবলমাত্র এমন প্রক্রিয়া যা টেম্প টেবিল ক্যাচিং প্রয়োগ করে বা সিস্টেম স্টোরেজ পদ্ধতি যেমন sp_executeSQL/ sp_executeসেগুলিও গ্রহণ করে?

আমি ডিবিএ নই, তাই দয়া করে ছোট শব্দ ব্যবহার করুন। আমাদের অ্যাপ্লিকেশনটি প্রস্তুত বিবৃতি পাঠায় যে প্রোফাইলার থেকে, আমি সমস্ত এসকিউএল চালিত দেখি sp_prepexecযার মাধ্যমে চলমান sp_prepareএবং sp_execute। আমি যা করার চেষ্টা করছি তা যদি আমি টেম্প টেবিল ক্যাশে থেকে উপকৃত হচ্ছি তবে তা বের করা উচিত।

আচরণটি পরীক্ষা করতে আমি এই গাইডটি অবজেক্ট_আইডি () দিয়ে ব্যবহার করছি

https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html

তারপরে এই ব্লগ পোস্টের # 3 বিন্দুতে পরামর্শ দেওয়া হয়েছে যে এক্সইসি টেম্প টেবিল ক্যাচিং ব্যবহার করতে পারে না তবে sp_executeSQL পারে কিনা তা ছাড়বে: http://blogs.msdn.com/b/turgays/archive/2013/09/18/exec-vs- SP-executesql.aspx

আমার প্রশ্নের ক্লায়েন্টের মাধ্যমে প্রেরণে আমি একটি সাধারণ টেম্প টেবিল তৈরি করেছি।

DECLARE @foo int; -- set by JDBC, unused but required to force a prepared statement

SELECT 1 AS id
    INTO #tmp

SELECT OBJECT_ID('tempdb..#tmp');

প্রোফাইলারে, আমি দেখতে পাচ্ছি:

declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,N'@P1 int',N'declare @foo INT = @P1 

SELECT 1 as id
    into #tmp

select Object_id(''tempdb..#tmp'');
DROP TABLE #tmp;',1
select @p1

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

উত্তর:


9

প্রকৃত সঞ্চিত পদ্ধতিগুলি কি কেবলমাত্র মেকানিজম যা টেম্প টেবিল ক্যাশে প্রয়োগ করে বা সিস্টেম স্টোরেজ প্রক্রিয়াগুলি যেমন sp_executeSQL/ sp_executeসেগুলি গ্রহণ করে?

CREATE PROCEDUREঅস্থায়ী সারণী ক্যাচিং থেকে উপকার পেতে আপনার একটি সত্যিকারের সঞ্চিত প্রক্রিয়া প্রয়োজন need এর মধ্যে অস্থায়ী সঞ্চিত পদ্ধতি ( #procname) অন্তর্ভুক্ত রয়েছে ।

এই ব্লগ পোস্টে পয়েন্ট # 3 পয়েন্টটি সুপারিশ করে যে এক্সইসি টেম্প টেবিল ক্যাচিং ব্যবহার করতে পারে না, তবে sp_executeSQL পারবে কিনা তা ছাড়বে।

নোটিশ যে EXECUTEচালাতে ব্যবহৃত হয় sp_executesql

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

SELECT 
    DOMCC.name,
    DOMCC.pages_kb,
    DOMCC.pages_in_use_kb,
    DOMCC.entries_count,
    DOMCC.entries_in_use_count
FROM sys.dm_os_memory_cache_counters AS DOMCC
WHERE DOMCC.[type] = N'CACHESTORE_TEMPTABLES';

সঞ্চিত পদ্ধতি ইনপুট টিভিপিগুলিও ক্যাশেড হয় এবং এসকিউএল সার্ভার ২০১২ থেকে শুরু করে এগুলি যখন ব্যবহৃত হয় তখন ক্যাশেও করা যায় sp_executesql। বিশদ জন্য লিঙ্কযুক্ত সিএসএস ব্লগ পোস্ট দেখুন।

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