[教程]解决SQLServer2005连接错误问题方法

mikel阅读(1135)

错误:"在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 – 无法打开到 SQL Server 的连接) "

 

      上述错误我遇到两种情况,一种是在打开打开SQL Server 2005时弹出的,另一种是在应用程序连接SQL Server 2005时出现的.归纳了一下,由以下几个原因:

1.数据库引擎没有启动.

      有两种启动方式:

     (1)开始->程序->Microsoft SQL Server 2005->SQL Server 2005外围应用配置器,在打开的界面单击"服务的连接的外围应用配置器",在打开的界面中找到Database Engine,单击"服务",在右侧查看是否已启动,如果没有启动可单击"启动",并确保"启动类型"为自动,不要为手动,否则下次开机时又要手动启动;

     (2)可打开:开始->程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager,选中SQL Server 2005服务中SQL Server(MSSQLServer) ,并单击工具栏中的"启动服务"按钮把服务状态改为启动;

      使用上面两种方式时,有时候在启动的时候可能会出现错误,不能启动,这时就要查看"SQL Server 2005配置管理器"中的SQL  Server 2005网络配置->MSSQLServer协议中的VIA是否已启用,如果已启用,则把它禁止.然后再执行上述一种方式操作就可以了.

2.进行远程连接时,是否已允许远程连接.

      SQL Server 2005 在默认情况下仅限本地连接.我们可以手动启用远程连接.在上面第一种方式中,找到Database Engine,单击"远程连接",在右侧将"仅限本地连接(L)"改为"本地连接和远程连接(R)",并选中"同时使用TCP/IP和named pipes(B)".

3.如果是远程连接,则还要查看连接数据库的语句是否正确,登录账户是否正确,密码是否正确等.

      我在一次局域网内连接数据库时,就要因为连接字符串出了问题,在局域网内一台机子连接另一台机子上数据库时,把server=装有数据库的另一台机子的 IP.我在连接数据库时总是出现上面的错误,查了好长时间,后来发现,IP没有正确到传到连接字符串,原来我在连接时,使用的是本地,即 127.0.0.1,输入的IP没有传到连接字符串.

     以上是我归纳的几种情况,希望能对遇到类似问题的朋友提供些帮助和参考.

[教程]修改SQLServer2005的端口号

mikel阅读(982)

如果启用,则 Microsoft SQL Server Database Engine 的默认实例将侦听 TCP 端口 1433。SQL Server Database Engine 和 SQL Server Mobile 的命名实例的配置是使用动态端口,这意味着它们在启动 SQL Server 服务时会选择一个可用端口。在通过防火墙连接到命名实例时,请配置数据库引擎 以侦听特定端口,以便能够在防火墙中打开相应的端口。
为 SQL Server 数据库引擎分配 TCP/IP 端口号
在 SQL Server 配置管理器中的控制台窗格中,依次展开“SQL Server 2005 网络配置”、“<实例名> 的协议”,然后双击 TCP/IP。
在“TCP/IP 属性”对话框的“IP 地址”选项卡上,将显示若干个 IP 地址,格式为:IP1、IP2,直到 IPAll。这些 IP 地址中有一个是用作环回适配器的 IP 地址 (127.0.0.1) 的。其他 IP 地址是计算机上的各个 IP 地址。右键单击每个地址,再单击“属性”,标识要配置的 IP 地址。
如果“TCP 动态端口”对话框中包含 0,则表示数据库引擎 正在侦听动态端口,请删除 0。
在“IPn 属性”区域框的“TCP 端口”框中,键入希望此 IP 地址侦听的端口号,然后单击“确定”。
在控制台窗格中,单击“SQL Server 2005 服务”。
在详细信息窗格中,右键单击“SQL Server (<实例名>)”,再单击“重新启动”,以停止并重新启动 SQL Server。
在配置完 SQL Server 以侦听特定端口后,可以通过下列三种方法,使用客户端应用程序连接到特定端口:
运行服务器上的 SQL Server Browser 服务以按名称连接到数据库引擎 实例。
在客户端上创建一个别名,指定端口号。
对客户端进行编程,以便使用自定义连接字符串进行连接。

[教程]与Patrick Smacchia谈.NET的代码分析

mikel阅读(887)

Patrick Smacchia是Visual C#的MVP,拥有超过15年的软件开发经验。他是《Practical .NET 2 and C# 2》一书的作者,该书通过真实的项目经验来阐释.NET平台。他的专业为数学与计算机科学,毕业后,他在多个领域从事过软件开发,包括在Société Générale开发股票交易系统,在Amadeus开发航空售票预订系统,以及在Alcatel开发卫星基站。目前他是NDepend工具的首席程序员。

Rob Bazinet (RB): NDepend是什么?

Patrick Smacchia (PS): NDepend是为.NET开发人员以及架构师开发的工具。代码库是那么的错综复杂,而NDepend工具则能够帮助人们从源代码中获取相关的信息。例如,NDepend能够判断你的代码库是否正确分层;获知从最近版本发布后所做的修改;或者评估某些关键任务的代码质量,如果这些事情通过传统工具来完成,可能会耗费数个小时甚至数天的时间。

RB: 是什么使你产生开发NDepend的念头?

PS: 5年前,我为一个巨大而又混乱的代码库提供咨询。而在同时,我正在阅读一本优秀的书籍,Robert C Martin所著的《敏捷软件开发——原则,模式与实践》 。本书描述了一些非常酷的评估代码库组件构成的度量标准。

正是在那个时候,我从C++转向了.NET。我所偏爱的其中一个特性是System.Reflection,它比C++的RTTI更加的引人注目。顺理成章的,我开始基于反射开发了一个小巧的工具,它能够针对这个巨大而又混乱的代码库去验证Martin所说的度量。然后,我将该工具发布为开源软件(OSS),由于它的功能能够满足许多需求,因而越来越受到人们的欢迎。基于此,我认识到如果该工具能够支持某些可视化以及查询的功能,那么对于我们处理代码复杂性而言,其效率就能再上一个台阶。

RB: NDepend对于我的编码工作以及/或者开发生命周期能够提供怎样的帮助呢?

PS: NDepend对多种任务都提供了很大的帮助,包括重构、代码评审、代码质量检查与增强、设计缺陷检查、代码侦测、代码浏览以及构建过程原则的实施。

NDepend对于代码重构非常有用,因为它能够展现组件、命名空间、类……之间的依赖关系,呈现的方式是一个依赖关系矩阵图以及一些由“框框和箭头”组成的图形。

NDepend支持超过60条编码准则,用于评估代码质量:

NDepend分析过程可以被集成到MSBuild或者NAnt构建过程中。每次执行分析之后都会给出一个关于构建过程健康度的报告。

通过使用代码查询语言(Code Query Language,CQL,一种能够提供代码结构查询的语言),开发人员能够对他们的代码库提出各种问题:

  • 哪些类实现了IDisposable接口?
    Select TYPES Where IsClass AND Implements "System.IDisposable"
  • 哪些公共方法能够被声明为private?
    Select METHODS Where IsPublic AND CouldBePrivate
  • 哪些方法分配了特定的字段?
    Select METHODS Where IsDirectlyWriting "MyNamespace.MyClass.m_Field"
  • 哪些复杂的方法没有足够的注释?
    Select METHODS Where CyclomaticComplexity > 15 AND PercentageComment < 20

CQL语言还能够用来定义某些原则对每次构建进行检查。如果与原则冲突,用户就能够从报告中知晓。NDepend提供了50多条预先定义的原则,同时还允许用户自定义符合系统要求的原则,例如:

  • 静态字段不能被命名为m_XXX(自定义的命名规范):
    WARN IF Count > 0 IN Select FIELDS Where NameLike "^m_" AND IsStatic
  • 我不想让我的用户界面层直接依赖于DataBase层:
    WARN IF Count > 0 IN Select NAMESPACES Where IsDirectlyUsing "DataLayer" AND NameIs "UILayer"
  • MyAssembly和MyAssembly2的方法不能超过30行代码:
    WARN IF Count > 0 IN Select METHODS OUT OF ASSEMBLIES "MyAssembly1", "MyAssembly2" Where NbLinesOfCode > 30

NDepend可以比较代码库的两个版本。当我们即将发布一个新版本,以及需要进行冒烟测试,和对修改内容进行代码评审时,这一功能特性就格外的行之有效。此处,同样借助了CQL语言以探测版本之间的区别。例如,显示两个版本中被修改过的方法,需要编写:

  • Select METHODS Where CodeWasChanged

最后,NDepend可以作为Visual Studio 2005以及2008的插件,也可以作为Reflector的插件,通过这些工具访问NDepend提供的功能特性。

RB: 若要使用NDepend,应该怎么入门?推荐的学习途径是什么?

PS:首先,需要下载NDepend,然后分析你的代码库。这些操作可以无缝地被执行,因为VisualNDepend的UI与Visual Studio的界面完全相同,甚至于界面效果更好。

一旦分析执行完毕,VisualNDepend的UI就会通过几个面板来显示分析结果。此时,如果用户希望浏览依赖关系或软件度量,或者通过CQL 语言查询代码库,以及比较分析结果等……都需要对此进行选择。无论内容的多少,每个功能特性都会提供一个专门的面板。同时还内嵌了一个“帮助”节,它包含了对 NDepend的入门介绍。一些视频广播还具有链接。它们为用户演示了如何执行每个特定的任务。最后,我们的网站还提供了一些高级文档,例如完整的CQL 规格说明书。

一旦用户掌握了每个功能特性,就能够统一地使用它们完成对代码库的评审与修正。

RB: NDepend能够工作在.NET Framework 3.5下吗?3.0呢?

PS: 可以,新的NDepend 2.6版本的Visual Studio插件可以工作在Visual Studio 2008下。而且,NDepend也能够分析.NET 3.5和3.0的程序集。

RB: NDepend是针对.NET语言的产品;你是否有计划开发针对其他平台的产品?是否有计划增加对动态代码库的分析?

PS: 是的。NDepend采用C#进行编码,但是在我们的代码中只有5%是专门针对于.NET代码分析的。这意味着95%的代码与要分析代码的平台是抽象隔离的。正是基于这种背景,目前就有一家公司octo technology 正在开发能够分析Java代码的NDepend版本。octo technology是一家法国的咨询公司,专注于软件与信息系统的架构设计,它汇聚了大量的Java和.NET专家。Octo的.NET咨询师喜欢使用 NDepend,而Java咨询师也希望能够获得同样的工具。我们决定对此进行合作。

XDepend项目(NDepend的Java版本)的beta版会在2008的第1个季度推出。

RB: 对于初学者而言,使用NDepend进行代码分析看起来非常复杂;你对此有什么好的建议或者指导吗?

PS: 在VisualNDepend的UI中内嵌了一个帮助节,包含了一些入门级介绍以及具有链接的视频广播。在www.ndepend.com/GettingStarted.aspx中可以获得一些大约3分钟长度的视频广播,内容是对NDepend的入门讲解。还有一些视频广播则介绍了在主页上推荐的主要用例场景。若要进一步学习,我们还提供了一些文档,例如完整的 CQL规格说明,对所有度量的描述文档,Scott Hanselman、Stuart Celarier和Patrick Caulwell共同发表的总结文档的PDF:NDepend metric placemats ,同时,在我们网站的documentation部分还提供了更多的内容。此外,我还会定期地更新博客(http://codebetter.com/blogs/patricksmacchia/default.aspx),并在那里阐述了NDepend的高级用法。

RB: 你们是否为软件团队提供培训,使得他们能够快速上手,并熟练地进行运用?

PS: 有时候我们会走访一些订阅了企业许可证以及希望获得特殊培训的客户。即使培训并非我们的主要工作,我们也要持续开展。与用户的直接联系会为我们提供更多的信息。功能特性的完善与用户的反馈是分不开的。

RB: 你认为NDepend最强或者说最好的功能特性是什么?而原因又在于什么?

PS: 这个问题很难回答,事实上,我们大量地使用了NDepend来规范NDepend的编码。我每天都在亲自使用度量去浏览依赖关系,确保体系架构保持清晰。我们拥有超过400条CQL原则,这些原则能够帮助我们持续不变地关注代码质量。我也为NDepend的比较特性所深深地吸引。我通常会使用它去评审发生改变的代码。我相信变化往往就是噩梦的开始。

所谓“一份耕耘,一份收获”,这种方式能够极大地改善我们的开发过程,使得我们能够以一种持续的节奏发布新的版本。更多的内容可以在我们的 发布笔记中找到。

RB: 今天,我们非常感谢Patrick牺牲宝贵的时间,指导我们了解了关于NDepend的知识。

有关NDepend的更多内容可以在NDepend的网站上找到。读者可以通过Patrick的博客了解更多Patrick的信息。

查看英文原文Talking .NET Code Analysis with Patrick Smacchia

[教程].NET Framework 3.5增强特性学习工具包

mikel阅读(818)

微软最近提供了.NET Framework 3.5增强特性学习工具包。该工具包只包含了未来将要发布的新技术的演示文档、Demo、视频演示以及动手实验。

动手实验包含以下主题:

  • ADO.NET Data Services
  • ASP.NET MVC
  • ASP.NET Dynamic Data
  • ADO.NET Entity Framework
  • ASP.NET Ajax History
  • ASP.NET Silverlight Controls

以下是每个实验和练习的简短描述。

介绍ADO.NET Data Services

这个实验突出创建一个数据服务,使用实体框架(Entity Framework)作为他的数据源,并展示了如何使用.NET客户端APIs和ASP.NET AJAX APIs 消费服务。此外你也可以使用服务拦截器增加加验证支持和自定义查询的服务操作。

练习:

  1. 创建和消费ADO.NET data services
  2. 使用ASP.NET AJAX API消费ADO.NET data services
  3. 使用服务操作和拦截器扩展数据服务

开发ASP.NET MVC应用

这个实验展示了建立ASP.NET MVC应用程序的基本原则,核心概念,工作原理以及如何使用。你也会了解到开发应用程序的时候执行单元测试需要什么以及如何做单元测试,如何使用IoC容器扩展ASP.NET framework。

练习:

  1. 建立ASP.NET MVC应用程序
  2. 使用测试驱动开发(TDD)方式开发ASP.NET MVC应用程序
  3. 在ASP.NET MVC中使用IoC容器

介绍ASP.NET Dynamic Data 

在这个实验中,你将学会如何快速创建和定制一个数据驱动的Web应用程序,而不需要编写大量的代码。使用ASP.NET Dynamic Data的功能构建的应用程序为数据库的数据模型提供查看,编辑,过滤和排序操作。

练习:

  1. 创建数据驱动的web应用程序
  2. 定制一个ASP.NET Dynamic Data应用程序

介绍ADO.NET Entity Framework 

在这个实验中,你将学会如何使用ADO.NET Entity Framework工具创建一个实体数据模型和如何使用Entity Framework APIs.

练习:

  1. 创建和消费一个实体数据模型

介绍ASP.NET AJAX History

一个典型的AJAX应用程序面临的一个问题是浏览器的后退按钮不会返回到AJAX的上一步,而是回退整个文档,这不是用户所 期望的。在这个实验中,你将学会如何使用ASP.NET AJAX History特性通过服务器控件或者客户端代码维护浏览历史,使得用户点击浏览器的后退和前进按钮在AJAX的状态之间移动。

练习:

  1. 通过服务端控件为ASP.NET AJAX Web应用程序增加历史功能
  2. 通过AJAX API为ASP.NET AJAX Web应用程序增加历史功能

介绍ASP.NET Silverlight 控件

在这个实验中,你将学会如何使用Silverlight的ASP.NET控件为你的Web应用程序添加 富媒体功能。一方面你将学到可让你的网站整合音频和视频的ASP.NET MediaPlayer控件,另一方面你将学到整合XAML到你的网站的ASP.NET Silverlight通用控件。

练习:

  1. 为Web应用程序添加富媒体功能。
  2. 在ASP.NET应用程序中集成Silverlight内容

学习工具包支持的操作系统是Windows Vista 和Windows XP。需要安装以下应用程序:Microsoft Visual Studio 2008, Microsoft SQL Server 2005 (推荐用Express), Microsoft Office Powerpoint 200 或者PowerPoint Viewer 2007 (用于查看演示文档)和Windows PowerShell 1.0 RTM。

查看英文原文:.NET Framework 3.5 Enhancements Training Kit Available

[代码]更新记录后关闭子窗口并刷新父窗口的JS

mikel阅读(844)

以ASP代码为例,使用一个条件句决定代码执行顺序,你可以将它放在记录更新之后(将转向目标后加上条件参数,例如转向目标为post.asp?action=go)

<% if Request("action")="go" then %>
<script language="JavaScript">
<!--
function refreshParent() {
window.opener.location.href = window.opener.location.href;
if (window.opener.progressWindow)
window.opener.progressWindow.close();
window.close();
}
//-->
</script>
<body bgcolor="#f5f5f3" leftmargin="0" topmargin="0" onLoad="refreshParent()"><%end if%>

[Flex] How to call classes outside flex.war

mikel阅读(834)

Problem Summary
You want to have Java classes called by Blaze DS/LCDS but they reside outside the flex.war/WEB-INF/classes folder and Flex does not find them.
Solution Summary
Use the java.class.path system variable in your JVM configuration in order to point to the folder or JAR containing your classes.
Explanation
Usually, you call from Flex some Java classes that reside within flex.war/WEB-INF/classes.
But what if you need to have them outside the flex.war folder, especially for deployment reasons ?
Then, you have to specify a path to the Flex servlet so it can find them. The way to do this is to add to the JVM configuration file the java.class.path system variable.
This apply to all J2EE servers.

[CSS]DIV+CSS居中显示

mikel阅读(1087)

div居中的设置该如何编写html/web/css” target=”_blank”>css?我们在传统的表格布局中,只要设置表格的居中属性就实现了居中的块元素。应用div html/web/css” target=”_blank”>css网站布局,div的居中该如何编写html/web/css” target=”_blank”>css来控制它呢?
  主要的样式定义如下:
  body {text-align: center;}
  #center { margin-right: auto; margin-left: auto; }
  首先在父级元素定义text-align: center;这个的意思就是在父级元素内的内容居中;
 对于IE这样设定就已经可以了。但在mozilla中不能居中。解决办法就是在子元素定义时候设定时再加上margin-right: auto; margin-left: auto;
  需要特别说明,请大家在布局中注意的是,如果你想用这个方法使整个页面要居中,建议不要套在一个div里,你可以依次拆出多个div,只要在每个拆出的div里定义margin-right: auto; margin-left: auto;就行了。

[教程]SQL Server服务器内存设置sp_configure

mikel阅读(1178)

sp_configure
显示或更改当前服务器的全局配置设置。
语法
sp_configure [ [ @configname = ] 'name' ]
[ , [ @configvalue = ] 'value' ]
参数
[@configname =] 'name'
配置选项的名称。name 的数据类型为 varchar(35),默认值为 NULL。Microsoft® SQL Server™ 理解作为配置名称一部分的任何独特的字符串。如果没有指定,则返回整个选项列表。
[@configvalue =] value
新的配置设置。value 的数据类型为 int,默认值为 NULL。
返回代码值
0(成功)或 1(失败)
结果集
如果不带参数执行,sp_configure 返回的结果集有五列,按字母升序排列选项。config_value 和 run_value 不需要相等。例如,系统管理员可能已经使用 sp_configure 更改某个选项,但尚未执行 RECONFIGURE 语句(对于动态选项)或重新启动 SQL Server(对于非动态选项)。
列名 数据类型 描述
name nvarchar(70) 配置选项的名称。
minimum int 配置选项的最小值。
maximum int 配置选项的最大值。
config_value int 通过 sp_configure 设置的配置选项值(sysconfigures.value 中的值)。
run_value int 配置选项的值(syscurconfigs.value 中的值)。
注释
sp_configure 支持的某些选项指派为”高级”。默认情况下,无法查看和更改这些选项;将 Show Advanced Options 配置选项设为 1,则这些选项可用。有关可用配置选项及其设置的更多信息,请参见设置配置选项。
使用 sp_configure 更改设置时,请使用 RECONFIGURE WITH OVERRIDE 语句使更改立即生效。否则,更改将在 SQL Server 重新启动后生效。
说明 SQL Server 中最小和最大的内存配置是动态的。不必重新启动服务器即可更改。
使用 sp_configure 显示或更改服务器级的设置。使用 sp_dboption 更改服务器级的设置,使用 SET 语句更改只影响当前用户会话的设置。
说明 如果对选项指定的 config_value 值过高,run_value 设置将反映这样的事实:SQL Server 使用默认的动态内存而不使用无效设置。
权限
在 sp_configure 上没有参数(或只有第一个参数)的执行许可权限默认授予所有用户。有两个参数的 sp_configure(用于更改配置选项)的执行许可权限默认授予 sysadmin 和 serveradmin 固定服务器角色。RECONFIGURE 权限默认授予 sysadmin 固定服务器角色和 serveradmin 固定服务器角色,并且不能传输。
示例
A. 列出高级配置选项
下面的示例显示如何设置并列出所有的配置选项。若要显示高级配置选项,请先将 show advanced option 设为 1。更改后,执行不带参数的 sp_configure 可以显示所有的配置选项。
USE master
EXEC sp_configure 'show advanced option', '1'
–Here is the message:
Configuration option 'show advanced options' changed from 0 to 1.
Run the RECONFIGURE command to install.
RECONFIGURE
EXEC sp_configure
B. 更改配置选项
下面的示例将系统恢复间歇设为 3 分钟。
USE master0
EXEC sp_configure 'recovery interval', '3'
RECONFIGURE WITH OVERRIDE

[教程]SQL Server服务器内存选项

mikel阅读(894)

服务器内存选项
使用两个服务器内存选项 min server memory 和 max server memory 重新配置缓冲池中 Microsoft® SQL Server™ 实例所使用的内存量(以 MB 为单位)。
默认情况下,SQL Server 能够可用系统资源动态改变它的内存需求。min server memory 的默认设置为 0,max server memory 的默认设置为 2147483647。可以为 max server memory 指定的最小内存量为 4 MB。
当 SQL Server 动态使用内存时,它要求系统定期地检测可用的物理内存数量。SQL Server 根据服务器活动增大或收缩高速缓冲存储器,以使可用物理内存保持在 4 MB 到 10 MB 之间。这就避免了 Microsoft Windows NT® 4.0 或 Windows® 2000 换页。如果有较少可用内存,则 SQL Server 将内存释放给 Windows NT 或 Windows 2000,后者通常继续使用可用列表。如果有更多可用内存,则 SQL Server 将内存再提交到高速缓冲存储器。SQL Server 仅在其工作负荷需要更多的内存时才增加高速缓冲存储器的内存;处于休眠状态的服务器不增大其高速缓冲存储器。
允许 SQL Server 动态使用内存是推荐使用的配置;然而,可以手工设置内存选项并且可以禁止 SQL Server 动态使用内存的能力。在设置 SQL Server 使用的内存量之前,应确定适当的内存设置,方法是从全部物理内存中减去 Windows NT 4.0 或 Windows 2000 以及 SQL Server 的任何其它实例所需要的内存(以及其它系统使用的内存,如果该计算机不为 SQL Server 专用)。这就是可以分配给 SQL Server 使用的最大内存量。
说明 如果您已经安装并且运行了全文检索支持功能(Microsoft 检索服务,亦即 MSSearch),那么您必须手工设置 max server memory 选项,为 MSSearch 服务运行预留足够的内存。max server memory 设置必须与 Windows NT 4.0 虚拟内存大小一起进行调整,以便使得保留给全文检索的虚拟内存是物理内存的 1.5 倍(不包括计算机中其它服务所需的虚拟内存)。应这样配置 SQL Server max server memory 选项,使得留有足够的虚拟内存满足全文检索内存需求。全部虚拟内存 -(SQL Server 最大虚拟内存 + 其它服务需要的虚拟内存)>= 1.5 倍物理内存。
手工设置内存选项
手工设置 SQL Server 内存选项有两种主要方法:
第一种方法,设置 min server memory 和 max server memory 为同一数值。该数值与分配给 SQL Server 的固定内存量相对应。
第二种方法,把 min server memory 和 max server memory 数量设置到一个范围段内。这种方法在系统或数据库管理员希望配置 SQL Server 实例,使其适应在同一台计算机上运行的其它应用程序的内存需求时很有用。
min server memory 保证了 SQL Server 实例使用的最小内存量。SQL Server 启动时不立即分配 min server memory 中所指定的内存量。但是,当内存使用由于客户端负荷而达到该值后,SQL Server 将无法从已分配的缓冲池中释放内存,除非减少 min server memory 值。
说明 不保证 SQL Server 分配 min server memory 中所指定的内存量。如果服务器上的负荷从不需要分配 min server memory 中所指定的内存量,则 SQL Server 将以较少的内存运行。
max server memory 则可防止 SQL Server 使用多于指定数量的内存,这样剩余的可用内存可以快速运行其它应用程序。SQL Server 启动时不立即分配 max server memory 中所指定的内存。内存使用随 SQL Server 的需要而增长,直到达到 max server memory 中所指定的值。SQL Server 无法超过该内存使用值,除非增加 max server memory 值。
重要 服务器启动时,在地址窗口扩展 (AWE) 内存模式下运行的 SQL Server 实例确实分配 max server memory 中所指定的全部内存量。有关 AWE 内存的更多信息,请参见管理 AWE 内存。
在应用程序启动和 SQL Server 释放内存之间将有一个较短的时间延迟,使用 max server memory 可以避免该延迟,从而可以提高其它应用程序的性能。仅当与 SQL Server 共享同一台服务器的新应用程序在启动时显示有问题时,才设置 min server memory。最好让 SQL Server 使用全部可用的内存。
如果手工设置内存选项,应确保适当地设置用于复制的服务器。如果服务器是一个远程分发者或者是一个出版者/分发者的组合,则必须为它分配至少 16 MB 的内存。
理想情况下,在不引起系统交换页面到磁盘的前提下,应尽可能多地分配内存给 SQL Server。该值因系统不同而有很大差别。例如,在一个 32 MB 系统中,分配 16 MB 给 SQL Server可能是合适的;在一个 64 MB 系统中,则可能适合分配 48 MB。
说明 当增大 SQL Server 内存数量时,应确保有足够的磁盘空间来容纳操作系统虚拟内存的支持文件(Pagefile.sys)。有关虚拟内存支持文件的更多信息,请参见 Windows NT 4.0 和 Windows 2000 文档。
指定的内存数量必需满足 SQL Server 的静态内存(核心开销、打开的对象、锁等等)以及数据缓存(亦称高速缓存)的需要。
如有必要,在系统监视器(在 Windows NT 4.0 中为性能监视器)中使用统计功能帮助调整内存值。应该只有在您添加或减少内存,或者改变系统使用方式时改变这些值。
虚拟内存管理器
Windows NT 4.0 和 Windows 2000 随时提供一个 4 GB 的虚拟地址空间,其中较低的 2 GB 地址空间对于每个进程是专用的,并可由应用程序使用。较高的 2 GB 地址由系统保留使用。Windows NT Server 企业版为每个 Microsoft Win32® 应用程序提供 4 GB 的虚拟地址空间,其中较低的 3 GB 地址空间是每个进程专用的,并可由应用程序使用。较高的 1 GB 地址由系统保留使用。
4-GB 的地址空间由 Windows NT V虚拟内存管理器(VMM)映射到可用的物理内存空间。取决于硬件平台的支持,可用的物理内存可以高达 4 GB。
Win32 应用程序(如 SQL Server)只能识别虚拟(或称逻辑)地址,而不是物理地址。在给定的某一时刻一个应用程序使用多少物理内存由可用的物理内存和 VMM所决定。应用程序不能直接控制物理内存。
象 Windows NT 4.0 或 Windows 2000 这样的虚拟地址系统允许过度提交物理内存,这使虚拟内存和物理内存的比率大于 1:1。因此,较大的程序可以运行在具有不同物理内存配置的计算机上。然而应用比组合平均工作集大得多的虚拟内存可能导致较差的性能。
SQL Server 可以将内存锁定为工作集。因为内存被锁定了,当运行其它应用程序时可能出现内存不足的错误。如果出现内存不足的错误,则可能是分配给 SQL Server 的内存太多。set working set size选项(通过 sp_configure 或 SQL Server 企业管理器设置) 可以使锁定内存为工作集功能失效。默认情况下,set working set size 选项处于禁用状态。
手工配置给 SQL Server 多于物理内存数量的虚拟内存会导致性能较低。而且,必须考虑 Windows NT 4.0 或 Windows 2000 操作系统的内存需求(大约 12 MB,因应用程序的开销而略有不同)。当 SQL Server 的配置参数上调时,系统的开销可能也会增长,因为 Windows NT 4.0 或 Windows 2000 需要更多的常驻内存来支持附加的线程、页表等。允许 SQL Server to 动态使用内存可以避免内存相关的性能问题。
min server memory 和 max server memory 是高级选项。如果要使用 sp_configure 系统存储过程改变该选项,必须把 show advanced options 设置为 1,该选项立即生效(无需停止并重新启动服务器)。