mysql高速寫資料庫 Tempdb資料庫詳細介紹

2021-10-18 12:36:44 字數 1995 閱讀 6849

一、tempdb簡介

tempdb是sqlserver的系統資料庫一直都是sqlserver的重要組成部分,用來儲存臨時物件。可以簡單理解tempdb是sqlserver的速寫板。應用程式與資料庫都可以使用tempdb作為臨時的資料儲存區。乙個例項的所有使用者都共享乙個tempdb。很明顯,這樣的設計不是很好。當多個應用程式的資料庫部署在同一臺伺服器上的時候,應用程式共享tempdb,如果開發人員不注意對tempdb的使用就會造成這些資料庫相互影響從而影響應用程式。

二 、tempdb的特性

1、tempdb中的任何資料在系統重新啟動之後都不會持久存在。因為實際上每次sqlserver啟動的時候都會重新建立tempdb。這個特性就說明tempdb不需要恢復。

2、tempdb始終設定為「******」的恢復模式,當你嘗試修改時都會報錯。也就是說已提交事務的事務日誌記錄在每個檢查點後都標記為重用。

3、tempdb也只能有乙個filegroup,不能增加更多檔案組。

4、tempdb被用來儲存三種型別的物件:使用者物件,內部物件、版本儲存區

三、 tempdb儲存物件

1、使用者物件:區域性臨時表、全域性臨時表、表變數,這些都儲存在tempdb中。區域性臨時表以及全域性臨時表就不用多說了。針對表變數是否存在tempdb中,很多人都有誤解,尤其是網上有些文章簡直是誤人子弟。說什麼表變數是在記憶體中建立,速度比臨時表快。我們可以通過sqlserver2005引入的動態管理檢視sys.dm_db_session_space_usage來檢視表變數到底存在**。

在你的sqlserver2005或者2008上執行以下指令碼:

select * from sys.dm_db_session_space_usage

where database_id = db_id('tempdb') and session_id > 50

declare @t table (id int)

insert into @t values(2)

select * from sys.dm_db_session_space_usage

where database_id = db_id('tempdb') and session_id > 50

結果如下:

從上圖中可以看出使用了表變數導致tempdb分配了一頁,因此表變數不是在記憶體中建立的。

2、內部物件

內部物件主要是sqlserver在處理查詢的時候使用者臨時儲存資料的物件。如排序、spool、雜湊連線、公用表表示式查詢、建立或重新生成索引、錶值函式和游標

可以通過sys.dm_db_session_space_usage中的internal_object_alloc_page_count列檢視每個會話分配了多少頁面用於內部物件。

3、版本儲存區

sqlserver2008中很多功能都要求維護行的多個版本,版本儲存區就是用來儲存索引和資料行的這些不同版本的。下面功能使用了版本儲存區:觸發器、快照隔離和讀提交快照隔離、

聯機索引操作、多活動結果集。

可以通過sys.dm_tran_version_store檢視版本儲存區的所有內容,但要注意。這個動態管理檢視會消耗大量資源。

版本儲存區開銷:

行版本控制的開銷為每行14個字段,其中包括乙個事務序列號以及乙個行識別符號。如圖所示:

xsn 用於串聯同一行的多個版本6個位元組,rid 用於定位tempdb中的行版本8個位元組。

這個14個位元組開銷不會降低每行最多8060位元組的限制。如果資料頁滿了,那麼建立額外的14個位元組可能會導致頁面拆分,從而可能影響磁碟的空間需求。

只追儲存區

行版本資訊被寫入兩種只追加儲存區;索引重建有自己的版本儲存區,所有其他操作有乙個公共的儲存區。為了提高可擴充套件性,每個cpu排程器在版本儲存區中都有自己的頁面來儲存行。

可能有人想到,不可能總是追加,沒有刪除吧。當然有,sqlserver後台有個乙個專門的執行緒每分鐘都從tempdb中刪除陳舊的行版本。

待續...

mysql高速寫資料 Tempdb資料庫詳細介紹

一 tempdb簡介 tempdb是sqlserver的系統資料庫一直都是sqlserver的重要組成部分,用來儲存臨時物件。可以簡單理解tempdb是sqlserver的速寫板。應用程式與資料庫都可以使用tempdb作為臨時的資料儲存區。乙個例項的所有使用者都共享乙個tempdb。很明顯,這樣的設...

mysql資料庫效能資料 MYSQL資料庫效能優化

1.選取最適用的字段屬性 表中字段的寬度設得盡可能小 char 的上限為 255 位元組 固定占用空間 varchar 的上限 65535 位元組 實際占用空間 text 的上限為 65535。盡量把字段設定為 not null,執行查詢的時候,資料庫不用去比較 null 值。2.使用連線 join...

2 2 資料庫高速緩衝區

您所在的位置 讀書頻道 資料庫 oracle 2.2 資料庫高速緩衝區 2012 05 10 21 38 張天慧 清華大學出版社 字型大小 t t 綜合評級 oracle管理之道 第2章oracle例項,本章重點在於深入解析oracle本身執行時的記憶體空間,也就是oracle的例項主體,但誠如本章...