摘要:本文深入探讨了 SQL Server 体系结构的工作原理。其中介绍了数据库引擎的增强功能及其使用技巧,并提供了相关信息的链接。深入了解 SQL Server 的引擎有助于数据库管理员(数据库系统工程师)在设计、构建或改进数据库系统时充分利用 SQL Server 的优势。虽然本文主要面向数据库专业人士,但也可用于教学或营销目的。
本文描述 Microsoft® SQL Server™ 2000 中新增的存储引擎功能,并提供相关的使用技巧,同时探讨存储引擎的工作原理。初步掌握存储引擎的工作原理可使您最大限度地发挥 SQL Server 的性能。
当今,人们的注意力集中在应用程序的高可扩展性方面。数据库的设计和实施周期不断缩短,而且由于开发需求的不断变更以及产品使用的增长,又使得数据库在不断地演变发展。为满足可扩展性、可用性和易于使用等方面的要求,需要有一种具有应变能力和灵活性的数据存储引擎。
SQL Server 2000 的不同版本可支持不同规模的系统,其范围从用于 Pocket PC 的小型移动系统到运行在群集 Windows® 2000 Datacenter Server 上容量达数 TB 的高可用性事务处理或决策支持系统。所有这些系统都满足使命关键的业务系统所要求的灵活性、安全性和可靠性要求。
由于存储引擎操作的智能化和自动化,因而可以在各种用途和规模的项目中部署 SQL Server 2000 应用程序。高度完善的体系结构改善了性能、可用性和可伸缩性。
由于在与物理文件进行交互时采用了新的算法,可靠性和并发能力得到了增强。这些算法减轻了日常维护工作,使您不必再运行数据库控制台命令 (DBCC)。然而,DBCC 仍旧可以使用,并且新增的 DBCC CHECK 命令的运行不会干扰联机处理工作。
存储子系统(由物理数据库文件及其在磁盘上的布局组成)既支持小型数据库,也支持超大型数据库。SQL Server 当前可支持最高达 64 GB 物理内存 (RAM) 和 32 颗处理器。
增强的管理功能可帮助数据库管理员 (DBA) 实现服务器的自动管理和集中管理。这也使得对远程服务器和应用程序的维护变得容易,DBA 无需访问每个站点。由复杂算法管理的服务器配置可动态对服务器使用方案的变化作出反应,从而使 DBA 可以将精力集中在数据库管理和优化等任务上。
SQL Server 2000 的关系数据库服务器包括两个主要部分:关系引擎和存储引擎。两个引擎独立工作,它们通过本地数据访问组件(如 OLE DB)进行交互。关系引擎提供访问存储引擎的接口,而存储引擎由与基本数据库存储组件和功能进行交互的服务构成。
存储引擎的主要任务包括:
SQL Server 2000 中的存储引擎提供概念简单而实际操作比较灵活的新增功能,同时减少了详细规划容量和优化性能的工作。SQL Server 2000 可以对其环境作出反应,并准确而快速地适应数据库使用上的变化。这种技术上的突破已将数据库管理的重点转移到作为服务的数据简化上。SQL Server 2000 DBA 可以将注意力集中到设计一个可对数据流和数据使用作出响应的系统上,而不再需要将时间浪费在优化个别参数上。
SQL Server 2000 中的变化建立在体系结构的增强上。这种增强是在 SQL Server 7.0 中引入的,其目的是为后来的改进和创新提供基础。存储引擎小组的主要目的是减少花在定期优化服务器上的时间和精力。由于绝大多数的调优参数设置是基于数据库使用的,所以引擎使用自适应算法动态调整这些设置,使其适合数据库环境。调优参数现在可以按这种方式自动调整,而在早期版本中,它们需要不断调整和测试。您仍可以手动调整调优功能,但 SQL Server 2000 可以完成更多的工作。只有很少的 SQL Server 客户才需要对调优参数进行调整;这种调整工作需要进行仔细的测试,并且需要经验丰富的数据库管理员进行监督。
下表总结了 SQL Server 2000 存储引擎的主要增强功能。本文的后面将对这些内容进行详细阐述。
功能 | 描述及益处 |
---|---|
应用程序锁定管理器 | 如果需要控制对应用程序定义的资源(如表单)的并发访问,新增的存储过程允许您使用 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 锁定提示。它可用于明确调用互斥的、事务级别的页或表锁。 |