SQL Server 7.0体 系 结 构 新 应 用
西 安 奥 林 岛 罗 会 涛
(Williamluo@sotech.com.cn)
----微 软SQL Server 7.0( 以 下 简 称SQL7)
自 从1998 年 底 发 布 以 来, 应 用 越 来 越 透 彻。 本 文 从 该 产 品 的 体 系 结 构 与 旧
版 本 的 改 进 方 面, 来 介 绍 其 应 用 情 况。
体 系 结 构 改 进
----SQL7 的 系 统 结 构 不 是 对 上 一 版 本
结 构 的 修 补, 而 是 一 个 全 新 的 设 计。 其 结 果 是,SQL7 的 应 用 系 统 可 以 跨 越 各
种 平 台: 从 简 单 的 个 人 系 统( 如 安 装Windows 95 的 普 通 台 式 机 和 笔 记 本 电
脑), 直 至16 个CPU、 几 个GB 内 存、 几 个TB 硬 盘 的 高 端 对 称 多 处 理 系 统。
----SQL7 系 统 结 构 的 改 进 主 要 体 现 在
以 下 几 个 方 面。
新 的 存 储 格 式: 数 据 库 的 页(Page)、 行 (Row)、
盘 区(Extent)、 数 据 文 件、 日 志 文 件 的 存 储 方 案 经 过 全 面 更 新, 不 仅 使 得 服
务 器 在 低 端 和 高 端 之 间 伸 缩 自 如, 而 且 明 显 提 高 了 性 能 和 可 管 理 性;
新 的 查 询 处 理 程 序:SQL7 的 查 询 处 理 程 序 经 过 重 新 设 计, 提 供 许 多 新 的 查
询 算 法, 例 如 索 引 交 叉、 混 合 连 接, 以 及 并 行 查 询, 这 些 都 为 海 量 数 据 库 的
快 速 查 询 提 供 了 条 件。SQL7 还 支 持SQL Server 与 其 他OLE DB 和ODBC 数 据 库
之 间 的 分 布 式 异 种 查 询 功 能 (Distributed and Heterogeneous Query)。
新 体 系 结 构 的 应 用
----新 体 系 结 构 的 具 体 应 用 如 下:
----1. 数 据 库 与 文 件
---- 为 了 提 高 可 伸 缩 性(Scalability),SQL7
简 化 了SQL Server 数 据 库 与 操 作 系 统 文 件 之 间 的 关 系。 在SQL7 中, 数 据 库
直 接 位 于 操 作 文 件 之 上, 不 再 通 过 所 谓 的 逻 辑 设 备。 现 在, 只 需 要 一 个Create
Database 语 句 就 可 以 创 建 一 个 数 据 库 及 其 所 有 的 文 件, 不 再 需 要 事 先 使
用Disk Init 语 句 创 建 所 需 的 设 备。
---- 这 种 设 计 为SQL7 对 桌 面 系 统 的 支
持 提 供 了 基 础。 现 在,SQL7 的 引 擎 不 仅 可 以 运 行 在Windows NT 上, 也 可 以 运
行 在Windows 95 和Windows 98 上。 对 软 件 开 发 商 来 说, 数 据 库 应 用 软 件 不
需 要 重 复 编 码, 就 可 以 实 现 从 单 机 到 客 户/ 服 务 器 的 各 种 发 行 版 本, 降 低 了
开 发 成 本。
----“ 设 备” 的 概 念 被“ 文 件” 取 代 之 后,
数 据 库 与 文 件 的 关 系 也 发 生 了 变 化。 现 在, 一 个 数 据 库 还 是 可 以 跨 越 多 个
文 件( 就 像 过 去 可 以 跨 越 多 个 设 备 一 样), 但 是 一 个 文 件 只 能 用 于 一 个 数 据
库( 不 像 过 去 一 个 设 备 可 以 保 存 多 个 数 据 库)。 数 据 库 被 删 除 之 后, 其 文 件
也 被 删 除( 过 去 删 除 数 据 库 之 后, 其 设 备 必 须 使 用 专 门 的 存 储 过 程 来 删 除,
甚 至 可 能 需 要 手 工 删 除 设 备 对 应 的 物 理 文 件)。
---- 数 据 库 中 的 数 据 量 逐 渐 增 大 时,SQL7
的 数 据 库 文 件 尺 寸 可 以 自 动 扩 充(Expand), 不 再 需 要 管 理 员 执 行 一 个 多 余
的ALTER 语 句。 这 在 实 际 的 生 产 环 境 中 是 非 常 有 用 的, 因 为 数 据 库 应 用 系 统
的 用 户 单 位 也 许 根 本 没 有 数 据 库 管 理 员。
----2. 数 据 页、 行、 列
---- 现 在, 数 据 库 的 页(Page) 从2K 增 为8K;
一 行 ( 即 一 个 记 录) 的 最 大 字 节 数 从1962 字 节 增 为8060 字 节; 字 符 型 和 二
进 制 型 列( 字 段) 的 最 大 字 节 数 从255 增 为8000; 一 个 表 中 的 最 大 列 数 从250
增 为1024。 这 些 指 标 的 增 加 最 直 接 的 好 处 是 便 于 开 发, 例 如 我 们 经 常 遇 到
的“ 备 注” 字 段 问 题, 如 果 设 置 成 可 变 字 符 串 类 型, 最 多 只 能 包 括127 个 汉 字,
往 往 不 能 满 足 用 户 的 需 要; 如 果 改 成 多 个 字 段, 在 界 面 与 数 据 库 操 作 之 间
的 协 调 又 特 别 困 难, 最 后 往 往 不 得 不 采 用 既 影 响 性 能、 又 浪 费 存 储 资 源、 还
增 加 编 程 难 度 的 文 本 字 段 类 型。 现 在 使 用 一 个 可 变 字 符 串 类 型 的 字 段 就 可
以 解 决 这 个 问 题。
---- 这 种 新 的 数 据 页/ 行 存 储 格 式 不 仅
支 持 行 级 锁, 并 且 因 为 一 次I/O 操 作 可 以 获 得 更 多 的 数 据, 所 以 访 问 大 型 数
据 块(Large Block of Data ) 的 性 能 也 大 为 改 善。
----3. 索 引
----以 前, 非 聚 集 索 引(Nonclustered Index)
使 用 物 理 记 录 指 针( 页 号 和 行 号) 作 为 行 的 定 位 指 针(Row Locator)。 数 据
量 增 大 导 致 数 据 页 分 页(Split) 时, 很 多 数 据 行 将 移 到 新 的 页, 从 而 导 致 物
理 指 针 的 变 化。 这 时, 所 有 的 非 聚 集 索 引 都 需 要 更 新 物 理 指 针, 这 种 操 作 将
耗 费 大 量 的 时 间 和 资 源。
----SQL7 改 进 了 索 引 设 计。 如 果 一 个 表
有 一 个
聚 集 索 引( 因 而 有 一 个 聚 集 键 — —Clustering Key), 所 有 的 非 聚 集 索 引 的
叶 节 点(Leaf Node) 将 使 用 聚 集 键( 而 非 物 理 记 录 指 针) 作 为 记 录 行 的 定 位
指 针; 如 果 表 中 没 有 聚 集 索 引, 非 聚 集 索 引 仍 然 使 用 物 理 指 针 指 向 数 据 页。
无 论 哪 种 情 况, 行 定 位 指 针 都 是 固 定 的。 如 果 聚 集 索 引 的 一 个 叶 节 点 发 生
分 页,SQL7 不 需 要 更 新 非 聚 集 索 引, 因 为 行 定 位 指 针 仍 然 有 效。 对 于 没 有 聚
集 索 引 的 表, 因 为 不 会 发 生 数 据 分 页, 所 以 也 不 存 在 更 新 物 理 指 针 的 问 题。
---- 索 引 设 计 的 另 一 个 改 进 是: 过 去 每
个 表 在 一 个 查 询 中 只 能 使 用 一 个 索 引, 而SQL7 采 用 索 引 交 叉(Index Intersection)
和 索 引 联 合(Index Union) 技 术, 实 现 一 个 查 询 中 的 单 表 多 索 引。
----4. 文 本 与 图 形 数 据
----SQL7 对 文 本(Text) 和 图 形(Image)
数 据 的 存 储 也 做 了 重 新 设 计。 对 于 小 型 文 本 或 图 形, 通 过 在 一 个 数 据 页 中
保 存 多 个 文 本 或 图 形 值 来 提 高 存 储 效 率; 对 于 大 型 文 本 和 图 形, 通 过 并 行
查 询 来 优 化 查 询 性 能。 这 种 改 进 对 多 媒 体 数 据 库 应 用 系 统 的 开 发 和 运 行 大
有 帮 助。
----5. 行 级 锁
---- 锁 机 制 的 改 进 是SQL7 的 重 大 改 进
之 一。SQL7 支 持 对 数 据 行 和 索 引 项(Index Entry) 的 完 全 行 级 锁。 经 过 优 化
的 锁 管 理 程 序(Lock Manager) 可 以 更 快 地 响 应 加 锁 请 求, 从 而 改 善 了 联 机
事 务 处 理(OLTP) 应 用 程 序 的 并 发 性, 特 别 是 当 很 多 程 序 同 时 添 加 记 录 时。
----SQL7 的 锁 管 理 程 序 自 动 调 整 加 锁
时 需 要 使 用 的 资 源 数 量, 不 再 需 要 手 工 配 置“locks” 这 个 服 务 器 选 项; 同 时,
针 对 具 体 任 务,SQL7 还 在 页 级 锁 与 行 级 锁 之 间 自 动 选 择, 例 如, 在 查 询 数 据
时 用 页 级 锁 以 提 高 查 询 速 度, 而 在 更 改 数 据 时 用 行 级 锁 以 改 善 并 发 性。
----6. 事 务 日 志 ---- 以 前, 事 务 日 志
是 一 个 保 存 在 普 通 数 据 页 面 中 的 系 统 表(syslogs), 这 些 页 面 将 与 数 据 争
用 存 储 空 间 和 高 速 缓 存(Memory Cache)。 SQL7 则 大 不 一 样, 事 务 日 志 将 由
一 个 或 若 干 日 志 文 件 组 成, 不 再 是 一 个 系 统 表。 这 种 设 计 将 大 大 提 高 对 日
志 操 作 的I/O 吞 吐 量。
----7. tempdb 数 据 库
----tempdb 的 尺 寸 一 直 是 困 扰 数 据 库
应 用 系 统 开 发 商 和 最 终 用 户 的 大 问 题: 开 发 阶 段 运 行 非 常 平 稳 的 系 统, 到
了 运 时 环 境 中 就 变 得 又 慢 又 不 稳 定, 技 术 支 持 人 员 往 往 不 得 不 经 常 在 硬 盘
和 内 存 之 间 移 动tempdb 或 增 大 其 尺 寸, 原 因 就 在 于tempdb 的 配 置 是 手 工 的,
无 法 自 动 适 应 实 际 生 产 环 境 的 需 要。
----SQL7 的tempdb 数 据 库 将 根 据 需 要
自 动 扩 充。 例 如, 使 用 频 率 很 低 的 报 表 查 询 经 常 需 要 大 量 的 临 时 空 间, 专 为
这 些 查 询 设 置 很 大 的 tempdb, 无 疑 是 一 种 资 源 浪 费。 因 此,SQL7 在 遇 到 这
种 情 况 时 自 动 扩 大tempdb 的 尺 寸, 而 再 次 启 动 服 务 时,tempdb 又 将 恢 复 到
原 始 配 置 尺 寸。
----8. 新 的 查 询 处 理 程 序
----SQL7 的 查 询 处 理 程 序(Query Processor)
经 过 重 新 设 计, 对 大 型 数 据 库 复 杂 查 询 的 支 持 明 显 加 强, 因 而 更 适 合 决 策
支 持、 数 据 仓 库 以 及 联 机 事 务 处 理 应 用 系 统 的 开 发。 新 的 查 询 处 理 程 序 采
用 混 合 连 接(Hash Join)、 合 并 连 接 (Merge Join)、 混 合 累 计(Hash Aggregation)
等 技 术, 与 过 去 仅 采 用 嵌 套 循 环 连 接(Nested loop Join) 技 术 相 比, 明 显
改 善 了 复 杂 查 询 的 性 能。
----9. 分 布 式 查 询
---- 在SQL7 内 部, 查 询 处 理 程 序 与 数 据
存 储 部 件 之 间, 使 用OLE DB 相 互 通 讯。OLE DB 为SQL7 提 供 了 分 布 式 的 异 种
数 据 库 查 询 能 力, 也 就 是 说, 分 布 式 查 询 不 仅 可 以 查 询SQL Server 数 据 库,
也 可 以 查 询 其 他 数 据 库 管 理 系 统 的 数 据 库, 甚 至 可 以 是 非 关 系 型 的 数 据 源。
下 面 是 一 个 使 用Transact SQL 语 句 查 询Access 数 据 库 的 例 子:
----SELECT a. *FROM OpenRowset( ‘Microsoft.Jet.OLEDB.3.51’,
‘c:\MSOffice\Access\Samples\northwind.mdb’;‘sa’; ‘mypwd’, customers)
As a ---- 以 上 特 点 实 际 上 都 得 益 于SQL7 中 两 个 核 心 部 件 的 重 新 设 计: 存
储 引 擎(SQL Storage Engine) 和 关 系 引 擎(SQL Relational Engine)。 一
般 来 说, 这 两 个 核 心 部 件 的 重 新 设 计 很 容 易 导 致 版 本 兼 容 性 问 题, 但SQL7
不 仅 保 持 了 与 以 前 版 本 的 兼 容, 使 得 过 去 的SQL 6.x 应 用 程 序 可 以 不 经 任
何 修 改 继 续 使 用, 而 且 在 升 级 过 程 中 甚 至 为 管 理 员 保 留“ 后 悔” 的 余 地 — —SQL
Server 7.0 可 以 与SQL Server 6.5 共 存 于 同 一 环 境 中, 并 在 两 个 版 本 之
间 来 回 切 换。