随笔-54  评论-334  文章-0  trackbacks-6

最新评论

共7页: 1 2 3 4 5 6 7 下一页 
re: 朋友们请珍重自己的身体 Justin 2008-09-06 08:16  
是啊,不能用身体换money
re: 朋友们请珍重自己的身体 凉面 2008-09-06 07:01  
准备戒烟,锻炼身体保护家园!
版本发布过快了.
补充一下,要想在jqeury内跨域,直接使用getJson方法即可,很爽的哦
re: MSSQL优化之 1.3 存储架构之 页 cloudgamer 2008-08-21 20:47  
好深啊
re: MSSQL优化之 1.3 存储架构之 页 胡云波 2008-08-19 09:58  
数据库双机热备方式

数据库双机热备有两种典型的方式,一种是比较标准的,两台服务器通过一个共享的存储设备(一般是共享的磁盘阵列或存储区域网SAN),并且安装双机软件,实现双机热备,称为共享方式。另一种方式是通过纯软件的方式,一般称为纯软件方式或镜像方式(Mirror)。
对于共享方式,数据库放在共享的存储设备上。当一台服务器提供服务时,直接在存储设备上进行读写。而当系统切换后,另一台服务器也同样读取该存储设备上的数据。

对于纯软件的方式,通过镜像软件,将数据可以实时复制到另一台服务器上,这样同样的数据就在两台服务器上各存在一份,如果一台服务器出现故障,可以及时切换到另一台服务器。
三、纯软件方式优点

1、避免了磁盘阵列的单点故障:对于双机热备,本身即是防范由于单个设备的故障导致服务中断,但磁盘阵列恰恰又形成了一个新的单点。(比如,服务器的可靠系数是99.9%, 磁盘阵列的可靠系数是99.95%,则纯软双机的可靠系数是1-99.9%x99.9%=99.99%,而基于磁盘阵列的双机热备系统的可靠系数则会是略低于99.95%

2、节约投资:不需购买昂贵的磁盘阵列。

3、不受距离的限制:两台服务器不需受SCSI电缆的长度限制(光纤通道的磁盘阵列也不受距离限制,但投资会大得多)。这样,可以更灵活地部署服务器,包括通过物理位置的距离来提高安全性。
纯软件方式以前应用得较少,一方面是由于当时市场上比较流行的双机软件不支持纯软件方式,另一方面是由于少数支持纯软件方式的产品其可靠性不太令人放心。但随着NEC,pluswellt这样的大牌厂商的产品进入市场,应该说纯软件方式将逐渐成为一种方向。
从方案选择的角度,建议在进行双机热备时,如果投资充裕、数据量大(1T以上),可以采用共享的存储设备(如磁盘阵列)的方式,但应尽量选择高可靠性(如著名品牌的)设备,并且考虑选择双控制器的方案。否则,则更好的选择是纯软件方式。当然,这时就一定要选择成熟的、大厂商的经过考验的产品。
@BoyLee
哈哈,不是!
@深蓝
前几个页都是数据库元数据页,存储数据库相关的一些描述性信息,比如涉及空间分配的PFS,IAM,GAM,SGAM..............具体的顺序我实在是忘记了,不过参考资料上有,你搜搜能出来。
还有其他的就是预留给比如此数据库的架构,角色,程序集,系统表,视图,等的相关信息了。具体是不是以页的形式存储我还真不知道。也没看见有书本或者大牛提到过。
@WCF群组博客
谢谢。不过没有见过你说的那本书。
@PerfectDesign
请教一个问题,我现在新建一个数据库,默认3M,那么这3M的mdf文件他里面是怎么分配的啊?
换句话说,这个3M的mdf文件前几K是什么,接下来又是什么,然后又是什么……最后几个字节是什么?一直对mdf文件的结构感兴趣,但是不知道其中的细节 :(
牛翔吗?
re: MSSQL优化教程之1.4 其他几种类型的页面 WCF群组博客 2008-08-18 19:32  
@PerfectDesign
随便问一下,
你有“The Guru's Guide to SQL Server Architecture and Internals”
这本E书吗?有的话发我一份,谢谢啦
re: MSSQL优化教程之1.4 其他几种类型的页面 WCF群组博客 2008-08-18 19:27  
@PerfectDesign
不错,支持这个系列,加油!
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 19:00  
@周强
是啊,但是我上面给深蓝的例子是char的,不是varchar的。
但是sql2000以前也是可以跨页的,比如text类型的,在2005里面推荐新的选择是varchar(max).
re: MSSQL优化之 1.3 存储架构之 页 周强 2008-08-18 18:30  
@PerfectDesign
在SQL2005中,引入了一种行溢出页面。不仅varchar(max)可以跨页。其它任何可变长数据类型的字段都可以实现跨页(varchar,nvarchar,varbinary,sqlvariant)。
例如你可以在SQL2005中建立如下形式的表:

CREATE TABLES test
(
a varchar(4000),
b varchar(4000),
c varchar(4000)
)

在SQL7.0以前版本中,运行这个语句时会报错;SQL2000中会弹出一个警告:记录长度超过最大值,插入和更新可能会失败;在SQL2005中,这个语句能成功运行,并且能往里面插入相应的数据。

但有一点要注意,在建立如上类型的表时,上表中的列都是可变长度列,如果有定长列,所有定长列的总长度依然不能超过8060
@Tom.Lee
哈哈,跟他是有点沾亲带故
你堂兄?
假的吧。。。
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 17:17  
@周强
really?那存储超过8060大小的字段是怎么存储的呢?
只是在2005下面,varchar(max)型的数据可以实现跨页吧~
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 17:15  
@巫云
看来只是我写得不好了
re: MSSQL优化之 1.3 存储架构之 页 周强 2008-08-18 17:14  
@PerfectDesign
sql 2000及以前版本数据行不能跨页、以后版本可以跨页了
re: MSSQL优化之 1.3 存储架构之 页 巫云 2008-08-18 17:12  
好高深的技术啊……
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 15:29  
@深蓝
你可以尝试一下这段话:
CREATE TABLE dbo.Table_1
(
char1 nchar(4000) NOT NULL,
char2 nchar(4000) NOT NULL,
char3 nchar(4000) NOT NULL
) ON [PRIMARY]
GO

就能明白8060 的限制了。
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 15:26  
@深蓝
你看到的8060,是对于一个页面,只能最多容纳一个行字节长度为8060的行,如果超过这个行大小限制,是不可以的(lob数据除外)
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 15:24  
@亚历山大同志
呵呵,您还不能一言概之,普通数据行是不能跨页,但是varchar(max),nvarchar(max)和text等lob数据是能够跨页的,他维护一个指针指向新页面地址就行。
re: MSSQL优化之 1.3 存储架构之 页 亚历山大同志 2008-08-18 14:36  
@金色海洋(jyk)
一言概之:行不能跨页
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 11:29  
@roberto
这个具体的细节翻了翻几个牛人的博客,似乎还没有人提到............
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 11:28  
另外的ghost记录的好处就是能够更好的使用键范围锁。
re: MSSQL优化之 1.3 存储架构之 页 roberto 2008-08-18 10:37  
@PerfectDesign

呵呵,多谢你的提示啊,我的表述还是很不清楚,我说的就是你说的这个:

“4 ghost-cleanup清理之后
该记录所占槽位在槽位队列被删除,但该记录的内容依然在数据页里,直到下次该数据页被使用 ”

之后再插入时发生的情况。(ghost列只能在ghost-cleanup清理之前叫ghost,做完ghost-cleanup清理之后,记录内容还在,但是利用dbcc page查看不到内容,slot table无信息似乎就不能叫ghost列了?)。
re: 再论一下in,exists,join 坏人 2008-08-18 10:18  
mark
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 10:17  
@roberto
找到一段关于ghost record的介绍,你可以看看
关于ghost-cleanup:
1 什么是ghost record?
在有聚集索引的表上刚删除的一条记录,该记录不被立刻从数据页删除,而是被标记为deleted或ghosted
注:该机制的优点:使删除或可能的回滚操作更快
2 ghost record产生过程
当删除一条记录时,同时该记录被标记为ghost record,PFS中该记录所在的页被标记为有ghost record,同时所在数据库的状态也被标记为有ghost record需清理
3 何时ghost-cleanup开始工作
首先,在删除记录的事务提交后,ghost-cleanup才能对之工作,原因不说了(锁定有关)
其次,ghost-cleanup后台线程每5秒运行一次,依次查看数据库是否有ghost record需清理的标记,有则清理之,否则查看下一数据库
或者被删除记录的表在下一次被扫描操作时,如果该表仍有ghost record,则ghost-cleanup将清理之
注:每次ghost-cleanup清理的页数限制为10个
4 ghost-cleanup清理之后
该记录所占槽位在槽位队列被删除,但该记录的内容依然在数据页里,直到下次该数据页被使用
re: MSSQL优化之 1.3 存储架构之 页 roberto 2008-08-18 09:48  
@PerfectDesign

关于Slot table,我试验的结果实际上也并不是完全的“使得当逻辑顺序发生变化的时候,物理位置却不需要相应的变化”。

当一个页面中存在ghost列,也就是数据被删除之后,如果此时插入数据,数据会自动插在最后一列(当然是满足填充因子)如果最后一列后面的空间不够,那么页面上的列就会重新按照逻辑顺序剔除掉ghost列,从97字节开始顺序写数据列。
re: MSSQL优化之 1.3 存储架构之 页 坏人 2008-08-18 09:28  
讲得不错,简单介绍下lob数据的存储吧?期待下文:D
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-18 08:36  
@深蓝
你可以测试一下,新建一个表,然后就一个int类型的字段,然后插入1万条记录,看他占用多少个页面,就会得出你自己的推断了。
re: MSSQL优化之 1.3 存储架构之 页 深蓝 2008-08-18 04:11  
原来我一直错误理解了这么久,今天不看楼主的文章,我不知道何年何月才知道我理解错了。谢谢楼主指正。
re: MSSQL优化之 1.3 存储架构之 页 深蓝 2008-08-18 00:04  
那看来是我理解错了,我做做实验试一下。
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-17 23:50  
不一定是8060,这个只是个平均量,一个页面锁能容纳的行字节数,还由他的行数和每行的所占字节数以及变长字段的因素决定的
re: MSSQL优化之 1.3 存储架构之 页 深蓝 2008-08-17 23:48  
@PerfectDesign
数据页中规定的数据行是8060字节,这个可以翻一下MSDN,除去了8060字节,剩下的32字节不就是行偏移矩阵的字节了吗?
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-17 23:41  
呵呵
re: MSSQL优化之 1.3 存储架构之 页 WCF群组博客 2008-08-17 23:39  
@PerfectDesign"
兄弟啊,
我说:数据行中变长字段(如varchar)的偏移量上.
变长字段不是指列难道指行啊,呵呵
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-17 23:29  
@WCF群组博客
"数据行中的偏移量"这个概念在用在数据行中变长字段(如varchar)的偏移量上.

您说的是列偏移矩阵了,而不是行偏移矩阵。
re: MSSQL优化之 1.3 存储架构之 页 WCF群组博客 2008-08-17 23:24  
@ 深蓝
"36个字节的行偏移..."
你这个36怎么来的啊????
"行偏移矩阵"是存放的“相对页头的偏移量”,这话没有不对,
"数据行中的偏移量"这个概念在用在数据行中变长字段(如varchar)的偏移量上.
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-17 23:17  
页头96个字节是固定的,slottable是不固定的
一般情况下,数据可占用的字节是8096个,并不是说一个页只能存放18行数据。
可以来算一下,页头是96个字节,那么9192-96 = 8096,然后设置A参数为总行数,如果一行数据占用10个字节,那么 10XA+A×2 = 8096 ,这个函数解出来,A=674.66行。这个应该是一个页面如果容纳的行数据都是定长的10字节的话,那么能容纳674行数据。
关于行的占用字节大小,会在下一节讲述。
re: MSSQL优化之 1.3 存储架构之 页 深蓝 2008-08-17 23:07  
@金色海洋(jyk)
@PerfectDesign
一个页中的数据行只有8060个字节,在一个页中可以存放多条记录。这些记录在页中并不一定是连续的,所以使用了36个字节的行偏移矩阵来存放每条记录在数据行中的偏移量,每2个字节表示一行数据的偏移量,那么这样算来的话好像一个页中最多只能存放36/2=18行数据。(一页最多18行我没有看到官方说过,不知道对不对。)
PerfectDesign说行偏移矩阵是存放的“相对页头的偏移量”这里我觉得不对哈,应该是在数据行中的偏移量吧。
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-17 23:05  
@金色海洋(jyk)
没有这样说过啊~
一条记录只能放在一个页面里面,不可以跨页面存放(lob除外)
一个页面可以容纳多个记录的
re: MSSQL优化之 1.3 存储架构之 页 金色海洋(jyk) 2008-08-17 22:56  
是不 说一条记录会放在一个页里面?如果一条记录只有一个int字段是不是也要独占一个页?
re: MSSQL优化之 1.3 存储架构之 页 PerfectDesign 2008-08-17 22:40  
@姜敏
肯定是我的表述不好,文笔太差,
re: MSSQL优化之 1.3 存储架构之 页 姜敏 2008-08-17 22:33  
太深,没看懂,哈哈.
re: 再论一下in,exists,join aierong 2008-08-13 17:25  
优化器会自动根据情况来采取最佳方式
sql2088
没用过
共7页: 1 2 3 4 5 6 7 下一页