网站性能优化解决方案
2007-07-10 14:42
633 查看
一、性能参数:
1、 吞吐量
2、 响应时间
3、 执行时间
4、 可伸缩性
二、性能优化方案:
小测试,说明索引的重要性,虽然执行时间只是从3毫秒降到了0毫秒,但只是对于测试环境单用户而言,当成千上万的用户并发操作,造成服务器资源竞争激烈(内存IO/磁盘IO/CPU的上下文切换),CPU的执行时间应该会以几何级的速度增长!
select count(*) from dbo.公交
--12120笔记录
/*------目前没有索引的状况
Table Scan 全表扫描
逻辑读 256 次
执行时间 3 毫秒-------*/
set showplan_all on
go
select * from dbo.公交 where city='宣城'
go
set showplan_all off
go
|--select * from dbo.公交 where city='宣城'
|--Compute Scalar(DEFINE:([公交].[LineStop]=[公交].[LineStop]))
|--Table Scan(OBJECT:([CQ20].[dbo].[公交]), WHERE:([公交].[city]=Convert([@1])))
set statistics io on
go
select * from dbo.公交 where city='宣城'
go
set statistics io off
go
表 '公交'。扫描计数 1,逻辑读 256 次,物理读 0 次,预读 0 次。
set statistics time on
go
select * from dbo.公交 where city='宣城'
go
set statistics time off
go
SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 3 毫秒。
/*-----------------创建city字段的索引-------------------*/
CREATE
INDEX [idx_city] ON [dbo].[公交] ([city])
/*------建立索引后的状况
Index Seek 索引扫描
逻辑读 9 次
执行时间 0 毫秒 -------*/
set showplan_all on
go
select * from dbo.公交 WITH(INDEX=idx_city) where city='宣城'
go
set showplan_all off
go
|--select * from dbo.公交 WITH(INDEX=idx_city) where city='宣城'
|--Compute Scalar(DEFINE:([公交].[LineStop]=[公交].[LineStop]))
|--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([CQ20].[dbo].[公交]))
|--Index Seek(OBJECT:([CQ20].[dbo].[公交].[idx_city]), SEEK:([公交].[city]='宣城') ORDERED FORWARD)
set statistics io on
go
select * from dbo.公交 WITH(INDEX=idx_city) where city='宣城'
go
set statistics io off
go
表 '公交'。扫描计数 1,逻辑读 9 次,物理读 0 次,预读 0 次。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
1、 吞吐量
2、 响应时间
3、 执行时间
4、 可伸缩性
二、性能优化方案:
[align=center]编号[/align] | [align=center]方案[/align] | [align=center]说明[/align] | [align=center]状态[/align] |
[align=center]1[/align] | 在部署应用程序时,应该关闭Debug模式,这将有效提高应用程序性能(web.config文件的debug=false) | ||
[align=center]2[/align] | 在部署应用程序时,使用RELEASE模式进行编译发布,优化程序资源! | ||
[align=center]3[/align] | 尽量避免使用throw Exception,减少额外的开销 提供用户一个友好的出错页面 | [align=left]protected void Application_Error(Object sender, EventArgs e)[/align] [align=left]{[/align] [align=left] …….[/align] [align=left] Application["error"] = error;[/align] [align=left] Response.Redirect("MyErrorPage.aspx");[/align] } 由于捕获的异常,所以性能提升不大,但提供了统一的友好的出错信息页面 | |
[align=center]4[/align] | 对适当的动态页面进行页面级缓存<%@ OutputCache Duration="60" VaryByParam="*" %>,提高访问速度! 两种情况: 1. 按照参数不同,进行不同版本的缓存 2. 按照URL不同,进行不同版本的缓存 例如: http://010.52tong.com http://021.52tong.com | Aspx页面中: <%@ OutputCache Duration="300" VaryByParam="id" VaryByCustom="ceshi" %> Global.asax中: [align=left]public override string GetVaryByCustomString(HttpContext context, string arg)[/align] [align=left]{[/align] [align=left] if (arg == "ceshi")[/align] [align=left] {[/align] [align=left] string s_cs=Request.Url.ToString();[/align] [align=left] return Request.Url.ToString() ;[/align] [align=left] }[/align] [align=left] return base.GetVaryByCustomString( context, arg);[/align] } | |
[align=center]5[/align] | 尽量使用存储过程完成数据操作 | ||
[align=center]6[/align] | 对于只读的数据访问, 使用DateReader代替DataSet | ||
[align=center]7[/align] | 关闭不必要的ViewState | 使用 ViewState 时,每个对象都必须先序列化到 ViewState 中,然后再通过回传进行反序列化,因此使用 ViewState 并非是没有代价的。<input type="hidden" 没有进行加密,ViewState 只是进行了 Base64 编码 每个控件(在标记上) <asp:datagrid EnableViewState="false" ?/> 每个页面(在指令中) <%@ Page EnableViewState="False" ?%> 每个应用程序(在 web.config 中) <Pages EnableViewState="false" ?/> | |
[align=center]8[/align] | 调整数据库SQL语句 | 前提:需要在完全理解业务逻辑的情况下 | |
[align=center]9[/align] | 调整索引 |
select count(*) from dbo.公交
--12120笔记录
/*------目前没有索引的状况
Table Scan 全表扫描
逻辑读 256 次
执行时间 3 毫秒-------*/
set showplan_all on
go
select * from dbo.公交 where city='宣城'
go
set showplan_all off
go
|--select * from dbo.公交 where city='宣城'
|--Compute Scalar(DEFINE:([公交].[LineStop]=[公交].[LineStop]))
|--Table Scan(OBJECT:([CQ20].[dbo].[公交]), WHERE:([公交].[city]=Convert([@1])))
set statistics io on
go
select * from dbo.公交 where city='宣城'
go
set statistics io off
go
表 '公交'。扫描计数 1,逻辑读 256 次,物理读 0 次,预读 0 次。
set statistics time on
go
select * from dbo.公交 where city='宣城'
go
set statistics time off
go
SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 3 毫秒。
/*-----------------创建city字段的索引-------------------*/
CREATE
INDEX [idx_city] ON [dbo].[公交] ([city])
/*------建立索引后的状况
Index Seek 索引扫描
逻辑读 9 次
执行时间 0 毫秒 -------*/
set showplan_all on
go
select * from dbo.公交 WITH(INDEX=idx_city) where city='宣城'
go
set showplan_all off
go
|--select * from dbo.公交 WITH(INDEX=idx_city) where city='宣城'
|--Compute Scalar(DEFINE:([公交].[LineStop]=[公交].[LineStop]))
|--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([CQ20].[dbo].[公交]))
|--Index Seek(OBJECT:([CQ20].[dbo].[公交].[idx_city]), SEEK:([公交].[city]='宣城') ORDERED FORWARD)
set statistics io on
go
select * from dbo.公交 WITH(INDEX=idx_city) where city='宣城'
go
set statistics io off
go
表 '公交'。扫描计数 1,逻辑读 9 次,物理读 0 次,预读 0 次。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
相关文章推荐
- 【整理】asp.net2.0网站性能优化解决方案
- 谈谈对网站性能的优化和一些解决方案
- 移动网站性能优化:网页加载技术概览
- 黄聪:Google Page Speed-优化网站性能的利器!
- 本周技术关注[面向webapps运维]:从LiveJournal后台发展看大规模网站性能优化方法: 一个藏袍 #
- 【经验总结】网站前端性能优化总结
- 基于S2SH的电子商务网站系统性能优化
- 高性能网站性能优化
- 网站性能优化
- 从数据库、代码和服务器对PHP网站Mysql做性能优化
- 从LiveJournal后台发展看大规模网站性能优化方法
- 高性能网站性能优化与系统架构(ZT)
- web.config优化网站性能设置
- 网站性能优化工具
- 网站性能优化工具大全
- Android性能优化解决方案
- WEB网站大数据量的性能解决方案(转载)
- 26种提高ASP.NET网站访问性能的优化方法
- 企业应用网站性能优化实例分析
- 网站性能优化原则