一、检查即时初始化是否开启, 没有开启则开通相关权限并开启。相关文档:点击打开链接
二、检查SQL Server中的计算机名与实际计算机名是否一致,不一致则应该修正(注:修改完成后要重启SQL Server服务才生效):
IF SERVERPROPERTY('servername') <> @@servername
BEGIN
DECLARE @server SYSNAME
SET @server = @@servername
EXEC sp_dropserver @server = @server
SET @server = CAST(SERVERPROPERTY('servername') AS SYSNAME)
EXEC sp_addserver @server = @server, @local = 'LOCAL'
PRINT 'ok'
END
SELECT @@SERVERNAME, SERVERPROPERTY('servername')
三、tempdb文件设置为8个固定的数据文件(主要是优化并发性能)和一个日志文件, 类似下图:
--大的平台8*8G--8*12G,小的8*1G或8*2G, 要导大型报表的应该大一些。 如果磁盘比较紧张,可以设置稍小一点,后面监控tempdb的使用情况再来修改。
--但还是尽量在前期做好,后面修改需要重启SQL Server服务,比较麻烦。
use master
declare @path nvarchar(max),@size nvarchar(max),@sql nvarchar(max),@FILEGROWTH nvarchar(max)
set @path=N'f:\tempdb\2014\' --tempdb文件位置,注意路径最后的斜杠
set @size=N'128' --单个文件大小,单位MB
set @FILEGROWTH=N'64' --tempdb日志文件增长量,单位MB
set @sql='ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N''tempdev'', SIZE = '+@size+'MB , FILEGROWTH = '+@FILEGROWTH+'MB)'
exec sp_executesql @sql
set @sql='ALTER DATABASE [tempdb] ADD FILE ( NAME = N''tempdev2'', FILENAME = N'''+@path+'tempdev2.ndf'' , SIZE = '+@size+'MB , FILEGROWTH = '+@FILEGROWTH+'MB)'
exec sp_executesql @sql
set @sql='ALTER DATABASE [tempdb] ADD FILE ( NAME = N''tempdev3'', FILENAME = N'''+@path+'tempdev3.ndf'' , SIZE = '+@size+'MB , FILEGROWTH = '+@FILEGROWTH+'MB)'
exec sp_executesql @sql
set @sql='ALTER DATABASE [tempdb] ADD FILE ( NAME = N''tempdev4'', FILENAME = N'''+@path+'tempdev4.ndf'' , SIZE = '+@size+'MB , FILEGROWTH = '+@FILEGROWTH+'MB)'
exec sp_executesql @sql
set @sql='ALTER DATABASE [tempdb] ADD FILE ( NAME = N''tempdev5'', FILENAME = N'''+@path+'tempdev5.ndf'' , SIZE = '+@size+'MB , FILEGROWTH = '+@FILEGROWTH+'MB)'
exec sp_executesql @sql
set @sql='ALTER DATABASE [tempdb] ADD FILE ( NAME = N''tempdev6'', FILENAME = N'''+@path+'tempdev6.ndf'' , SIZE = '+@size+'MB , FILEGROWTH = '+@FILEGROWTH+'MB)'
exec sp_executesql @sql
set @sql='ALTER DATABASE [tempdb] ADD FILE ( NAME = N''tempdev7'', FILENAME = N'''+@path+'tempdev7.ndf'' , SIZE = '+@size+'MB , FILEGROWTH = '+@FILEGROWTH+'MB)'
exec sp_executesql @sql
set @sql='ALTER DATABASE [tempdb] ADD FILE ( NAME = N''tempdev8'', FILENAME = N'''+@path+'tempdev8.ndf'' , SIZE = '+@size+'MB , FILEGROWTH = '+@FILEGROWTH+'MB)'
exec sp_executesql @sql
set @sql='ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N''templog'', SIZE = '+@size+'MB , FILEGROWTH = '+@FILEGROWTH+'MB )'
exec sp_executesql @sql
四、检测数据库服务器各个磁盘的 IO 。工具见 点击打开链接 。
如果DB所在的磁盘IO性能太差(seq read<150MB/s, 4k read<2MB/s, 如果用于alwayson或重要服务器, 至少应该翻倍才行),必须及时反馈和跟进。
五、设置正式数据库的增长量。
-- 一般设置为 50MB~150MB (按上面的IO检测性能来,如果够好还可以设置大一些)。
-- 设置为固定值MB增长,太大太小都会影响性能;设置为按百分比增长,则可能影响性能,浪费磁盘空间、容易导致磁盘空间爆满。
六、设置正式数据库的基于行版本的控制级别。
这一步必须在没有连接上任何应用时做,因为一旦连接上很可能就设置不了。
连接上了生产环境的应用,则应该在晚上或者其它基本没有用户使用时操作。
方法1:脚本操作:
--注:必须设置好当前库,只在当前库上执行!无需改任何参数!
--1. 杀当前进程之外的所有进程
DECLARE @sql NVARCHAR(MAX),@currDbName NVARCHAR(100)
SET @currDbName=DB_NAME()
SELECT @sql=REPLACE(
(SELECT 'kill '+CAST(spid AS NVARCHAR(50))+';' FROM sys.sysprocesses WHERE dbid=DB_ID(@currDbName) AND spid!=@@SPID FOR XML PATH(''))
,';','
')
PRINT @sql
EXEC (@sql)
--2. 修改行版本控制级别
SET @sql='ALTER DATABASE '+@currDbName +' SET ALLOW_SNAPSHOT_ISOLATION ON'
EXEC (@sql)
SET @sql='ALTER DATABASE '+@currDbName +' SET READ_COMMITTED_SNAPSHOT ON'
EXEC (@sql)
--3. 查看是否已修改过来(两个1才是正确的)
SELECT [name],snapshot_isolation_state,snapshot_isolation_state_desc,is_read_committed_snapshot_on
FROM master.sys.databases
WHERE NAME=@currDbName
方法2:如果脚本无法生效,那就得改用单用户模式进入再操作, 这就不赘述了。
注:1. 方法1对 alwayson 无影响; 2. 方法2无法对配置了Alwayson、镜像的库进行操作。
七、增加一个专用于监控(主要是SqlClr存储过程来监控cpu)的数据库,名称格式:monitor_地区_项目_本地ip(或外网ip) 。
八、数据库最大内存设置
物理内存(GB) |
设置sqlserver最大内存(GB) |
<=4 |
物理内存 - 1 |
>4, <=16 |
物理内存 - 2 |
>16, <=128 |
物理内存 - 3 |
>128, <=256 |
物理内存 - 4~5 |
>256 |
物理内存 - 5~6 |
九、WinServer2008安装framework3.5 sp1(自身带),安装framework4.5.2 framework4.5.2