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

2021-10-18 11:52:42 字數 1982 閱讀 3200

一、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。很明顯,這樣的設...

write如何實現高速寫盤

define gnu source include include include include include include include include include include include include include include define buf size 128 ...

mysql高速批量匯入資料

使用load data infile 命令 高速向資料庫中做批量匯入 首先 生成txt資料檔案,將值全部弄好,不同值之間用,分隔 然後 把生成的檔案放到資料庫對應的資料儲存目錄,命令登入mysql,用load data命令去匯入 注意 匯入前先把表的索引全部失效,導完再生效 操作示例 alter t...