law's homepage
===========================================================
===========================================================

在使用SQL Server几年、熟悉各种操作之后,就会对原理性的知识或多或少出现一些疑问,比如:

SQL Server如何进行空间分配?

索引为什么能够提高查询速度?

一个SQL命令产生了了哪些重做数据?

重做日志的LSN有什么具体含义吗?

经过查找资料(如联机丛书),可能会找到有关问题的一些信息,如上述几个问题可能会有下面的答案:SQL Server使用GAMSGAM数据页中的位图数据管理空间分配;索引以B树结构存储索引数据,叶节点存储的是索引键值及所在记录的物理地址;SQL Server在重做日志中记录SQL命令修改的数据;LSN用于描述一个操作发生的先后顺序。

过一段时间,你会对这些答案不满意,因为这些说法只是原理性的解释,并未看到实际的位图数据、索引数据以及重做数据,而这里对LSN的解释,会让人以为LSN就是对应操作发生的时间。很多时候,SQL Server联机丛书及市面上的一些相关书籍就是采用这种方式解释各种原理性的知识,并未给出查看这些实际数据的方法。

所谓“眼见为实”,一个结论如果自己不能亲自动手用实验验证,很难说对其彻底理解,它的正确性总是让人不放心,当数据库出现问题时,可能会束手无策。以笔者的经验,一个原理如果自己亲自验证一下,有时确实会得到和流行说法,甚至和联机丛书不一样的结论。比如下面的结论:“若数据库设置为大容量日志恢复模式,则大容量操作会以最少方式记录重做数据”,这是很多人很熟悉的一个结论,其实这个结论是不完整的。“insert into select”命令是一个典型的大容量操作,如果考查这个命令产生的重做数据,你会发现SQL Server并未使用最少日志方式记录其重做数据,若使其真的以最少日志方式记录重做数据,背后其实还有很多条件限制。

解决这种SQL Server底层原理性问题,找到可以自己动手验证的方法,如果周围没有人可以请教,一般还有下面两个途径:参考Kalen Delaney的名著《SQL Server技术内幕》系列书籍或Ken Henderson的同类书籍,上网搜索或到相关论坛提问。

但很多问题用上面方法都找不到令人满意的答案,如重做记录LSN的含义以及上面提到的大容量操作问题。在这种情况下,只有自己慢慢摸索,构造合适的实验,才能得到满意的答案。本书是作者十几年来,在学习SQL Server过程中,解决所遇到的各种问题的一个整理,每个结论后面都有详细的实验过程来验证它的正确性,从而让读者可以“眼见为实”,在写作过程中,也纠正了自己的一些错误认识,本书非常适合那些和笔者一样,困扰于底层原理,迷恋于研究、验证底层原理的读者。

本书所使用的SQL Server版本为:

Microsoft SQL Server 2008 (SP1) - 10.0.2714.0 (Intel X86)

Enterprise Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3, v.5973)

在写作本书过程中,曹业勋(网名shuiniu)审阅了部分书稿,并就有关内容进行了深入讨论,作者还就某些具体问题通过电子邮件请教了SQL Server开发团队的Sangeetha ShekarSunil Agarwal,以及SQL Server存储引擎开发团队前负责人Paul S. Randal,特此致谢。

本书的写作用了整一年的时间,相对本书的内容来说,还是很仓促的,有些内容还有待深入,有些实验及结论可能考虑得不够完整,甚至存在错误,欢迎读者给予指正。

作者电子邮件:law_mail@126.com


lawzjf 发表于:2011.12.20 21:43 ::分类: ( SQL Server ) ::阅读:(38次) :: 评论 (0)
===========================================================
===========================================================

有关权限的错误:修改/var/tmp/.oracle的权限为oracle用户可写。

有关lost contact的错误:/etc/hosts文件中的主机名有问题。

broken pipe的问题:listener.log文件达到了2G的限制。

如果是客户端连不上:考虑是否因为防火墙,尝试关掉iptables。


lawzjf 发表于:2011.05.18 10:40 ::分类: ( 小企鹅 ) ::阅读:(187次) :: 评论 (0)
===========================================================
===========================================================
南京条约本以鸦片而起,但其十三款条文对鸦片只字未提。
实际情况是:《南京条约》没有写上禁止鸦片进口的条约,外国商人利用这一点,加强了进行非法鸦片贸易的活动。中国政府打输了这场战争,不敢禁止这种买卖。结果,鸦片交易实际上变得毫无拘束,鸦片进口从1842年的33000箱上升到1848年的46000箱和1850年的52929箱。
自此,以后的近代史著作中对鸦片不再关注。
--以上摘自徐中约《中国近代史》上册,186页,225页。
鸦片的毒害是否并不像史书中描写的那么巨大?
lawzjf 发表于:2011.04.25 10:20 ::分类: ( 杂谈 ) ::阅读:(183次) :: 评论 (0)
===========================================================
===========================================================

删除一个目录下的文件后,依然可以看到其名称和inode编号,说明目录文件中对应这些文件的信息并未删除,这与之前的验证相符。以下是验证过程:

[root@law law]# pwd
/root/law
[root@law law]# ls -a
. ..
[root@law law]# touch a b c
[root@law law]# ls -i
131056 a 131057 b 131058 c

[root@law law]# rm -rf *
[root@law law]# ls -i
[root@law law]# debugfs /dev/sda1
debugfs 1.35 (28-Feb-2004)
debugfs: cd /root/law
debugfs: ls -d 130572 (12) . 130049 (4084) .. <131056> (12) a <131057> (12) b<131058> (4048) c
debugfs: ls -dl 130572 40755 (2) 0 0 4096 12-Apr-2011 11:03 .
130049 40757 (2) 0 0 4096 12-Apr-2011 10:41 ..
< 0> 0 (1) 0 0 0 a
< 0> 0 (1) 0 0 0 b
< 0> 0 (1) 0 0 0 c

以上结果中,inode编号之后、圆括号中的数值暂时不知其意。


lawzjf 发表于:2011.04.12 11:06 ::分类: ( 小企鹅 ) ::阅读:(167次) :: 评论 (0)
===========================================================
===========================================================

A hut

A few friends

To avoid superiors, patronization, infighting and competition

Thoght

============The Consolations of Philosophy

 查看全文
lawzjf 发表于:2011.04.11 12:00 ::分类: ( 杂谈 ) ::阅读:(140次) :: 评论 (0)
切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
Blog信息
网站链接...