iis mysql cpu_[译]通过IIS Request Filtering解决SQL Server CPU高的问题

Top Queries by Total CPU Time

当CPU非常高的时候有可能你的条件反射就是重启服务或者回收App Pools.SQL Server 2008 内置了非常棒的报表帮助我们追踪CPU的使用情况. 我使用Top Queries by Total CPU Time 报表. 如下图一项 右键服务名选择相应的报表.

529fe0cd9b082a94097cd5151d284d8e.png

Top Queries by Total CPU Time 报表会需要一点时间来生成. 通过报表能够获得是哪10个数据的查询消费了最多的CPU. 通过报表我们发现这个服务器上的一个数据库的4个不同query消耗的大部分CPU.

48fbf7ebcf464b897e4e6dfee03b9516.png

SQL Profiler and Database Tuning Advisor

现在我知道是哪个数据库引发高CPU的问题了, 启动 SQL Profiler 几分钟收集下数据.可以看到高的Reads是从 “Internet Information Services” 这个Appliation发出来的.

289db7d4a8cb6fe0ec55c5f1627f9294.png

在将注意力集中在网站之前,我想看看通过 Database Engine Tuning Advisor  能不能提高效率 DTA会分析通过提供的SQL脚本 分析数据的一些行为,并且提高一个优化的方案(包括使用索引,分区...). 通常通过 DTA  我们能提高 5-10 % 的性能改善. 在这个案例中我们能看到提高了97% 的改善!

1de71e4652a477623a19e4bb56c2c303.png

Preventing SQL Injection with IIS Request Filtering

通过执行DTA提高的优化脚本能降低一些CPU了. 然而我知道我们的网站有可能正在遭受一些可疑的访问所以我使用 Log Parser 获得一些网站的访问情况.通过下面的query发现打量的访问是正在利用querystring进行SQL注入.

logparser.exe -i:iisw3c “select top 20 count(*),cs-uri-query from ex140702.log

group by cs-uri-query order by count(*) desc” -rtp:-1 >file.txt

通常我们倾向于屏蔽攻击的IP. 不幸的是一些老道的攻击会使用大量不同的IP对你进行攻击. 最佳的解决方案是通过 Request Filtering 过滤屏蔽这些恶意的请求.

67042ce35f3032981ea86c31964779a7.png

通过 IIS Request Filtering 我们阻止了SQL注入攻击. 使用下面Log Parser的查询我们能看到所有请求的 http status codes .

SELECT STRCAT(TO_STRING(sc-status), STRCAT(‘.’, TO_STRING(sc-substatus))) AS Status, COUNT(*)

AS Total FROM w3svc.log to TopStatusCodes.txt GROUP BY Status ORDER BY Total DESC

当一个querystring被拒绝的时候Request Filtering 会使用 http substatus 404.18 . 通过下面的Log Parser report 能看到  50,039 个请求被屏蔽了.

673ab6b6321591a8390b818f8b5634bc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值