通过IIS Request Filtering解决SQL Server CPU高的问题
2015-02-09 14:14
351 查看
原文 http://www.peterviola.com/solving-sql-server-high-cpu-with-iis-request-filtering/
Top Queries by Total CPU Time 报表会需要一点时间来生成. 通过报表能够获得是哪10个数据的查询消费了最多的CPU. 通过报表我们发现这个服务器上的一个数据库的4个不同query消耗的大部分CPU.
在将注意力集中在网站之前,我想看看通过 Database Engine Tuning Advisor 能不能提高效率 DTA 会分析通过提供的SQL脚本 分析数据的一些行为,并且提高一个优化的方案(包括使用索引,分区...). 通常通过 DTA 我们能提高 5-10 % 的性能改善. 在这个案例中我们能看到提高了97% 的改善!
通常我们倾向于屏蔽攻击的IP. 不幸的是一些老道的攻击会使用大量不同的IP对你进行攻击. 最佳的解决方案是通过 Request Filtering 过滤屏蔽这些恶意的请求.
通过 IIS Request Filtering 我们阻止了SQL注入攻击. 使用下面Log Parser的查询我们能看到所有请求的 http status codes .
当一个querystring被拒绝的时候Request Filtering 会使用 http substatus 404.18 . 通过下面的Log Parser report 能看到 50,039 个请求被屏蔽了.
Top Queries by Total CPU Time
当CPU非常高的时候有可能你的条件反射就是重启服务或者回收App Pools.SQL Server 2008 内置了非常棒的报表帮助我们追踪CPU的使用情况. 我使用Top Queries by Total CPU Time 报表. 如下图一项 右键服务名选择相应的报表.Top Queries by Total CPU Time 报表会需要一点时间来生成. 通过报表能够获得是哪10个数据的查询消费了最多的CPU. 通过报表我们发现这个服务器上的一个数据库的4个不同query消耗的大部分CPU.
SQL Profiler and Database Tuning Advisor
现在我知道是哪个数据库引发高CPU的问题了, 启动 SQL Profiler 几分钟收集下数据.可以看到高的Reads是从 “Internet Information Services” 这个Appliation发出来的.在将注意力集中在网站之前,我想看看通过 Database Engine Tuning Advisor 能不能提高效率 DTA 会分析通过提供的SQL脚本 分析数据的一些行为,并且提高一个优化的方案(包括使用索引,分区...). 通常通过 DTA 我们能提高 5-10 % 的性能改善. 在这个案例中我们能看到提高了97% 的改善!
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 过滤屏蔽这些恶意的请求.
通过 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 个请求被屏蔽了.
相关文章推荐
- 怎样通过iisapp命令查找pid来解决IIS的cpu占用率过高问题
- 怎样通过iisapp命令查找pid来解决IIS的cpu占用率过高问题
- 停电导致IIS问题,解决inetinfo的CPU占用很大
- 网站通过Windows身份验证连接SQL Server,发布到IIS后无法连接的问题
- 【Loadrunner】通过soap_request手工编写webservice协议请求解决手工编写和相关问题
- IIS解决CPU和内存占用率过高的问题
- SQL Server无法通过IP地址注册服务器及连接问题的解决
- 停电导致IIS问题,解决inetinfo的CPU占用很大
- 通过AFHTTPSessionManager+RACSupport 或 AFHTTPRequestOperationManager+RACSupport 解决同一信号源(RAC网络请求两次的问题
- IIS问题解决:URL中制表符引起的Bad Request - Invalid URL
- [问题]通过IIS宿主发布WCF服务,客户端添加服务引用出错的解决办法
- Orchestration通过向导发布为WCF服务寄宿在IIS中,出现账户权限问题的解决
- 通过BIOS设置启用CPU虚拟化解决VMware虚拟机不支持X86_64位linux操作系统安装问题
- 解决httpwebrequest无法通过使用代理的局域网获取response的问题
- IIS解决CPU和内存占用率过高的问题
- 停电导致IIS问题,解决inetinfo的CPU占用很大
- 如何解决XP下使用IIS而inetinfo.exe进程占用CPU达100%的问题
- [IIS]修改MaxFieldLength与MaxRequestBytes彻底解决Request Too Long的问题
- [IIS]修改MaxFieldLength与MaxRequestBytes彻底解决Request Too Long的问题
- nginx、Apache、IIS服务器解决 413 Request Entity Too Large问题方法汇总