国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

TempDB--臨時(shí)表的緩存

2024-07-21 02:49:50
字體:
供稿:網(wǎng)友
TempDB--臨時(shí)表的緩存

--==========================================================================

在博客園看到一篇文章《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ì)量,勿怪)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄂温| 武宁县| 万载县| 凤庆县| 墨竹工卡县| 临沧市| 乌兰县| 时尚| 沈阳市| 双辽市| 通化县| 江永县| 晋江市| 岳阳市| 远安县| 凌海市| 彩票| 沾化县| 福安市| 沛县| 塔城市| 揭东县| 金平| 淮滨县| 鲁甸县| 博野县| 奉化市| 都昌县| 通河县| 泰顺县| 辽中县| 陇西县| 布尔津县| 酒泉市| 惠来县| 乌海市| 隆昌县| 鄂托克旗| 焦作市| 孟连| 巢湖市|