我在网站上遇到了巨大的性能问题。 我几乎尝试了所有可以成像的东西,我可以谷歌或者我知道解决这个问题,但没有帮助。
我的网站加载大约700-800毫秒到2.000-2.500毫秒。我可以在数据库查询中完全隔离问题 - 在没有单个查询的单个站点上我有110ms,对于每个查询,尽可能简单,我必须添加大约60ms到150ms,所以一个简单的站点:1)获取用户对象,2)获取所有用户的在线列表,3)获取此用户的好友列表,意味着我已经在300 + ms。一个有更多数据要加载的站点,比方说5个简单的查询,需要大约800多个加载。 好奇的是,我的SQL性能测试表明每个查询本身都不需要1ms!
到目前为止我尝试了什么:
以下是我的site.master中的一个示例,default.aspx什么都没有显示,所以它是空的,只有数据库查询,这个网站将加载300ms:
Guid userID = Guid.Parse(Request.Cookies["UserID"].Value);
Dal.User user = DAL.UserDAL.GetUser(userID);
List<DAL.User> onlineList = DAL.UserDAL.GetAllOnlineUser();
List<DAL.UserFriend> friendList = DAL.UserDAL.GetAllFriends(userID);
在我的DAL中:
public static User GetUser(Guid userID)
{
using (RPGDataContext dc = new RPGDataContext())
{
User u = (from a in dc.Users where a.UserID == userID select a).SingleOrDefault();
if (u != null && u.UserID != Guid.Empty)
{
return u;
}
else
{
return null;
}
}
}
public static List<User> GetAllOnlineUser()
{
using (RPGDataContext dc = new RPGDataContext())
{
return (from a in dc.Users where a.RefreshPing > DateTime.Now.AddMinutes(-15) orderby a.Username select a).ToList();
}
}
public static List<UserFriend> GetAllFriends(Guid userID)
{
using (RPGDataContext dc = new RPGDataContext())
{
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<UserFriend>(a => a.User);
options.LoadWith<UserFriend>(a => a.User1);
dc.LoadOptions = options;
return (from a in dc.UserFriends where a.UserIDActive == userID select a).ToList();
}
}
基本上它非常容易查询,代码非常简单,没有错误的地方!
我在我的实时网站上运行DataWizard SQL Profiler,而12个用户在线,调用一个正常的站点,其中有几个(10-12)个查询,加载时间约为1.5秒,结果如下: http://abload.de/image.php?img=asdzxkdd.jpg
我不知道要做什么......数据库设置正确,PK是Guids with PK,FK都设置正确,这里是一个屏幕: http://abload.de/image.php?img=asdasdzqjin.jpg
我的想法,但我在互联网上找不到任何东西: - Guid是PK吗?这可能是数据库速度太慢的原因吗? - 也许这是连接本身的问题,是否可以在每个查询中打开一个新的DataContext?
没有更多的想法...... 希望有人会在这里帮忙...我有点无奈!
更新1
在关于索引的一些建议之后,我在UserID和RPGID上设置了索引,95%的Coloumns用于Where子句但没有单个ms增加......
答案 0 :(得分:2)
由于您尚未添加任何索引,这很可能是您的问题。如果没有好的索引,随着数据库的增长,响应时间将变得更慢。
听起来您已经运行了性能分析器,它收集查询信息和统计信息。下一步是通过数据库调整向导运行这些结果。最简单的方法是通过SSMS(菜单:工具,数据库引擎优化顾问)。通常情况下,我不建议盲目接受这些建议,但这是一个很好的开始。
您可以在此MSDN文章中阅读有关使用“调整向导”的更多信息:http://msdn.microsoft.com/en-us/library/ms186354(v=sql.100).aspx/html 或者,如果您对调整数据库或监控索引的其他方法感兴趣,这里有另一篇SO帖子,其中包含一些与您的问题相关的非常好的建议:SQL Profiler and Tuning Advisor
答案 1 :(得分:2)
对数据驱动应用上的性能问题进行故障排除的标准流程如下:
然后事情会更加具体到您的架构,代码和平台。