SQL Server性能调优杂记(一)----傻瓜机的失效效应
2008-12-08 10:15:23 来源:WEB开发网最近,下面的一个项目遇到紧急问题,我这匹老马也要和年轻人一起奋斗一下。问题是当把一倍压力数据灌入数据库,很多查询都奇慢无比。
说道这里必须要说一下性能问题的基本准则。性能问题Tunning的次序
1)架构设计(软件架构和数据库设计,糟糕的设计几乎是致命的)
2)代码缺陷(导致性能问题的90%)
3)增加索引(这个是要根据实际情况来确定)
4)资源调优(CPU->内存->Disk IO)
这里网络不是考虑因素。
把程序的SQL文拿出来一看,有的一看一堆子查询构成的JOIN,基本上一眼就可以断定,需要重写。我们这个运用系统把SQL文都配置成动态的,这个设计给现在的调优带来了方便。
突然出现了一个很有趣的现象。有一个查询很慢(一分钟才出来),检查SQL文。这句SQL文是这样
SELECT ISNULL(a.CWB_NO,b.CWB_NO) AS CWB_NO,a.IMPORT_AWB_NO,
a.IMPORT_BWB_NO,ISNULL(a.PCS,0) AS RS2PCS,ISNULL(b.PCS,0) AS DECPCS,a.CCC_STATUS
FROM
(SELECT * FROM TB_CWB WHERE IMPORT_AWB_NO = @IMPORT_AWB_NO) a
FULL JOIN
(SELECT * FROM TP_DECSUMMARY WHERE AWB_NO = @IMPORT_AWB_NO) b
ON a.CWB_NO = b.CWB_NO AND b.AVAILABLE = 'Y'
WHERE a.AVAILABLE = 'Y'
FULL JOIN不是问题核心(因为业务规则就是这样),也不是SELECT *,其实SELECT *和指定字段或许有差异,但是绝对不会有很大差别。
我在后台运行了一下,0秒都不到。但是另外一个程序员说同样运行要59秒。奇怪!!!
拿过来对比一下,就发现差异了。
因为,我们的系统采取的是用.NET中cmd指定参数的写法,转换成后台sql文,等于运行sp_executesql的方法。更简单说就是替换变量。
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
更多精彩
赞助商链接