ITKeyword,专注技术干货聚合推荐

注册 | 登录

SQL Server安全及性能优化

jiangtongcn 分享于 2012-03-08

推荐:SQL Server数据库性能优化之SQL语句篇

      近期项目需要,做了一段时间的SQL Server性能优化,遇到了一些问题,也积累了一些经验,现总结一下,与君共享。SQL Server性能优化涉及到许多方面,如良好

2020腾讯云“6.18”活动开始了!!!(巨大优惠重现!4核8G,5M带宽 1999元/3年),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1059

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

 word格式粘贴过来变形,所以贴地址了
下载地址: http://download.csdn.net/detail/jiangtongcn/4121158

修补漏洞

     安装程序补丁修补漏洞

              随时关注微软官方网站补丁升级

     关闭不必要的端口

              clip_image002

关闭联必要的服务

     数据库引擎

SQL Server Analysis Services

SQL Server Reporting Services

SQL Server Integration Services

SQL Server 代理

SQL Full-text Filter Daemon launcher

SQL Server Browser

              同时开启所有服务系统性能会变得很差,根据需要手动启动或者禁用某个服务

DTC: Distributed Transaction Coordinator(分布式事务处理协调器),用于协调多个数据库、消息队列、文件系统等等资源管理器的事务,由于内部开发中并不使用这个功能,远程数据库服务器上也并不经常使用,因此建议关闭这个服务

禁用不使用的协议

       clip_image004

       Shared Memory 默认为已启用状态,这个协议只能用于本地连接,不能用于远程连接,一般用于其它协议出问题的时候管理作诊断使用

TCP/IP

禁用不需要使用的协议,减少网络攻击对象

减少监听的网卡和IP地址

改变监听端口号

安全地设置账户

Windows身份验证[微软推荐的方式]

       优势:

       1.访问SqlServer时速度更快,不用输入用户名和密码

       2.可以利用Windows系统的自身工具和安全策略管理账户

       3.安全确认和口令加密、审核、口令失效、最小口令长度和账号锁定

SqlServer身份验证

       1.将sa账户名更改为其它账户名比如nocial,防止黑客利用sa进行攻击

       2.删除不使用的账户

       3.对已有账户设置安全密码[强制密码规则]

       4.限制登录->远程登录、匿名登录

       5.限制用户角色和权限,一般将权限设置到最低。设置角色的时候不要为public角色授予任何权限,并且从sysadmin这个角色中删除windows的administrators组,提高系统安全性。

      

删除不必要的数据库对象

     删除危险的存储过程

                     xp_cmdshell:执行操作系统命令,这是一个系统后门[可以移动文件位置、创建用户、提升用户权限],建议不需要则删除掉。

     ole自动化存储过程

       clip_image006

任务管理存储过程

clip_image008

强化文件和目录安全

       数据库最终以文件的形式存储在文件系统中

     使用NTFS设置权限

限制共享【不能设置为完全控制】

      

及时审核日志

       sqlserver的审核机制可以帮助跟踪并且阻止系统中没有授权的用户他的行为。比如没有授权的用户登录系统会阻止这次登录,并且把这次操作给记录下来。审核机制既能跟踪失败记录也能跟踪成功记录。所有的数据库平台均在不同程度上提供了审查功能。

     跟踪用户行为

     保护数据库

数据库性能优化

       数据库的性能优化主要有两个方面:减少查询比较次数、减少资源的征用。

     使用工具Sql Server Profiler优化数据库的性能,减少资源的征用

SqlServer Profiler的功能

clip_image010

Sql Server Profiler的用法

l         定义跟踪

n         登录连接、失败和断开

n         Select、Insert、Update和Delete语句

n         SQL批处理的开始或结束

n         写入到Sql server错误日志的错误

n         安全权限检查

l         Profiler执行的事件

       让Profiler监视我们感兴趣的事件,可以监视的事件太多,监视太多会大大降低性能和增大表数据,只监视与数据库的性能密切相关的哪些事件。常见的感兴趣的事件:

n         执行查询的性能

n         单个用户或应用程序的活动

n         逻辑磁盘的读写

推荐:SQL Server 软件测试中数据库的性能优化

设计一个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事。在开发工具、数据库设计、应用程序的结构、查询设计、接口选择等方面有多种选

n         语句级别上的CPU占用

l         Standart模板的事件类

clip_image012

优化数据库性能可以从五个层次来进行:

n         优先级一:减少数据的访问【减少磁盘访问】

n         优先级二:返回更少数据【减少网络传输或磁盘访问】

n         优先级三:减少交互次数【减少网络传输或磁盘访问】

n         优先级四:减少开销【减少CPU及内存开销】

n         优先级五:利用更多资源【增加资源】

技术上从四个方面来解决性能优化问题

1、调整数据库结构设计

2、调整应用程序结构设计

3、调整数据库SQL语句

4、调整服务器内存分配

如果不熟悉sqlserver可以使用数据库引擎优化顾问来对数据库提出优化建议,然后通过系统管理的修改达到目的。

数据库引擎优化顾问

l         数据库引擎优化顾问介绍

n         分析一个或多个数据库的工作负荷和物理实现,工作负荷可以是优化的sql语句或者sqlserver profiler的跟踪文件和数据表。我们可以在运行引擎优化顾问前运用sqlserver profiler记录一些事件,然后将跟踪结果存储为文件或者数据表,然后把这些提供给数据库引擎优化顾问,让它去分析。

n         提出合理的物理设计结构,物理设计结构包括数据库中的索引、索引视图、非聚集索引、聚集索引视图等等。对工作负荷进行分析后,数据库优化顾问会建议添加删除修改数据库的物理设计结构。推荐一组合理的物理结构以降低工作负荷的开销。从而提高数据库的性能

数据库性能优化的常见问题

如何发现问题,如何分析导致性能降低的原因仍然是数据库管理员要掌握的知识。

事务占用资源的时间过长,造成阻塞

       许多用户同时访问数据库的时候会产生大量事务,许多用户同时竞争一个资源导致占用资源的时间过长,造成阻塞。从而降低了数据库执行效率。产生这样的现象的原因如下:

       1、多表连接查询,查询期间占用多个表

2、事务需要占用太多资源,容易出现多个事务占用对方资源的状况。从而导致死锁

 

解决之道:

       1、避免多表连接查询,联合过多的表会在查询中占用过多的资源。很容易因为别的事务占用资源而相互等待。

       2、使用统一的SQL语句规范,特别是访问表的顺序要保持一致,这样可以避免互相占用资源而导致的死锁。

不合理的数据文件设置,影响事务处理的性能

       当事务处理产生大量数据的时候,数据文件的大小如果设置不合理将导致数据文件的不断扩展,这也会影响到事务处理的性能,进而影响到整个数据库的性能。

1、频繁操作数据库,导致日志文件增长的过快,因为日志文件记录数据库的原始操作。所以它的增长速度比数据文件要快得多。当日志文件的增长大小设置不合理的时候会导致频繁地扩展文件。从而影响性能

2、查询操作比较频繁,系统数据Tempdb的大小设置不合理。

       查询操作比较频繁的时候系统数据Tempdb增长得会比较快,因为查询所产生的临时数据都存放在这个数据库上。如果Tempdb过小当查询数据量较大的时候Tempdb会自动扩展,如果遇到频繁的查询会导致Tempdb不断扩展,从而影响系统性能。这种情况我尽可能地使查询的返回结果比较小

3、大量插入数据,导致数据文件增长过快。不要设置数据文件的自动收缩,它会在忙碌的系统上导致不必要的性能开销。所以如果没有特别需要不要设置数据库的自动收缩。最好采用手动收缩。      

磁盘数据组织不合理,导致磁盘的访问次数过多

数据库的磁盘访问都是按照页来访问数据的,无论访问的数据再少都是以页为单位读取,1页为8K。所以如果将经常访问的数据放在一起,数据库读取尽量少的页面就能够完成读取操作。这样效率自然就提高了。也减少了磁盘头的来回移动。否则会多次读取硬盘页面导致访问的效率降低。

clip_image014

对于表A和表B、表C、表D,如果经常查询表A和表B中的数据,那么可以将他们放在同一个文件组M中;如果经常访问表C和表D中的数据可以将他们放在同一个文件组N中。这样读取效率就比较高,因为一次读取就可能包含了两个表中的数据,因此提高了查询效率。要解决“磁盘数据组织不合理,导致磁盘的访问次数过多”这个问题,我们可以将经常读写的数据放置在不同的磁盘上,也就是将经常在一起被多表连接查询的表放在同一个文件组上。这里强调:这里反复提到的“不同的磁盘”指的的是不同的磁盘,而不是同一个硬盘的不同分区。

批量导入数据的时候,要进行特殊设置

当用户需要大批量导入数据的时候会突然增加很多日志记录,并且如果数据表上有索引,数据表每增加一条记录就会在索引上增加一条数据从而降低插入的性能。解决方案:

       1、大批量导入数据的时候设置数据库的恢复模式为“大容量日志恢复模式”

       2、导入前禁用索引,导入完毕后重建索引。

推荐:SQLSERVER SQL性能优化

1.选择最有效率的表名顺序(只在基于规则的优化器中有效)         SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(

 word格式粘贴过来变形,所以贴地址了 下载地址: http://download.csdn.net/detail/jiangtongcn/4121158 修补漏洞      安装程序补丁修补漏洞               随时关注微软官方网站补丁升级    

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。