本译文采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议发布,转载请保留此信息
译者:马齿苋 | 链接:http://www.dbabeta.com/2010/oracle-sql-server-comparison-iii.html
作者:Sadequl Hussain | 原文:http://www.sql-server-performance.com/articles/dba/oracle_sql_server_comparison_iii_p1.aspx

启动与配置参数

在SQL Server安装的时候,同时也会往Windows注册表里面添加一些记录,这些注册表键值指定了实例所需要的各种参数。比如,有的注册表键值指定了错误日志的保存目录,另外的指定了默认的备份目录等等。SQL Server在运行的过程中会使用到这些注册表键值。另外还能给SQLSERVER.EXE指定一些启动参数,包括追踪标志(trace flags),这些附加的参数决定了实例启动之后的行为。除了注册表键值和启动参数之外,SQL Server还包括大量的内部配置参数,用于对实例进行调优。比如说“max server memory”就属于这些参数之一,它可用来调整实例所能使用的最大内存。不用说了,这些系统配置参数也是保存在系统元数据表(system metadata tables)中的。

下面例举的方法都可以用来修改SQL Server配置参数:

  * 使用系统存储过程sp_configure
  * 使用Management Studio或是Enterprise Manager的服务器属性对话框
  * 使用各种层面(facets)组件(2008)或外围应用配置器(Surface Area Configuration)工具(2005)

Oracle的配置参数来自两个对于启动实例和打开数据库都是非常重要的操作系统文件,第一个文件是初始化参数文件 (initialisation parameter file),第二个是控制文件(control file)。初始化参数文件所包含的参数决定怎么样创建实例。记住Oracle实例只包含内存结构和后台进程。参数文件包含的值决定了Oracle要给自己分配多少内存,可以同时有多少用户可以连接到数据库等等。Oracle在读取到这个文件之后才会在内存中建立数据库实例。

参数文件可以是一个纯文本的ASCII文件或者是二进制文件,纯文本参数文件称为pfile,名字为init.ora,其中的SID就是实例的SID了(参照“实例名与SID”小节)。二进制参数文件称为spfile,名字为spfile.ora。纯文本参数文件和二进制参数文件之间最大的差别就是当使用pfile的时候,Oracle只在实例启动的时候读取一次,后续对pfile的修改都要等到实例重启之后才能生效。而使用spfile时,Oracle能在实例运行期间修改其内容。在本文写作之时,Oracle 11g已经有超过250个的初始化参数了,不过还好,作为DBA你是不需要挨个的去设置这些参数的,你只需要配置那么十来个参数就可以保证实例正常使用了,大多数参数值都会使用Oracle默认的设定值。你可以通过Oracle Enterprise Manager Database Control(稍后细说)或者是手工的修改这些初始化参数,手工方法即时通过ALTER SYSTEM命令来修改spfile,使用pfile时,DBA可以直接使用文本编辑器进行修改。(译注:不管是使用pfile还是spfile,都能够使用ALTER SYSTEM命令修改这些参数,只是使用pfile时这些参数的修改是无法保存下来的,同时能修改的也只是一些动态的参数,而使用spfile则可以将这些修改保存到spfile文件中永久保留下来。)

控制文件是实例启动之后Oracle第二个要读取的文件。控制文件所存放的位置也是由参数文件中的参数来指定的。控制文件是一个很小的二进制文件,它包含了与数据库相关的关键的信息,其中包括数据文件和重做日志文件的名字与位置、表空间信息以及检查点信息,Oracle使用控制文件来找到数据文件,然后才能打开供用户访问。控制文件损坏或者是不存在的话数据库都是无法打开的。考虑到控制文件的重要性,通常的做法都是设置多份相同的控制文件拷贝以保证容错能力,多路控制文件中的所有控制文件都会同时的被更新。

最后,第三种Oracle数据库要使用的文件就是密码文件(password file)了,这个文件保存了拥有启动和关闭数据库权限的用户帐户的用户名和密码,稍后会细说。


更改系统元数据和参数配置

不管是Oracle还是SQL Server,系统元数据表、文件、注册表键值或是配置参数都会在用户或者是应用访问数据库并作出变更的时候由数据库引擎自动做出相应的修改。比如说,当在数据库中新建表时,数据库引擎会在系统表中增加相应的行;当DBA修改参数值时,更新也会被捕捉并更新到表中或是文件中。

在SQL Server中,更改系统元数据的操作包括:

  * DDL操作:创建、修改、删除数据库或者数据库对象。
  * 修改系统配置参数(不管是用sp_configure或是GUI)。
  * DCL(数据控制语言,Data Control Lanuage)操作:登陆、认证、证书、代理或者是新建、更新、删除数据库用户。
  * SQL Server配置管理器:当SQL Server或是代理服务数据变更。
  * 系统级变更:创建、修改或者删除连接服务器(link server)、端点(end-point)、Service Broker组件。

在Oracle中,更改数据字典、控制文件或是参数文件的操作包括:

  * DDL操作:创建、更改、删除表空间、数据文件或者是数据库对象。
  * DCL操作:创建、更改、删除用户账户;给用户授予角色、权限。
  * 使用ALTER SYSTEM命令或者是用Enterprise Manager Database Control修改初始化参数。
  * 用Enterprise Manager Database Control或者是ALTER DATABASE命令修改数据库的状态。
  * 备份配置或执行备份操作。

最后,SQL Server中可以使用sp_configure存储过程或是服务器属性对话框(仅部分参数)查看配置参数。
1 sp_configure 'max server memory'

在Oracle中,可以通过执行SHOW PARAMETER命令或是使用Enterprise Manager Database Control查看初始化参数。
1 show parameter sga_target;

动态视图

除了数据字典视图之外,Oracle还提供大量称为动态性能视图(Dynamic Performance Views)的视图,这些视图可以用来查看实例的内存结构或者是控制文件的内容。与数据字典视图不同的是,动态性能视图的内容不是来自于静态的数据表,而是来自服务器内存中实时的数据。这些数据在实例启动的时候开始积累,贯穿于整个实例的生命周期之内,在实例重启或是关闭的时候消失。另外一个不同点就是DBA只能在数据库打开并在线的时候才能查看数据字典视图,而动态性能在实例启动运行之后就能够查看了。部分的动态性能视图只能在数据库MOUNT之后才能查看。这些视图常被称为V$视图,因为它们的名字都是以V$开头的。例如,下面的查询可以显示Oracle实例使用的初始化参数:
1 SELECT NAME, DESCRIPTION, VALUE FROM v$system_parameter;

下面的查询显示当前会话相关的信息:
1 SELECT USERNAME, COMMAND, SCHEMANAME, OSUSER, MACHINE FROM V$SESSION;

在SQL Server 2005中,动态管理视图(Dynamic Management Views, DMV)也同样可以显示实例内存中大量信息。和Oracle动态性能视图一样,DMV也不存在对应的数据表,也在系统重启之后会重新记录。DMV属于SYS架构 (schema),名字以”dm_”开头,下面的代码显示SQL Server实例当前的会话情况:
1 SELECT * FROM sys.dm_exec_requests

存储的物理和逻辑结构

不管是SQL Server的数据库还是Oracle的表空间,它们的物理形态都是存在于主机操作系统下的一系列文件。存在于数据库中的表、视图、索引之类的对象也只有数据库引擎才能识别,这些逻辑对象在物理文件中都是按照一定格式排列,且能被数据库存储引擎所读取。不必说的是,这些逻辑对象和物理文件的内容也是数据库引擎所维护的。

就所涉及到页或者区这方面,SQL Server一直以来都变化不大。数据库页(database page)是SQL Server存储分配和I/O操作的最小单位,一个页大小为8KB。在一个页中,页头占96字节,页头包含了诸如页类型、剩余空间之类的信息。页头之后就是存储的数据行了,跟着的是一些空闲的空间。在页最后是行偏移部分,页中每个数据行都会在行偏移部分有条记录,它记录的是每行开头相对于页的起始点的偏移量。

SQL Server中不同类型的页有着不同的功能。一般来说数据行包含在数据页中,索引记录存储在索引页中,诸如xml、image、text、 varchar(max)或nvarchar(max)之类的特殊类型存储在image或是text之类的特殊页中。当中还有一些像GAM、IAM、 PFS之类