প্রশ্নের মাংস: প্রকৃত সঞ্চিত প্রক্রিয়াগুলি কি কেবলমাত্র এমন প্রক্রিয়া যা টেম্প টেবিল ক্যাচিং প্রয়োগ করে বা সিস্টেম স্টোরেজ পদ্ধতি যেমন 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
এটিও দেখছি যে টেম্প টেবিলের অবজেক্ট_আইডি পরিবর্তন হয়েছে। এটি আমাকে বিশ্বাস করতে পরিচালিত করে যে কেবলমাত্র "প্রকৃত" ব্যবহারকারী সঞ্চিত প্রক্রিয়াগুলি টেম্প টেবিল ক্যাচিংয়ের সুবিধা গ্রহণ করে।