今天一早,觉得开发环境下的SQL SERVER 2005 数据库服务器占的内存资源过多,影响了。于是就打开Microsoft Sql Server Management Studio(MSSMS)修改配置。其中,在【连接】选项卡中,我将最大并发连接数修改为5(印象中在Mssql 2000中默认是这个),然后重新启动Mssqlserver服务。结果,在MSSMS中选菜单项【连接对象资源管理器】,使用【sa】或者集成【Windows身份认证】,均报如下错误:
-------------------------------------------------------------------------
已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。) (.Net SqlClient Data Provider)
有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=233&LinkId=20476
服务器名称: localhost
错误号: 233
严重性: 20
状态: 0
-------------------------------------------------------------------------
解决:
比较纳闷,由于此时无法连接到数据库(包括使用查询分析器),所以无法使用可视化操作界面或者相关存储过程修改配置值。所以只能使用命令行方式,以特定方式启动Mssqlserver服务。在命令行方式下执行:
net start Mssqlserver /f
此时,使用MSSMS连接即可。修改连接数为0(0=无限制)。然后重新启动Mssqlserver服务。尝试连接,一切OK。
遗留问题:
- Sql Server 2005系统自身占用的连接数是多少(可以使用sysprocesses,sp_who,@@connections等间接了解,但是不确切 )
- 在上个问题的基础上,一般的开发环境下,应为Mssqlserver设置多少的并发连接数为宜
性能分析:
由上的解决过程可以看出,影响效率性能的主要在于数据库的内存使用。在Mssqlserver 2005中,内存资源的占用最大的因素在于没有配置合适的最大/最小服务器内存(Max/Min Server Memory)。
Mssqlserver 在不高于最小内存时,不会自动释放内存原则上,不低于最小服务器内存时不会释放。如果不限制最大内存,那么有新的请求时,会继续请求分配新的内存。因此,如果设置不当,Mssqlserver 会极大的消耗系统资源,尤其是在系统运行一段时间后。所以要根据数据库服务器物理内存以及应用的情况,合适的指定最大、最小服务器内存。
微软建议:
- 应根据计算机上并发运行的服务来配置虚拟内存大小。
- 将虚拟内存大小至少配置为计算机中所安装物理内存的 3 倍。应确保有足够的磁盘空间来扩展操作系统的虚拟内存支持文件 (Pagefile.sys) 以容纳更多内存。
- 将 SQL Server max server memory 服务器配置选项配置为物理内存的 1.5 倍。
我的建议:
- 在专用的数据库服务器上,将最小服务器内存配置为物理内存的一半。以减少频繁的内存回收和交换。
- 如果物理内存足够大,将最大服务器内存配置为:物理内存 - 操作系统使用内存。为操作系统留出使用空间。
- 如果是生产环境,安装SQL SERVER 2005的服务器物理内存应不低于4G,建议8G以上。根据连接数情况定。
在配置好后,应重新启动Mssqlserver服务,配置项才会生效。
配置方式:
开始,运行:Sqlwb.exe
- 查看属性
- 查看内存
- 查看连接
命令行配置方式:
sp_configure 'show advanced options' , 1
RECONFIGURE
GO
sp_configure 'min server memory' , 1024
RECONFIGURE
GO
sp_configure 'max server memory' , 6144
RECONFIGURE
GO参考:
- Sql Server 联机帮助