技术开发 频道

ASP.NET性能提升之Membership表和阻止DOS攻击

  【IT168 专稿】

  无需关闭站点的情况下如何查询ASP.NET 2.0 Membership表

  第一篇:ASP.NET性能提升秘诀之管道与进程优化

  第二篇:ASP.NET性能提升之站点部署与内容传输

  第三篇:ASP.NET性能提升之浏览器缓存的调用

  第四篇:ASP.NET性能提升之UI加速和存储过程

  这种查询会爽快的运行在你的开发环境中: 

Select * from aspnet_users where UserName = 'blabla'

  或者在无需任何问题的情况下获得一些用户的 profile : 

Select * from aspnet_profile where userID = '…...'

  甚至你可以像这样在aspnet_membership表中轻松的更新用户的邮件地址: 

Update aspnet_membership
SET Email = 'newemailaddress@somewhere.com'
Where Email = ''

  但是当在你的产品服务器上有一个巨大的数据库时,运行这些脚本都会搞垮你的服务器。理由就是,虽然这些查询看起来明显是你经常使用的语句,但是这些语句没有任何索引。因此,上面所有在"Table Scan"中的结果(很糟糕的查询方式)都会响应数百万行记录。

  这里的现象对我们而言意味着什么。我们使用了这些字段诸如UserName, Email, UserID, IsAnonymous等。关于Pageflakes的很多市场报表。这些报表中的一些仅仅市场部可以使用,其他人都不可以使用它。现在,站点运行得很好,但是市场部一天当中会使用它很多次而且用户常常打电话告诉我们网站太慢了,”用户报告网站性能十分地慢!”,一些页面甚至还发生超时等现象。

  常常,当他们打电话个给我们的时候,我们就会告诉他们“稍等,马上检查”,然后我们开始对整个网站进行检查。我们使用SQL profiler工具来查看到底那里出错了。但是我们不能找到任何问题。Profiler显示了查询运行的摁件。CPU负载位于适当的参数范围内。站点运行得很好,很流畅。我们打电话给他们,“我们不能查到任何问题,到底怎么了?”。

  因此,当我们试图调查这个问题并且在我们没有调查时,发现站点真的变得很慢的时候,为什么我们不能看到它变慢的任何问题?

  市场部有时候每天需要很多次运行一些分析报表来查询数据。无论什么时候他们执行这些查询,当这些字段都是不是索引时,它会使得服务器的IO吞吐量更高以及CPU的使用率增高:


 
  我们使用了15000 RPM的SCSI驱动器,虽然很贵,但是运行速度很快。CPU是双核Dual Xeon 64位的。尽管有这些强大的硬件支持,但是由于这个巨大的数据库在执行查询时仍然把我们压倒了。

0
相关文章