SQL 技术问答夏令时、服务器内存及更多内容

编辑:Nancy Michell

夏令时

问:为遵守“2005 年能源政策法”,美国的夏令时 (DST) 制度即将做出更改,我是否应该随之更新 SQL Server™?

答:不用。此时不必为了支持对 DST 的更改而做出特定于 SQL Server 的任何更新。SQL Server 对于与时间相关的数据依赖的是基础操作系统,这意味着如果操作系统所报告的日期和时间正确,则 SQL Server 就将报告和使用同样的值。为符合即将对 DST 做出的更改,您必须按照 support.microsoft.com/kb/928388 所概括的内容来更新 Windows® 副本。在 Windows Vista™(该系统已包含了这些更改)之前的所有 Windows 操作系统(包括那些运行 SQL Server 的系统)上都必须执行此操作才能符合 DST 更改。(澳大利亚也要进行一些更改。请参阅 support.microsoft.com/kb/912475。)

使用 Windows Vista 进行连接

问:我已经安装了 Windows Vista,但是现在无法在系统上连接到 SQL Server 2005。我是一名本地管理员,过去能够顺利地进行此连接。这是什么原因?

答:如果没有安装 Service Pack 2 (SP2),则在 Windows Vista 和 SQL Server 2005 中出现该行为乃意料中的事。Windows Vista 新增了一个安全模型(用户帐户控制),该模型实际上会在本地管理员组中捕获您的成员身份,并要求您验证需要管理特权的操作。如果单击“允许”按钮,则您的凭据(其中包含您的管理员令牌)会被一路发送到应用程序。如果使用的是 SQL Server Management Studio (SSMS),则不会显示对话框,因为仅运行该工具并不需要管理权限。问题在于,默认情况下,SQL Server 2005 系统管理员角色包含来自操作系统的本地管理员组,这也是您的帐户在过去访问 SQL Server 时所使用的管理员组。既然 Windows Vista 并不发送该权限,因此您就不会获得访问权限。

应该指出,Windows Vista 不支持在未安装 SP2 的情况下运行 SQL Server 2005,并且该 SP2 具备一个可以为您添加帐户的工具。如果您仍在等待 SP2,修复方法非常简单。必须将您个人的 Windows 用户帐户添加到 SQL Server 中,就您而言,必须将其添加到系统管理员角色中。为此,只需右键单击 SQL Server Management Studio,然后选择“以管理员身份运行”。连接到您的 SQL Server,然后将您的 Windows 帐户添加到系统管理员角色。有关其工作原理的详细信息,请参阅 SQL Server 联机丛书

关于视图的事务性复制

问:如果我有一个已发布视图并将其更新,我知道这将会复制该事务。但是,如果我更新此视图的基表,还会复制该事务吗?此外,如果我有一个已发布表并创建了一个它的视图,然后我更新了此视图而不是基表,这时会复制该事务吗?

答:假定该基表被配置为发布中的一个项目(也就是说,您也配置了该基表进行复制),则对该基表的任何更新都会被复制。

在您复制视图时,默认情况下要作为视图部分复制的所有内容是视图的架构部分或视图的支持代码,而不是视图的基础数据(除非是索引视图)。因此,即使没有复制,无论您何时更新视图(这种情况下,意味着以视图为目标来运行数据操作语言 (DML) 语句),实际上只是在更新基础表(而不是视图)中的数据。视图只不过是查询语句的逻辑存储区,不附带任何物理存储区(再次重申,除非您使用的是索引视图)。

服务器最大内存

问:我有一台运行 Windows Server® 2003 和 SQL Server 2000 的计算机,RAM 为 5GB。假定我使用 /3GB 开关增加我的用户模式虚拟地址空间,使用 /PAE 开关加载 Windows 内核的物理地址扩展 (PAE) 版本,并将“Address Windowing Extensions (AWE) Enabled”(启用地址窗口化扩展插件 (AWE))设置为 1(并在内存中启用锁定页面)。在启用 AWE 后,服务器最大内存选项是会仅配置为数据缓存的大小还是所有缓冲区缓存(数据、进程及会话等)的大小?既然只有数据缓存可以使用 AWE 映射的内存,如果我将服务器最大内存配置为 4GB,那么,数据缓存是仅使用 1GB(AWE 所映射的那部分),还是可以使用这额外的 1GB 并继续与标准地址空间中其他所有内存消耗者共同使用或争用内存?

答:服务器最大内存会始终限制整个缓冲池的大小;不过,可以使用 AWE 映射内存的唯一消耗者是数据缓存,没有其他消耗者。

因此,对于您的第一个问题,即使启用了 AWE,服务器最大内存仍会限制整个缓冲池的大小,但非数据缓存消耗者在任何时候也不会使用 AWE 映射的内存。

对于第二个问题,数据缓存将使用 AWE 映射的内存外加缓冲池中 SQL Server 确定适合的其他任何内存;数据缓存不会仅限于使用 AWE 内存,它只不过碰巧是可以使用 AWE 内存的唯一消耗者。如果您不确定 /3GB 开关的作用,请参阅 Raymond Chen 的博客(英文)。

探查和性能

问:我在生产中对 SQL Server 2005 进行了镜像处理。当我在数据库计算机上启动 SQL Server Profiler 并向某文件写入跟踪数据时,我发现性能明显下降。这是为什么?

答:性能下降的原因取决于您运行探查器的位置。如果您在服务器上以交互方式运行它,则探查器 UI 会同时消耗服务器上的内存和 CPU,从而影响性能。

如果您在工作站上以交互方式运行探查器,则会在整个网络内移动事件信息。这会影响吞吐量。如果这是您用于镜像处理的同一网络,则在那里同样会产生影响。此外,如果您在网络共享上存储探查器输出,则会在整个网络内移动数据并对性能产生不良影响。

或许缓解所有这些问题的最佳方法是在运行待探查实例的服务器上以非交互方式运行探查器,然后再将输出传送到本地文件。尽管仍会消耗服务器资源,但此方法通常可以将影响降到最低。这远比(内存中)探查器跟踪有效。文件跟踪可以更有效地使用系统内存;它具有更大的缓冲区,可以将缓冲区中的数据更有效地刷新到磁盘。它同样也不依赖外部进程(如 SQL Server Profiler)。

最后,在探查器仍在进行探查时,跟踪数据被写入到磁盘文件。跟踪文件是共享的,以便其他人可以远程查看实时探查数据。如果您要以交互方式调用跟踪文件,则表示您已手动调用了探查器并要在屏幕上查看输出。可以在没有直观输出的情况下用编程方式创建跟踪文件,这也是您为什么应以非交互方式运行程序的原因。

除了本地目录,您还可以创建一个共享,这样其他人可以访问此共享中的文件,通常这是一种很好的做法。正如先前所提到的,您不希望将跟踪输出发送到远程共享上的文件,尤其是通过用于镜像处理的同一网络管道来访问的远程共享。

您还应该只选择进行调查所需的最小事件集。对于跟踪文件位置,您应选择系统上速度最快的驱动器(最好与 SQL Server 数据库驱动器和事务日志驱动器分开)。如果性能仍是显著降低,则将事件分割为两个或多个跟踪文件,每个跟踪文件都定向于一个不同的硬盘驱动器。即使跟踪文件定向于同一个硬盘驱动器,将事件分割仍然是有好处的,因为每个跟踪文件都有其自己的缓冲集区。有关详细信息,请参阅“SQL Server 联机丛书”中的 sp_trace_create 及其所有相关内容。

群集问题

问:我一直尝试在运行 Windows Server 2003 的群集上安装 SQL Server。可每次进行安装时总会收到一个错误,内容是“安装程序无法在群集节点上执行所需的操作。”而 sqlstp.log 的记录仅仅是:

Script file copied to '\\SERVER01\ADMIN$\SERVER01_MSSQLSERVER.iss' successfully.
Installing remote service (SERVER01)...
An error occured in the service create (SERVER01): 1069...

这是怎么回事?

答:造成这种失败有若干种原因。安装程序在所有选中节点上安装 Windows NT® Service 以远程管理每台计算机上的安装进程。因此,您必须认识到可能会遇到许多阻碍。

首先,您的域帐户用户可能具有拒绝“作为服务登录”权限的组策略。(切记,域策略会覆盖您的本地计算机策略。)请确保您使用的帐户没有这些限制。

其次,您执行安装程序所使用的计算机的已登录帐户在所有节点上都应具有管理员访问权限,原因如下:主安装进程需要对所有计算机的远程注册表访问权限;安装程序会将 cnvsvc.exe 复制到远程计算机的 Windows 目录下;或者安装程序使用标准的 Windows API(这些 API 仅使用已登录帐户的权限)来访问远程计算机。由于这些原因,默认情况下,您在所有节点上均应以管理员身份登录。

灾难恢复计划

问:我在考虑是使用数据库镜像(同步模式)还是日志传送来为我的 SAP 数据库实现灾难恢复 (DR) 策略。我的生产和 DR 站点将使用并非专用于镜像会话的 100Mb 宽带连接。各种镜像会话甚至其他 DR 服务器都将共享此连接。

如果因网络问题而造成无法将日志记录发送到镜像数据库,会进行重试吗?

当镜像会话挂起时,会有保留期吗?还有,除系统视图之外,是否还有任何我可以用来监视镜像流量和日志记录传输的日志记录信息?

答:我们先回答这个问题:什么是数据库镜像的重试逻辑?可以从两方面来考虑此问题:首先,如果出现短暂的网络问题,镜像会话状态是断开的。有一个持续 10 秒的默认的网络超时值,这表示日志记录无法从主体数据库发送到镜像数据库。这种情况下,主体将继续“公开”运行,事务将在客户端上提交。一旦网络问题解决,无需用户干预,镜像会话就会自动重试。它将尝试使用日志记录赶上去;镜像伙伴将首先进行同步,待它们赶上后,就将对状态进行同步。

其次,如果存在重做问题,则镜像会话状态为挂起。重做问题意味着镜像数据库无法在其数据库上提交日志记录。重做问题主要是由于未找到物理文件或磁盘空间不足引起。这种情况下,主体将继续公开运行,因此事务将在客户端上提交。当您在镜像服务器上手动修复重做问题后,镜像会话需要干预才能进行:

ALTER DATABASE <db> SET PARTNER RESUME; 

关于保留期,答案是,无论镜像会话是断开还是挂起,日志记录会一直保留到会话还原,并且从会话挂起到会话恢复这段时间的所有记录都会在镜像上得到加固。本质上说,尽管镜像会话被断开或挂起,但主体上的日志不能被截断,因为那样做会破坏日志重做链。这表示主体的日志将没有限制地增大,直到会话还原。因此,事实上对于镜像会话并没有保留限制;唯一的真正约束条件是主体服务器用于存储日志的磁盘空间(因为日志不能被截断)。

最后,不存在您可以用来监视镜像的特定日志文件。为此,SQL Server 2005 提供了一个名为“数据库镜像监视器”的 GUI 工具,该工具允许系统管理员查看和更新状态,并根据几个关键的性能度量配置警告阈值。这样,在镜像不能正常执行时您就可以收到警报。对于数据库镜像的性能要考虑的主要问题是日志记录是否得到及时处理。有关监视数据库镜像的详细信息,可浏览 msdn2.microsoft.com/fr-fr/library/ms365781.aspx 上的“监视镜像状态”一文。

衷心感谢以下 Microsoft IT 专家,感谢他们与我们分享了技术与专业知识: Chad Boyd、Sandu Chirica、Alan Doby、Kaloian Manassiev、Luciano Moreira、Ivan Penkov、Sivagaminathan Rajarethinam、Deborah To、Patrick Woodward、Buck Woody、Stanley Yau 和 Warren Young。

© 2008 Microsoft Corporation 与 CMP Media, LLC.保留所有权利;不得对全文或部分内容进行复制.