SQL Server VS Oracle 架构下见真章51CTO博客 - AG环亚娱乐

SQL Server VS Oracle 架构下见真章51CTO博客

2019年03月30日15时08分19秒 | 作者: 云天 | 标签: 一个,能够,效劳 | 浏览: 1654

细心读了一把McGraw.Hill.Microsoft.SQL.Server.2008.Administration.for.Oracle.DBAs的第二章,颇有感受。这种方法的书应该多出,经过比照,即能够温习曾经把握的常识,又能快速学到新技术,还能知晓两者之间的差异。来看看Oracle与SQL Server在Architecture下的异同吧。

High-Level

从High-Level 的层次来看,两者是共同的。都有Instance,Database的概念。

可是database扮演的人物却大有不同。

在Oracle中,一个实例只能有一个Database,或许在RAC形式下,多个实例对应一个Database。Database中包括多个Schema,比方寄存数据字典的SYS,当然还有最常用的用户自己建的Schema。而在SQL Server中一个实例有且必有多个database(怎样感觉像数学正义,O(∩_∩)O~),至少包括system databases 和 user databases。这么看来,却是能够把Oracle里的Schema理解为SQL Server里的Database。不烦琐了,一图以蔽之。

Storage Model 存储模型

Oracle里经过TableSpace和数据文件把物理存储和逻辑存储阻隔开来。上图左面那部分咋这么了解,如同在哪见过。翻看《OCP认证考试指南全册Oracle Database 10g》第六章找到了这张图,总算是没白花88元买这本书,O(∩_∩)O~。

Filegroups 跟 Tablespaces 的概念差不多。作为SQL Server存储结构的老迈,Filegroups 才干不小,比方能够依据年份设置Filegroup,2009年一个,2010年一个。就如Oracle在建表时能够指定表空间相同,SQL Server相同能够指定Filegroup。

Segment 与 Index/Heap相差老远了,没得可比性。

SQL Server 里8个page组成一个Extent,Extent又可分为两种类型,一致区(uniform)或 混合区(mixed)。Oracle里的Extent就没整得这么杂乱了。什么是一致区(uniform)或 混合区(mixed)?网上有这么一段:http://hi.baidu.com/%C3%FA%D3%E3/blog/item/ffe2c10b49773ea32eddd439.html

在一个一致区中,悉数8个页都是来自同一个类似表或是索引之类的目标;在一个混合区中,页能够从属于不同的目标。在创立表或是索引时,一般都是从混合区平分配页。在表或索引的数据增长到满足填满8个或更多页的时分,就会主动的切换到一致区中去。

再略微阐明下,当表刚开端被创立时,从混合区拿个8K的页给它用,这个表渐渐长大,从混合区要了第二个,第三个。。。直到第八个。估量这时分,SQL Server被这个表弄烦了,咆哮一声,从第九个页开端,每次给你一个uniform,少来烦我了。混合区能够有许多小目标,一致区就只针对一个Object了。

Block 和Pagesde 也是截然不同。SQL Server 里的Page固定为8K。Oracle能够经过参数修正Block。SQL Server 里增加数据文件后,都会赋予它一个仅有的文件ID。关于每一个数据文件,空间被分割成一个个8K的页,从0开端符号。

别看图上第一个文件分出了511页,实践上你不能具有悉数的页。为啥,被SQL Server 这个地主抽出了几页。第0页永久被用来记载文件头,第1页又称PFS,即Page Free Space,用来记载还剩多少空间。后边的几页的也是各有用处,有图为证:

不由联想到当今的房地产,暗叹一声,这SQL Server的“得页率”咋搞得跟当今的“得房率”相同。看看都是些啥用了我名贵的页。

Physical Implementation 物理完成

SQL Server的一个Database一般由三种类型文件组成:primary,secondary,log。

Transaction Log Files 业务日志文件

SQL Server 的transaction log类似于Oracle的redo log/undo 表空间。每个Database都有自己的 transaction log,因而就具有自我康复才干。类似于Oracle的SCN(System Change Numbers) 体系改变号,SQL Server 也整出个LSN,日志序列号。每条记载都包括相关的transaction ID,每逢反常发作时,SQL Server 就会依据这些记载来回滚。

在Oracle里边,一般至少需求两个 redo 日志文件,实践用到的或许更多。但在SQL Server里边一个Transaction Log 就够用了。由于它内部又分了许多虚拟日志文件,称之为VLF。

在Oracle里,Redo文件能够有三种状况,当时在用是CURRENT,要求待命随时预备康复的ACTIVE,不再用来做康复,没有使用价值就成了INACTIVE。SQL Server 也有类似概念。严酷的Min LSN点,过了这个点你便是社会栋梁,还能够用来做回滚或康复。可是不要认为你费尽九牛二虎之力挤过了那个点就能够无忧无虑了。长江后浪推前浪,前浪死在沙滩(Min LSN)上。Min LSN是会跟着 transaction 事情不断前移的。

 

 

 

再来说说康复形式吧。Oracle有NOARCHIVELOG,SQL Server有类似的SIMPLE。在SIMPLE形式下,日志越来越多,空间不行用了怎样办?不是还有之前没挤过Min LSN独木桥的兄弟嘛?不知恩义还不会,Truncated掉。

SQL Server 有FULL 和BULK_LOGGED形式来对应Oracle的ARCHIVELOG。这种方法略微人道一点,先给你备份一下,再咔嚓掉。O(∩_∩)O~,先摸摸你的头,再温柔一刀。

Database Snapshots 数据库快照

SQL Server 也有快照查询。下图展现了快照查询的原理。场景一,假如源数据没有修正,直接回来源数据查询成果。场景二,源数据里某条记载被修正了,在Update源数据的一起,会仿制本来的记载,插到数据库快照。场景三,再来查询(快照查询语法),就会回来那时那刻的快照记载。

Inside the Instance 深度解剖

SQL Server首要由四大块组成:the protocol layer,the relational engine, the storage engine, and SQLOS.

 

Protocol Layer 协议层,望文生义,首要便是经过各种协议来接纳客户端恳求,最常用的应该是TCP/IP了。

Relational Engine 又称query processor,从协议层接纳到T-SQL事情后,开端解析,优化,最终履行。跟Oracle也挺类似的,一个SQL 句子过来后,过五关斩六将(parser, optimizer, row source,generator)才干最终抵达SQL execution engine。

Storage Engine,这一层开端跟数据文件打交道,缓存和业务操控也在这一层引进。Transaction manager便是用来确保ACID(数据库业务正确履行的四个基本要素),而且跟Oracle相同用的都是Write ahead logging方法。

SQLOS,引证百科:将操作体系从SQL Server引擎中笼统出来,并供给效劳以最大极限使用这些架构,一起保存现有架构。SQLOS对效劳器的其他部分供给用户级的操作体系效劳,这便是“SQLOS”称号的由来。SQL Server引擎中的组件使用SQLOS供给的效劳,来调度单个或许多个使命、分配内存等。

Background Processes 后台进程

Oracle里边有许多后台进程,比方SMON,PMON,RECO,CKPT,DBWn等等。到了SQL Server里,也有一堆后台线程,例如Lazywriter,Checkpoint,Log writer,Deadlock/Lock monitor,Scheduler monitor,Resource monitor等等。

Client/Server Communication 客户端/效劳器通讯

先来温习下Oracle的通讯方法。

客户端需求装置Oracle Net client。Oracle Net foundation layer先把恳求打包成Oracle专有格局,Oracle Protocol Support layer把恳求再度封装以TCP/IP或Named Pipes的方法发到效劳器端。当效劳器端回来恳求成果后,操作则刚好相反,两次解析获得成果。

效劳器端有个Listener,干什么用的(⊙o⊙)?我戏称为一次性用品,用来初始化衔接,当衔接建立起来后就没它什么事了。

再来看SQL Server。类似于Oracle client,SQL Server有SNAC (SQL Server Native Client),支撑以OLE DB,ODBC,或许ADO.NET的方法衔接到效劳器。恳求相同也会被再封装一下,自然是Microsoft的格局,叫什么TDS (Tabular Data Stream)。相同与Oracle类似,有个SQL Server Network Interface (SNI) protocol 层来打包和解包TDS数据包。

SQL Server就没有 Listener 的概念了,而是经过TDS Endpoint来侦听各种协议过来的客户端恳求。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章