标签归档:sql优化

mssql sqlserver 2008 sql查询脚本导致CPU升至100%的解决方法分享


摘要:
下文讲述一次sql脚本导致CPU飘高的处理方法,如下所示:
实验环境:sql server 2008 R2


今天有同事对四张千万级大表进行join查询,导致CPU升至100%,影响系统的正常使用,
下文讲述通过将sql查询设置为并行操作后,CPU可正常工作,设置方法如下所示:

   sp_configure 'show advanced options',1 reconfigure with override

   sp_configure 'max degree of parallelism',4 reconfigure with override

mssql sqlserver 影响sql脚本性能的因素


摘要:
下文将讲述影响sql脚本性能的相关因素,如下所示:



索引应用

1.sql检索脚本上where过滤列是否加入合理索引
2.数据表突然增大,导致索引计数不准确,查询计划走错索引
3.过滤列上加入函数,导致过滤条件未走索引 where dbo.fun(test) >88



循环处理处理

循环处理是否涉及大循环(大遍历)
循环尽量采用不锁表的方案(结合实际业务),避免循环的时候出现锁表,导致死循环



临时表与表变量

使用临时表或表变量时,先预估表大小。
在sqlserver中 表变量不受事务控制,写入数据的效率比临时表高;
表变量不会产生计数信息,sqlserver无法预估查询开销,
如果临时表参与数据查询时,我们建议使用临时表作为数据缓存(因为查询分析器可以自动选择最优方案)



其它注意事项

尽量使用短sql
尽量使用短事务
返回可用数据,尽量不返回无需使用的数据占用服务器带宽和网络压力
select 查询中少用 “不等于” 或”not” 这种关键字
sql脚本中不做无用的排序操作
不向客户端返回过多无用的数据
使用联接代替exists(和in)
减少or条件的写法,多使用union all

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的查询速度