MS_SQL_Server_数据库性能优化方法总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.列出数据库服务器、Web服务器的基本的硬件配置,如CPU、内存等。

2.检查数据库服务器是否真正启用了AWE内存。

(1) 启用AWE:数据库服务器检查C:\boot.ini文件,需要配置"/PAE"(*重启电脑才能生效),如下:

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise"

/noexecute=optout /fastdetect /PAE

(2) 开启sql server 服务用户的,内存中锁定页面权限 (*重启电脑才能生效)在“服务管理”中查看 SQL SERVER 服务登录账户,默认是本地系统帐户(System)。然后在运行 gpedit.msc ,选择计算机配置->windows 设置->安全设置->本地策略->用户权限分配->内存中锁定页面。添加SQL SERVER服务的登录用户到里面去。

(3)启用数据库AWE内存,以服务器8G内存为例,一般设置如下,最小2G,最大6G(重启SQL SERVER服务即可):

(4)跟踪数据库性能“Total Server Memory ”的使用情况,看看数据库真正使

用的内存,越接近为数据库分配的最大内存越好。

或使用如下语句,查询数据库的内存使用情况:

use master

go

select * from sysperfinfo where counter_name like '%Total Server Memory(KB)%'

go

3.Web服务器监控项:

4.数据库服务器监控项:

5.系统运行时,检查数据库的内存、cpu、页面错误情况。

(1)查看服务器“性能”,跟踪“Total Server Memory ”的使用情况,看看数据库真正使用的内存,越接近为数据库分配的最大内存越好。

(2)从任务管理器中查看“sqlservr.exe”进程的“内存使用”和“页面错误”情况,一般此处的内存使用一般比(1)中使用的内存要小,页面错误也是越少越好。

(3)CPU的使用情况:如果发现CPU一直比较高,经常达到90%以上,此时需考虑可能是某些存储过程中逻辑有问题,数据库需要不停的运算,导致CPU较高。

6.优化数据库索引。

(1)系统原来每个索引的索引项很多,而且存在和其他索引有交叉的现象。可将主表如: Transfer_TransactInfo的非聚集索引全部删除,重新建立。

(2)跟踪数据库缺失的索引,参考实际的存储过程逻辑,确定可能需要建立哪些索引,索引项一定不要交叉。参考查找缺失的索引脚本如下:

select * from(

select [Total Cost]=ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)

,db_name(d.database_id) dbname,object_name(d.object_id)

tablename,d.index_handle,

d.equality_columns,d.inequality_columns,d.included_columns,d.statement as

fully_qualified_object,gs.*

from sys.dm_db_missing_index_groups g

join sys.dm_db_missing_index_group_stats gs on

gs.group_handle=g.index_group_handle

join sys.dm_db_missing_index_details d on g.index_handle=d.index_handle

--where d.database_id=d.database_id and d.object_id=d.object_id

) as tt

where dbname='whOA' ORDER BY [Total Cost] desc ,tablename DESC

(3)在用户访问量较大时,使用SQL Server Profile跟踪一段时间(半小时左右),找出执行时间超过3秒以上的脚本,开启“执行计划”,查看每个语句的索引使用情况(能否有效缩小数据量),逐个优化。

(4)如果还有问题,可查找耗CPU时间较多的SQL语句,然后优化。参考脚本如下:

SELECT TOP 50

sql_handle,total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],

qs.total_worker_time/qs.execution_count/1000 as [平均消耗CPU 时间(ms)]

FROM sys.dm_exec_query_stats qs

ORDER BY [平均消耗CPU 时间(ms)] DESC ,[运行次数] desc

select * from

sys.dm_exec_sql_text(0x0200000065400C20DC86E9D045BD6AFA56960F0B05A71657)

经验:

1.一般公文处理只要优化“流转表(Transfer_TransactInfo)”的索引就会达到很

好的效果,附带在优化几个其他表的索引。

2.存储过程优化:

(1)存储过程中未进行锁降级的,可以先导出所有的主要的存储过程,将锁降级的语句加上,如with(nolock)、with(rowlock)。

(2)一般需要重点优化的存储过程有:发件执行情况列表、来件执行情况列表、已签收列表、未签收列表、待办来文列表

(3)优化思路:有的存储过程可去除查询两次来获取列表总数和当前页数据的情况,改用@@rowcount来获取。可参考马鞍山的优化成果。

3.各项目的优化成果脚本都放在各自的项目ST的07.Test\ DailyBuild下,命名以“日期_数据库性能优化_优化描述_项目简称.txt”,可以参考一下。

相关文档
最新文档