摘要:本文深入探讨了 SQL Server 体系结构的工作原理。其中介绍了数据库引擎的增强功能及其使用技巧,并提供了相关信息的链接。深入了解 SQL Server 的引擎有助于数据库管理员(数据库系统工程师)在设计、构建或改进数据库系统时充分利用 SQL Server 的优势。虽然本文主要面向数据库专业人士,但也可用于教学或营销目的。
摘要:本文深入探讨了 SQL Server 体系结构的工作原理。其中介绍了数据库引擎的增强功能及其使用技巧,并提供了相关信息的链接。深入了解 SQL Server 的引擎有助于数据库管理员(数据库系统工程师)在设计、构建或改进数据库系统时充分利用 SQL Server 的优势。虽然本文主要面向数据库专业人士,但也可用于教学或营销目的。
下在介绍:功能、描述及益处
应用程序锁定管理器
如果需要控制对应用程序定义的资源(如表单)的并发访问,新增的存储过程允许您使用 SQL Server 的应用程序锁定管理器锁定这些资源。
数据库控制台命令 (DBCC)
DBCC CHECK 命令可以在联机处理过程中运行,且不会中断更新。新增的功能允许校验物理页的一致性,以检测硬件引起的错误。在 SQL Server 2000 企业版中,DBCC 可以在多个处理器上以并行方式运行。
数据库选项
所有的数据库选项都可使用 ALTER DATABASE 进行修改。此功能简化了管理工作。
差异备份
在 SQL Server 2000 中,由于改进后的功能可以在更广的层次上跟踪数据库的更改,差异备份的速度更快。
动态调优
通过使用动态自适应算法,服务器可以自动调整以前是静态不变的配置设置。管理控制仍可用于管理系统范围的资源,但以后您不必使用它们。手动设置参数可以在它们的约束边界内动态调整。
行内文本
在包含较小且使用频繁的文本列的表中,较小的文本值可以与标准数据行存储在同一页中,而不必存储在文本值页中。如果表中包含这种被频繁访问的文本数据,此功能可减少大量磁盘 I/O 操作。
并行建立索引
在企业版中,索引建立过程自动使用为并行处理配置的所有处理器,减少了建立索引所需的时间;例如,在一台八处理器的服务器中,时间缩短到原来的六分之一。索引建立过程还可利用内存和 tempdb 中的可用资源。
预读索引
读取索引的功能得到增强,提高了扫描索引的性能。
重组索引
对 DBCC SHOWCONTIG 进行的改进提供了有关索引碎片的详细信息。新增的 DBCC 命令 INDEXDEFRAG 可联机重组索引页,且不会中断数据库服务,也不会导致数据库一致性或故障恢复方面的问题。
降序排列索引中的键列
索引中的各个键列可单独指定为升序或降序。
KILL 命令
此命令现在报告完成的进度。如果此命令正在等待另一个进程(例如回滚),则可以查看命令执行的进度。改进后的命令可以用于停止 Microsoft 分布式事务协调器 (MS DTC) 事务,而这些事务并不与特定会话相关联。
对高内存量的支持
Windows 2000 中的技术改进了使用大量内存的企业版系统的性能。通过使用 Windows 2000 的 AWE 扩展,SQL Server 2000 可至多支持 64 GB 物理内存 (RAM)。
锁定
改进后的锁定管理器可探测到其它资源(如线程和内存)的死锁情况。并发能力的改善同时也降低了死锁的发生,从而进一步加强了 SQL Server 2000 的可扩展性。
逻辑日志标记
Transact-SQL 命令可在日志中创建书签,使数据库可以恢复到书签所示的时点。此功能还可同步恢复用于同一应用程序的多个数据库。
联机索引重组
对 DBCC SHOWCONTIG 进行的改进提供了有关索引碎片的详细信息。新增的 DBCC 命令 INDEXDEFRAG 可联机重组索引页,且不会中断数据库服务,也不会导致数据库一致性或故障恢复方面的问题。
优化的预读 I/O 操作
对于扫描所涉及的每个文件,SQL Server 2000 都会同时发出多个连续的、预读读取操作。为提高性能,查询优化器在扫描表和索引时使用连续的预读 I/O 操作。
密码保护备份
可使用密码保护备份媒体和单独的备份。这样可以防止未授权的用户恢复备份并访问数据库。
故障恢复模式
通过使用故障恢复模式,可以选择数据库的日志记录级别。这样事务日志管理更加灵活。故障恢复模式可联机更改,以适应一天当中不断变化的数据库使用。
共享表扫描
在企业版中,对某个表的多次扫描可以利用其他进行中的对该表的扫描,减少了对磁盘的实际 I/O 操作。
收缩日志
收缩日志命令可在更多的情况下立即运行。即使不能立即收缩日志,SQL Server 也会提供建议性的反馈,说明在继续或完成收缩操作之前必需完成的操作。
快照备份
对第三方供应商提供的快照备份的支持进一步得到加强。快照备份采用存储技术,可以在几秒内备份或恢复整个数据库。如今,可以将这些备份与常规事务日志及差异备份相结合,为 OLTP 数据库提供完整的保护。此功能对于中型或大型数据库是非常有益的,因为在这种环境中可用性是非常重要的。
节省空间的空表和索引
SQL Server 2000 不为空表和索引分配磁盘页。SQL Server 7.0 会给空表和索引分配多达三个磁盘页。
前 n 项排序
此新功能可优化前 n 项值的检索(例如,SELECT TOP 5 * FROM tablename)。
Xlock
SQL Server 2000 提供这种新的 Transact-SQL 锁定提示。它可用于明确调用互斥的、事务级别的页或表锁。
SQL Server 2000 中增加了许多功能,这些功能使数据交互更为有效,使管理更加灵活。以下部分将详细介绍这些增强功能,并提供相关的使用技巧。
与数据进行交互
在 SQL Server 2000 中,存储引擎的功能得到增强,在与数据进行交互时可提供更好的可扩展性及性能。了解这些增强的功能有助于更有效地使用 SQL Server。
无论是通过用户界面还是自动执行的任务,数据交换都从查询开始。数据请求先被传递到关系引擎,然后关系引擎与存储引擎进行交互以获取数据,并将其传递给用户。无论是从用户还是 DBA 的角度来看,存储和关系引擎的功能是无法区分的。
更有效地读取数据
数据通过一系列事务在服务器和用户之间传递。应用程序或用户启动任务后,数据库将其传递给查询处理器进行处理,然后返回最终结果。查询处理器通过接收、解释和执行 SQL 语句来完成任务。
例如,当用户会话发出 SELECT 语句时,将会执行以下步骤:
关系引擎将语句进行编译和优化后,将其纳入执行计划(获取数据所需的一系列步骤)。然后,关系引擎运行执行计划。执行步骤包括通过存储引擎访问表和索引。
关系引擎解释执行计划,调用存储引擎以收集所需的信息。
关系引擎将存储引擎返回的所有数据组合到最终的结果集中,然后将结果集返回给用户。
为提高此过程的性能,进行了两项改进。在 SQL Server 2000 中,关系引擎将核准查询谓词的工作交由存储引擎完成,这样在该过程中这些谓词能尽早得到处理,因而提高了存储和关系引擎之间数据交换的效率。此项改进使核准查询的效率显著提高。
增强的 Top n 功能
另一项改进是存储引擎处理从结果集中选择前 n 个记录的方式。在 SQL Server 2000 中,新的 Top n 引擎将分析类似以下语句的最佳操作路径:
SELECT top 5 * from orders order by date_ordered desc
在本例中,如果必须搜索整个表,则引擎会分析数据并只跟踪高速缓存中的前 n 项数值。这种方式将大幅提高上述 SELECT 语句的性能,因为只有前 n 项值需要排序,而非整个表。
共享扫描
在 SQL Server 2000 企业版中,两个或多个查询可共享正在进行的表扫描,此项功能可改善大型 SQL Server 2000 数据库的性能。例如,当查询使用无序扫描查询一个很大的表时,高速缓存中的页面将被清空,以便为流入数据腾出空间。如果另一个查询已经开始,对同一表的第二次扫描就会使磁盘 I/O 再次检索这些页面。在频繁进行表扫描的环境中,当两个查询搜索相同的数据页时,这将导致磁盘颠簸。
图 1:共享扫描效果
优化的进程可减少由此类数据访问模式造成的磁盘 I/O 操作。对表的第一个无序扫描将从磁盘中读取数据;后续的对同一表的无序扫描不必再读取硬盘,而只需使用已在内存中的信息。参见图 1。在对同一个表同时进行多个扫描操作时,此同步过程可将性能提高至多八倍。此项改进的效果在大型决策支持查询中更加明显,因为整个表的大小远远大于高速缓存的大小)。
当查询没有更有效的执行计划时,存储引擎将使用共享扫描功能协助查询。此功能的目的是提高频繁读取大型表的性能。当查询处理器确定最佳执行计划中包含表扫描时,将调用此功能。然而,尽管可以使用查询或索引优化强制进行共享扫描时,但强制进行表扫描并不会提高性能。此时使用状态良好的索引完成同样的工作效果不会差,而且可能会更好。
并发
为了在多个用户进行数据交互的同时维护事务的一致性,存储引擎会锁定资源以管理行、页、键、键范围、索引、表和数据库的依存性。通过在更改资源时将其锁定,引擎可防止多个用户同时更改同一数据。SQL Server 中的锁可在不同粒度级别上动态应用,以选择事务所需的限制最小的锁。
在 SQL Server 2000 中,并发方面的改进进一步减少了死锁,避免了对资源不必要的锁定。例如,增强的锁定管理器可了解被竞用的其它资源(如线程和内存)。这种新的功能可帮助数据库管理员确定更广范围内的设计