一、规划并成功的完成SQLSERVER 2014的安装
1、规划系统
安装SQL server 前,第一步应该是合理的规划。以下是规划时的任务和要点:
① 当前工作负载的基准
② 估计工作负载的增长情况
③ 最低硬件和软件的需求
④ 合适的存储系统大小和I/O需求
⑤ SQLSERVER 版本
⑥ sql server 排序规则、文件位置、和tempdb大小
⑦ 服务账户选择
⑧ 数据库维护和备份计划
⑨ 最小联机时间和响应时间服务等级
⑩ 灾难恢复策略
1.1 硬件选择
参考官网:
①、处理器
处理器能力表现在处理器的时钟速度高、数量多。几个稍慢的处理器的性能表现要比单个快速的处理器好。新的处理器模型在一个物理插槽可以提供多个核心(多核处理器),多核处理器允许在同一个物理服务器内以命名实例或者虚拟机的形式运行sqlserver2014的多个实例。优势包括可以节省空间和电量消耗。
sqlserver 2012采用基于核心的许可,沿用到2014。
② 内存
内存是让数据库服务实现最佳性能的重要资源。良好的系统设计应该是会尽可能的从内存缓冲区中的数据页中读取数据,从而合理利用内存。
在决定需要多少内存时,一个不错的起点是:考虑sqlserver实例中托管的每个数据库的数据页数,以及查询执行统计信息,例如典型的工作负载使用的最小、最大和平均内存。目标应该是让sqlserver把尽可能多的数据页保存在缓存中,将尽可能多的执行计划保存在内存中,以避免从磁盘读取数据页以及编译执行计划,这些都是很高的开销。
另外需要知道的是具体SQL server 版本对内存的限制。SQL server 2014企业版支持2TB RAM,标准版和BI支持128G的RAM,Express支持1GB的RAM。
SQL server 2014引入一个新功能——内置的内存联机事务处理(OLTP)。只限制在企业版中使用。现在数据可以完全保存在内存中,从而降低了访问磁盘带来的I/O开销。
③ 存储系统
数据库在规划存储系统的时候,要考虑自己对可用性、可靠性、吞吐量和可扩展性的需求。
为了测试和验证存储系统的性能,需要收集一些重要的指标信息。例如每秒最大的I/O请求数(IOPS)、吞吐量(MBps)和I/O延迟。
美妙请求数(IOPS):存储系统在一秒钟可以处理的并发请求数。这个数值越搞越好,对于单个15K RPM的SAS驱动器,通常应为150~250IOPS;对于企业SSD和SAN,通常应为1000~100 0000IOPS。
吞吐量(MBps):存储系统在1秒钟内可以读写的数据大小。数值越高越好。
I/O延迟(ms):I/O操作之间的时间延迟。这个值最好为0或者接近0.
可以通过一些免费的工具来收集这些指标。例如SQLIO,SQLIOSim,IOMeter和CrystallDiskMark。详见文档:
SQL server安装主要采用DAS和SAN两种存储系统。
直连式存储(Direct Attached Storage,DAS)
这类存储系统中,磁盘驱动器位于服务器机箱内,直接连接到磁盘控制器。它们也可以位于外部,通过缆线直接连接到主机总线适配器(HOST Bus Adapter,HBA)上。并不需要额外的设备,例如交换机。
DAS的主要优势在于易于实施且维护成本低,主要缺点在于扩展性有限。虽然近年来,DAS系统开始具有一些原本SAN才有的功能,但是一些局限性依然是存在的,例如可以扩展到和管理的磁盘驱动器数和卷大小,可以连接到的服务器数,以及存储单位和服务器之间的距离。
服务器链接和和距离是DAS和SAN最大区别。DAS通常要求存储单位于服务器之间存在直接的物理连接,这就限制了可以同时连接到的服务器数,以及存储单位和服务器之间的距离(通常只有几英尺)。
存储区域网络(Storage Area Network,SAN)
这是一种专用的网络,将作为直连式存储提供给服务器使用的存储设备相互连接起来。该存储设备网络的连接方式有2种:通过称为fabric交换机的告诉专用光纤通道(Fibre Channel,FC),或者通过使用常规的以太网交换机的iSCSI协议。
SAN主要优势之一是通过使用专用的广域网(WAN)和TCP/IP路由,可以跨越大片地理区域。这就允许在灾难恢复时,相隔遥远的数据中心之间复制数据,以及其他一些功能。
SAN为关键任务数据系统提供了高可靠性和可扩展性。
和DAS相比,合理架构的SAN可以提供好得多的吞吐量,并且可以降低I/O延迟,处理更多的磁盘阵列。主要缺点在于成本更高,并且实现和维护的难度更大。
选择合适的存储系统
一个关键的因素是存储系统中使用的磁盘技术,以及这些磁盘驱动器是如何排列在一起的。DAS和SAN都是用磁盘驱动器的阵列,并且通常把他们配置为存储池从而把它们作为单个实体提供给服务器使用。
磁盘驱动器
为了满足较大的吞吐量需求,经常需要把读写操作分散到大量转速快的磁盘驱动器上。
分散IO操作意味着群组到一起的每个磁盘驱动器上存储少量的数据。这种分布式存储中,没有那个磁盘驱动器包含完整的数据。因此,一次磁盘失败意味着全部的数据都会丢失!一定要考虑可靠性,可以采用一种称为数据阵列或RAID的特殊方法来组织磁盘,以同时满足吞吐量和可靠性需求。下表是SQL server环境中常用的磁盘RAID级别。
RAID级别 | 描述 |
RAID 0 | 也称为条带集或条带卷。将两个或更多个磁盘合在一起,形成单个较大的卷。不能容错,读写快速 |
RAID 1 | 也称为镜像驱动器。将相同的数据写到两个驱动器中。即使其中一个磁盘失败,也不会丢失数据。写操作较慢。只能使用原始存储空间的一半。 |
RAID 1+0 | 也称为RAID 10.条带集中的镜像集。写操作性能良好,能够容错。只能使用原始存储空间的一半。 |
RAID 0+1 | 镜像集中的条带集。容错性比RAID 10稍差。写操作性能良好。 |
RAID 5 | 能够容忍其中一个磁盘失败。写操作被分布到各个磁盘。读操作较快,写操作较慢。部分原始存储空间将无法使用。 |
RAID 6 | 能够容忍两个磁盘失败。读操作较快,写操作比RAID 5 更慢,因为奇偶校验计算增加了开销。部分原始存储空间将无法使用 |
二、完成安装后必须进行的配置
1、内存
最小服务器内存,是指分配后,SQL Server不会返回给操作系统的内存量。但是,SQL Server并不是在立即启动之后立马分配最小内存,实际上,只有在收到请求时,SQL Server才会分配内存,这个内存可以是大于也可以是小于最下内存值。一方面,应该避免向操作系统释放太多内存,这会导致SQL实例缺少足够内存,另外一方面,最大服务器内存不应该等于或者大于总的服务器可用内存,一般来说,应该比总的服务器内存少于4GB。
2、网络数据包大小
SQL Server默认网络数据包大小是4096字节。把此值设置大点可以改进需要执行大量批操作和传输数据的性能。如果服务器硬件和网络基础支持并启用Jumbo Frames,那么最好把网络数据包大小增加为8192字节。
查看和启用Jumbo Frames(有些服务器叫Jumbo Mtu 或者巨帧):
查看和修改网络数据包大小:
3、即时文件初始化
每当数据库文件被创建或者需要增长时,操作系统都会用0填充数据库文件,然后新的空间才可以被写入。在填充0之前,所有的写操作都会被阻塞!为了避免此类阻塞和等待,可以启用即时文件初始化。有两种途径:1,将SQLServer的服务账户添加到服务器上用户权限管理下的执行大量维护任务策略(有时也叫执行卷维护任务)的用户列表中去;2、或者将具有执行大量维护任务权限的用户(一般是administrator)作为SQL Server的服务账户:
赋予SQL Server服务账户维护大量任务的权限,运行框输入secpol.msc,回车打开‘本地安全策略’:
更改SQL Server的服务账户方法,打开服务目录:
4、tempdb和用户数据库
tempdb部分用途如下:
- 用触发器批量加载
- 公共表表达式
- DBCC操作
- 事件通知
- 索引重建,包括SORT_IN_TEMPDB、分区索引排序以及联机索引操作
- 大型对象类型变量和参数
- 多活动结果集操作
- 查询通知
- 行版本控制
- 表变量
- 排序操作
- 溢出操作
可知,tempdb需要特别考虑和计划。对于大量使用tempdb的环境,创建额外的tempdb文件可以显著提升性能。根据负载,可以考虑创建于每个逻辑CPU成正比的大量tempdb文件,是SQL Server计划程序工作线程可以松散对其到某个文件。一般来说,可接受的tempdb文件和逻辑CPU的比率在1:2和1:4之间。
tempdb位置十分重要,tempdb文件应该与数据库文件和日志文件分隔开,以避免出现IO争用。如果使用到了多个tempdb文件,可以考虑将每个tempdb文件隔离到自己的LUN和物理磁盘上(关于LUN,以后会详述)。此外考虑将tempdb的初始大小设为一个合适的值,默认大小的话可能会导致昂贵的文件增长。这里提供一个不算精确的估计tempdb初始大小的方法:工作负载中的查询计划中的查询操作符报告的行数和行大小用来估计操作符所需要的空间,实际或估计的行数乘以估计行大小,用于计算所需空间。当然,只有经验和测试才是最好的保证。
用户数据库初始大小应该足以处理在足够长的时间内预计发生的事务量,避免频繁的增加数据库大小。如果启用了自动增长功能,应该选择足够大的文件大小增量,避免频繁进行自动增长操作。
5、SA账户
应该为SA账户设置强密码,并且从不使用该密码。然后禁用SA账户
6、TCP/IP端口
SQL SERVER 默认使用1433端口来通信;而命名实例则在服务启动时被动态分配端口。有时候,为了安全起见,需要修改默认端口。可以通过‘SQLServer配置管理器’来实现:
7、服务补丁和更新
在生产实例中不要启动自动更新,在吧更新运用到生产实例之前,应该在受控的测试环境中测试所有的更新
8、备份
必须要为系统和用户数据库定义备份计划和备份的存储位置。如果使用了加密,还要备份加密秘钥。
- 总是应该在共享网络驱动器或备份设备集上创建备份文件,而不应该在备份的服务器上进行备份。
- 应该以完全或者增量方式备份
- 此外还需要定义备份保持策略以避免存储不必要的历史备份