标签归档:优化

mssql sqlserver 从sql引擎的缓存中获取带参数的已编译的sql执行计划脚本的方法分享


摘要:
下文讲述从sql引擎中获取缓存中带参数的执行计划的方法分享,如下所示:
实验环境:sql server 2008 R2


在sqlserver数据库中,我们经常听同事讲:

1.今天查询好慢好慢,当我们进入系统运行查询时,发现速度非常快(或我们把脚本放入查询分析器运行,速度也非常快)
2.这个查询有时候好慢,有时候好快这些疑惑时.

此时我们需获取缓存中的执行计划,然后对相关查询所涉及的执行计划进行分析诊断,达到对sql运行提速的方法,如下所示:

   select 
b.[text] as [脚本信息]
,db_name(b.dbId) as [数据库名称]
,object_name(b.objectId) as [对象名称]
,d.query_Plan as [xml执行计划] ---双击可查看详细执行计划
,a.creation_time as [创建时间]
,a.last_execution_time as [最后执行时间]
 
FROM sys.dm_exec_query_stats a
CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) b
CROSS APPLY 
sys.dm_exec_text_query_plan(a.plan_handle, 
a.statement_start_offset, a.statement_end_offset) c
CROSS APPLY sys.dm_exec_query_plan(a.plan_handle) d
WHERE b.ENCRYPTED <> 1 

mssql_sqlserver_执行计划_8529

mssql_sqlserver_执行计划_8529



注意事项:
在查询出来的结果上,双击相应的执行计划,查阅执行计划的相关信息

mssql sqlserver sql查询优化处理方法分享之(30秒慢查询优化)


摘要:
下文讲述一次sql慢查询的优化方法分享,如下所示:
实验环境:sql server 2008 R2


前几天同事反馈系统无法正常使用,经过在生产环境中多次跟踪发现,由于sql查询超时导致无法正常的返回可用数据,下文将sql语句记录如下

   ---例:
   --- [maomao_a]表80W行数据
   --- [maomao_b]表1000W行数据
   
   select * from [maomao_a] a left join 
    [maomao_b] as b  on a.keyId = b.keyId 
    where a.keyId in 
    (
        SELECT DISTINCT keyId FROM  [maomao_a]   
        WHERE extendkeyId  IN (99,100,119) GROUP BY extendkeyId HAVING count(keyId) > 8
    )

从上面的例子我们可以看出,首先进行关联查询,然后进行子查询–子查询中还进行相关的群组操作,
—-进行对上面的sql脚本分析:
1.单独进行 a 和 b表的关联查询速度很快
2.单独进行子查询速度也很快

当我们把子查询嵌套到关联查询中时,查询就变得非常慢
———–解决方法—–
我们将子查询单独生成一张数据表C
然后将a和b 生成的结果同数据表C进行关联,达到快速生成数据的效果。

mssql sqlserver 优化查询语句的方法分享


摘要:
在erp系统中,插入操作往往是性能最好的sql语句, 通常性能瓶颈会发生在select 查询语句中,下文将讲述select的调优方法,如下所示:
实验环境:sql server 2008 R2



一、索引是否合理,是否存在缺失索引

我们可通过查询计划,获取出缺失的索引,然后建立合适的索引,将索引信息中包含合适的列信息,避免出现rid二次查找。
查看执行计划,采用hint指定select所使用的索引。

1.1 表中主外键都应加上索引
1.2 索引尽量建立在数据量小的字段上
1.3 频繁操作的表上,不要建立过多的索引
1.4 定期检查索引的使用情况及系统缺失索引的情况
1.5 复合索引字段尽量少于4个字段


二、限制返回合理的数据行和数据列

返回所需的数据列,禁止使用*返回所有列
在数据表的连接上,尽量使用小表连接大表
删除检索中的计算字段,减轻数据库服务器的压力,使数据库服务器性能达到最佳
检查服务器内存是否能装载下”单表数据”,是否符合当前业务场景
检查服务器硬盘速度是否够快

三、调整业务模式

3.1 调整业务数据存储,使业务数据存储满足报表需求
3.2 制作报表系统,将业务数据转换为报表所需的数据格式,减少检索时的压力,提升select的查询速度