日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

SQL Server 2008连载之存储结构——基本系统视图

發布時間:2023/12/31 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 2008连载之存储结构——基本系统视图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原帖首發于it168專稿,鏈接為http://tech.it168.com/a2010/0902/1098/000001098556_1.shtmlITPUB個人空間i{(Rht ^1X
之所以寫SQL Server 2008存儲結構,很大程度上是因為看了《SQL Server 2005技術內幕存儲引擎》和《SQL Server 2008 Internals》,其次主要是為了滿足自己的好奇心和虛榮心。

  說實話,了解SQLServer2008的存儲結構,也許并不會提高你的SQL技能,也許也不會提升你對SQL Server性能優化的能力。出于好玩的目的,希望能夠和大家分享一下。

  本文算是對兩本書的閱讀筆記,加上自己的動手實踐和領悟;如果涉及版權問題和原創問題概不負責。

  從直觀的角度出發,我們可以觀察到SQL Server的物理存儲由若干數據庫構成,其中

數據庫類別數據庫名稱數據庫描述
系統數據庫mastermaster 數據庫記錄 SQL Server 系統的所有系統級信息。主要包括實例范圍的元數據、端點、鏈接服務器和系統配置設置以及記錄了所有其他數據庫的存在、數據庫文件的位置以及 SQL Server 的初始化信息。
model提供了SQL Server 實例上創建的所有數據庫的模板。
msdb主要由 SQL Server 代理用于計劃警報和作業
tempdbtempdb 系統數據庫是一個全局資源,可供連接到 SQL Server 實例的所有用戶使用,并可用于保存顯式創建的臨時用戶對象、SQL Server 數據庫引擎創建的內部對象,行版本數據等
戶數據庫db1/db2?

ITPUB個人空間 A+fZ5x4TB)O
?  如果我們在數據庫處點擊右鍵,選擇屬性,可以在文件處看到:

  每一個數據庫無論系統數據庫還是用戶數據庫都是由兩類數據庫文件構成,即行數據數據庫文件和日志文件;而行數據數據庫文件則有一個主要數據文件和N個次要數據文件構成。

  我們還可以再考察一下文件組頁,每個數據庫都有一個Primary主文件組和N個用戶定義文件組構成。通過對表對象應用filegroup選項,能夠將不同的表分散到不同的磁盤上,以提高系統性能。

  數據庫又主要由表、視圖、函數、存儲過程、觸發器、類型、規則、默認值等等構成。

  當然我們主要考察的對象是表,每一個數據庫實際上都包含一系列系統表和一系列用戶表。

  而表又包括一系列的列、主外鍵、約束、觸發器、索引等。

   SQLServer2008中提供了相當豐富的系統視圖,能夠從宏觀到微觀,從靜態到動態反應數據庫對象的存儲結果、系統性能、系統等待事件等等。同時 也保留了與早期版本兼容性的視圖,主要差別在于SQLServer2008提供的新系統視圖一是更加全面和豐富、二是更注重命名規則。

??????? SQLServer2008的幾乎所有對象信息都存在于sys.objects系統視圖中,同時又在不同的系統視圖中保留了相應的副本,對于函數、視圖、 存儲過程、觸發器等相應的文本對象,把相應的對象的詳細資料存于新的sys.sql_modules視圖中。

序號對象類型對象類型描述相關系統表
1AF = 聚合函數 (CLR)AGGREGATE_FUNCTIONN/A
2C = CHECK 約束CHECK_CONSTRAINTCHECK_CONSTRAINTS
3D = DEFAULT(約束或獨立)DEFAULT_CONSTRAINTDEFAULT_CONSTRAINTS
4F = FOREIGN KEY 約束FOREIGN_KEY_CONSTRAINTFOREIGN_KEYS
5FN = SQL 標量函數SQL_SCALAR_FUNCTIONSQL_MODULES
6FS = 程序集 (CLR) 標量函數CLR_SCALAR_FUNCTIONN/A
7FT = 程序集 (CLR) 表值函數CLR_TABLE_VALUED_FUNCTIONN/A
8IF = SQL 內聯表值函數SQL_INLINE_TABLE_VALUED_FUNCTIONSQL_MODULES
9IT = 內部表INTERNAL_TABLEINTERNAL_TABLES
10P = SQL 存儲過程SQL_STORED_PROCEDUREPROCEDURES
:Bw3D7r]h `6W(YI6517SQL_MODULES
&suSA%G|aeU6517?
11PC = 程序集 (CLR) 存儲過程CLR_STORED_PROCEDUREN/A
12PG = 計劃指南PLAN_GUIDEPLAN_GUIDES
13PK = PRIMARY KEY 約束PRIMARY_KEY_CONSTRAINTKEY_CONSTRAINTS
14R = 規則(舊式,獨立)RULESQL_MODULES
15RF = 復制篩選過程REPLICATION_FILTER_PROCEDURESQL_MODULES
16S = 系統基表SYSTEM_TABLEOBJECTS
17SN = 同義詞SYNONYMSYNONYMS
18SQ = 服務隊列SERVICE_QUEUESERVICE_QUEUESS
19TA = 程序集 (CLR) DML 觸發器CLR_TRIGGERN/A
20TF = SQL 表值函數SQL_TABLE_VALUED_FUNCTIONSQL_MODULES
21TR = SQL DML 觸發器SQL_TRIGGERTRIGGERSITPUB個人空間? F%v;C5U(e.J
SQL_MODULES
f7A+ZZDY6517?
22U = 表(用戶定義類型)USER_TABLETABLES
23UQ = UNIQUE 約束UNIQUE_CONSTRAINTKEY_CONSTRAINTS
24V = 視圖VIEWVIEWS
5}A'o8x@ZSmsh6517SQL_MODULES
4P6q zk&VO6}6517?
25X = 擴展存儲過程EXTENDED_STORED_PROCEDUREEXTENDED_PROCEDURES

?對于數據庫層面的存儲結構,我們可以參看以下視圖:

#div_code img { border: 0px none; } --數據庫實例的概要情況
r|hY*huP`6517
SELECT*FROM SYS.SERVERS
*C(X9`-@KL d6517WHERE SERVER_ID
=0ITPUB個人空間C]ydj)XN0g
--兼容性視圖SELECT*FROM SYS.SYSSERVERS
Wd'N6cy2c'd6517
:L+IV5U.z.Q|6517
--各個數據庫的詳細信息ITPUB個人空間/ui0^!e7dj @
SELECT*FROM SYS.DATABASESITPUB個人空間'u8XG~3I1C~r
--兼容性視圖SELECT*FROM SYS.SYSDATABASESITPUB個人空間D&cn4z4Iv.U
ITPUB個人空間[4p A+j _g
--文件組的詳細信息
(Vc'f9U$H_XQ;Z6517
SELECT*FROM SYS.FILEGROUPS??ITPUB個人空間dox\*^b']
--兼容性視圖SELECT*FROM SYS.SYSFILEGROUPS
^]7POz4u6517
\wDrS{_ \~gJ6517
--各個數據庫文件的詳細信息ITPUB個人空間9UH'DO6]&Z5^C(mh-n%p
SELECT*FROM SYS.MASTER_FILESITPUB個人空間9y0o"Z:e*@C}
--兼容性視圖SELECT*FROM SYS.SYSALTFILESITPUB個人空間3nos#R$WgS FS

.C1Jd*y6mhzk6517
--當前數據庫文件的詳細信息
j;QaZP D/j:Q6517
SELECT*FROM SYS.DATABASE_FILES
4j.^$q$CJ5ck/u3biI6517
--兼容性視圖SELECT*FROM SYS.SYSFILES
8^:`g YU&hz6517ITPUB個人空間ow8Tt|&{$R
--數據空間的詳細情況,可以是文件組或分區方案
4tiUU^)e6517
SELECT*FROM SYS.DATA_SPACESITPUB個人空間\d{h!so

?

  關于數據庫表的存儲信息,通過以下系統表我們可以大致了解數據庫表在數據庫中是如何定義的。以下視圖提供了基本的數據庫對象信息。

#div_code img { border: 0px none; } --我們首先創建一張表和一些索引
lS.TJUoIA4_3c6517CREATE TABLE dbo.test
*oNYEg!K$I'U6517(ITPUB個人空間"[[)I%fY|9K&R
??id
intIDENTITY(1,1)NOTNULL,
5N Q}.er/D6517??name char(
100)NULL,
n3~4GfYO+K6517CONSTRAINT PK_test PRIMARY KEY CLUSTERED (id
ASC)ITPUB個人空間!U+R%J(Z$VKnm oal
)ITPUB個人空間N:_r0H~YZ{J&\
CREATE NONCLUSTERED INDEX IX_test
ONdbo.test(name)ITPUB個人空間AkV_d9o

8C,{ OS k6517
--表和對象詳細信息,根據表名稱查詢出object_id為ITPUB個人空間]%R"nsOa"_"T @*j
--事實上幾乎所有的用戶對象都出自于SYS.OBJECTS表ITPUB個人空間\,B[5H$i6|L @q
SELECT*FROM SYS.OBJECTSITPUB個人空間{1]R*Us.W
WHERE type_desc
='USER_TABLE' AND NAME='TEST'ITPUB個人空間FM:n? @v
--兼容性視圖SYSOBJECTS
6Q}6t)_a/Wr4|F'k6517
--如果要查詢與該表相關的其他所有對象,則可以執行以下語句ITPUB個人空間e+GWA(t
SELECT*FROM SYS.OBJECTS
ID S D'z&cNc6517WHERE type_desc
='USER_TABLE' AND NAME='TEST' OR
[[z*W1gb3Bm6AtT6517
?????? parent_object_id inITPUB個人空間d`'Z]{T i9[;tU
????????(
SELECTobject_id FROM SYS.OBJECTSITPUB個人空間SJ$LP-Z/p#Xu]
??????????WHERE type_desc
='USER_TABLE' AND NAME='TEST')ITPUB個人空間 f$y:D8j8U p#gx/e
??????????
/Z+dBt4gp!l6_w6517
--表字段詳細信息,可以查詢出相關column_idITPUB個人空間9EKUDVs^a
SELECT*FROM SYS.COLUMNSITPUB個人空間~"O Z fz#k~
WHERE OBJECT_ID
=5575058ITPUB個人空間:c5[Lv)sE{#QtW
--兼容性視圖SYSCOLUMNS
)h(fk;`(|@\6517ITPUB個人空間 J4G2N{q9Ps3L
--表索引詳細情況,可以清楚的看到存在兩個索引
:p?|h r6517
SELECT*FROM SYS.INDEXES WHERE OBJECT_ID=5575058
5QSG1ru+^ y-m0b6517
--兼容性視圖SYSINDEXES
U] zZ#g0y6517
?du^(n+j6517
--表分區情況,數據庫中所有表和索引的每個分區在表中各對應一行
U C8Ak F+]6517
--此處可以看到該表有兩個分區,聚集索引即表本身,還有一個是name的非聚集索引ITPUB個人空間9y8Gc"{?&DB9~
--partition_id 即分區的ID
:Z skZ;\wN{6517
--hobt_id包含此分區的行的數據堆或B樹的ID??ITPUB個人空間\N,PS4Ycw3M
SELECT*FROM SYS.PARTITIONS WHERE OBJECT_ID=5575058
:^hF A$^6517
Qh,H?3xD^6517
--分配單元情況,數據庫中的每個分配單元都在表中占一行ITPUB個人空間.k T^;Z4v&^%Vr'nth\
--該表只有和SYS.PARTITIONS配合使用才有意義ITPUB個人空間[)?]^7CZPd W7F
SELECT*FROM SYS.ALLOCATION_UNITS
5J_.@JQ3}lZ!K6517
C WTYLW6517
--SYS.ALLOCATION_UNITS和SYS.PARTITIONS一起使用能夠反映出某個對象的頁面分配和使用情況ITPUB個人空間.Nu/d!N.y7xuQH
SELECT*FROM SYS.ALLOCATION_UNITS U,SYS.PARTITIONS P
KiJ5Jy6517WHERE U.TYPE IN (
1,3)ANDU.CONTAINER_ID=P.HOBT_IDANDP.OBJECT_ID=5575058
.@%} D+Lz&?KE+j,j4~6517UNION ALLITPUB個人空間O[#} t,c0h
SELECT*FROM SYS.ALLOCATION_UNITS U,SYS.PARTITIONS P
({.s#} nQ_Id/{S6517WHERE U.TYPE
=2ANDU.CONTAINER_ID=P.PARTITION_IDANDP.OBJECT_ID=5575058ITPUB個人空間D)Bg*Fr5a
ITPUB個人空間@qrhym#rzo
--返回每個分區的頁和行計數信息ITPUB個人空間vd1C8H$kKCl/I
SELECT*FROM SYS.DM_DB_PARTITION_STATS WHERE OBJECT_ID=5575058
i-^'[?re6}!rM*K&u6517ITPUB個人空間xH`(h9ZJ:O)kcU
--返回索引的詳細字段情況ITPUB個人空間 @`!\Ct9m?
SELECT*FROM SYS.INDEX_COLUMNS WHERE OBJECT_ID=5575058ITPUB個人空間4?-o[E~qFN4H#S
--兼容性視圖SYSINDEXKEYS
iXQ9h9Yv6ThA6517
j|9Oq.Y6517
--以下為根據某個索引名稱獲取其相關字段的語句
|LMiD#V,E+? ~6517DECLARE @index_field_names VARCHAR(
500)
Nr$`-~ M[X6517
SET@index_field_names='';
x(E A/hM`O;prV-?*c6517
SELECT@index_field_names=@index_field_names+c.name+','
"rD _}2j|6517
??FROM SYS.INDEX_COLUMNS a,SYS.INDEXES b,SYS.COLUMNS c
|0y7N;h SY6517WHERE a.object_id
=b.object_idANDa.index_id=b.index_id
%y'z4~`~xA6517??
ANDa.object_id=c.object_idANDa.column_id=c.column_id
"yqzD8a*S6517??
ANDb.name='IX_test2'
$_!m+l9zn6517
ORDER BY a.index_column_id
| z:EPEq}6517
SET@index_field_names=LEFT(@index_field_names,LEN(@index_field_names)-1)
qN1t9g1z6517PRINT @index_field_names
0VL:`Xl7j L+@?H6517ITPUB個人空間(Rs?q6] u+B
--CHECK約束,數據來源sys.objects.type='C'
M)SR1S c~i}_ A6517
SELECT*FROM SYS.CHECK_CONSTRAINTS WHERE OBJECT_ID=?
jhKwG1S!t5L6517
--兼容性視圖SYSCONSTRAINTSITPUB個人空間F*J8P h+?J8I

*W@/?8c"z1hrw6517
--數據來源sys.objects.type=DITPUB個人空間9Y%l:D$w~f
SELECT*FROM SYS.DEFAULT_CONSTRAINTS WHERE OBJECT_ID=?
:`WZa;x W6517
--兼容性視圖SYSCONSTRAINTSITPUB個人空間pEi(`wM3^
ITPUB個人空間Y_/C2c1E Nr
--主鍵或唯一約束,數據來源sys.objects.type PK 和UQITPUB個人空間?;f:K&|$m.h!]%n
SELECT*FROM SYS.KEY_CONSTRAINTS WHERE OBJECT_ID=?ITPUB個人空間I_)E.FmrG)q;t#V-yF o
--兼容性視圖SYSCONSTRAINTSITPUB個人空間ap|Zxx L
ITPUB個人空間Jl%\$@^$i
--外鍵,數據來源sys.object.type=FITPUB個人空間`*CBB-N;G
SELECT*FROM SYS.FOREIGN_KEYS WHERE OBJECT_ID=???ITPUB個人空間b"D:{v,ju
--兼容性視圖SYSREFERENCES
;itr.lQ'X~^6517ITPUB個人空間5E|-A+j4h
--觸發器ITPUB個人空間:\|:d0mkxL]| Z
SELECT*FROM SYS.TRIGGERS WHERE OBJECT_ID=???
vk5t9| t8K5R^!f6517ITPUB個人空間iK7ISM7~ VYr
--注釋
&Lh"e$O2e;i6`*c6517
SELECT*FROM SYS.SQL_MODULES
wpD2Zd-z6517
--兼容性視圖SYSCOMMENTS
E4bj`+Kp:x/`6517
V4]6O3V&JA E)n C H6517
--數據庫用戶表
w/d'RA+QG&w-f6517
SELECT*FROM SYS.DATABASE_PRINCIPALS
:G Xo z5U|8z6517
--兼容性視圖SYSUSERS
5_.{"EB,m L6517
Jz [.P:M8Is&i[6517
--數據庫數據類型表ITPUB個人空間,y:J_4x#b
SELECT*FROM SYS.TYPES
"_lB)iR2[^1C6517
--兼容性視圖SYSTYPES

轉載于:https://blog.51cto.com/baoqiangwang/408425

總結

以上是生活随笔為你收集整理的SQL Server 2008连载之存储结构——基本系统视图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。