--==========================================================================
在博客園看到一篇文章《SQLServer Temp tables 數(shù)據(jù)疑問》,文章中問道在沒有任何負(fù)載情況下,還有大量的臨時(shí)表,這是為什么?
--==========================================================================
讓我們來實(shí)驗(yàn)探索下
首先選擇任何一個(gè)用戶數(shù)據(jù)庫,執(zhí)行以下腳本:
CREATE PROCEDURE USP_TempTableTestASBEGIN SET NOCOUNT ON; CREATE TABLE #TB1(C11 INT,C22 INT) INSERT INTO #TB1 SELECT 1,1 SELECT * FROM #TB1ENDGOEXEC USP_TempTableTest
按照通用的理解,存儲過程中的臨時(shí)表會在調(diào)用中創(chuàng)建,在存儲過程調(diào)用結(jié)束后釋放,存儲過程執(zhí)行結(jié)束后,我們不應(yīng)該在tempdb中找到#TB1開頭的臨時(shí)表。
讓我們來檢查下
use tempdbgo--======================================--查看臨時(shí)表的列SELECT OBJECT_NAME(OBJECT_ID) AS ObjName,* FROM SYS.all_columnsWHERE OBJECT_NAME(OBJECT_ID) LIKE '%#%'
運(yùn)行以上代碼,可以很容易找到:
列名C11和C22和我們存儲過程中定于的臨時(shí)表列名一樣,只是換了個(gè)馬甲而已,別告訴我換了馬甲你們就不認(rèn)識”它“咯
--================================================================
解釋:
上面看到的#A2206DOC這個(gè)臨時(shí)表并不是我們存儲過程中使用到的#TB1,但是但是兩者存在一定關(guān)聯(lián)。想象一下,每次存儲過程執(zhí)行,都需要創(chuàng)建和釋放臨時(shí)表,而創(chuàng)建和釋放臨時(shí)表又涉及到修改很多系統(tǒng)表的數(shù)據(jù),而如果緩存這個(gè)臨時(shí)表,那么下一次調(diào)用存儲過程時(shí),就避免創(chuàng)建和釋放臨時(shí)表所照成的資源消耗,從而達(dá)到一定的性能提升。
專業(yè)解釋:
SQL Server刪除一個(gè)臨時(shí)對象時(shí),不移除該對象的條目,當(dāng)再次使用時(shí),就無須重新創(chuàng)建臨時(shí)對象,SQL Server為臨時(shí)對象緩存一個(gè)數(shù)據(jù)頁和一個(gè)IAM頁,并回收剩余頁,如果臨時(shí)表的大小超過8MB,回收會異步進(jìn)行。
--==================================================================
問題1: 多個(gè)存儲過程并發(fā)調(diào)用的時(shí)候怎么辦?
當(dāng)并發(fā)調(diào)用時(shí),會生成多個(gè)類似的臨時(shí)表”緩存“以供調(diào)用,并保證一個(gè)臨時(shí)表”緩存“在一個(gè)時(shí)間點(diǎn)內(nèi)只能被一個(gè)回話執(zhí)行的存儲過程訪問到,在訪問結(jié)束后,會清理該臨時(shí)表”緩存“的數(shù)據(jù),然后供下一個(gè)回話使用。
問題2: 什么樣的臨時(shí)表會被”緩存“
當(dāng)然不是所有臨時(shí)表都會被緩存,需要滿足一定的條件:
1. 沒有創(chuàng)建命名約束
2. 臨時(shí)對象在創(chuàng)建后沒有執(zhí)行影響臨時(shí)表的數(shù)據(jù)定義語言DDL操作(如創(chuàng)建索引和創(chuàng)建統(tǒng)計(jì))
3. 沒有使用動態(tài)SQL創(chuàng)建臨時(shí)對象
4. 臨時(shí)對象被創(chuàng)建在另一個(gè)對象的內(nèi)部,如存儲過程、觸發(fā)器、用戶自定義函數(shù)或臨時(shí)對象是一個(gè)用戶自定義表值函數(shù)的分會表
--=====================================================================
依舊妹子引狼(最近小忙,不能保證妹子質(zhì)量,勿怪)
新聞熱點(diǎn)
疑難解答
圖片精選