sql超时问题,是锁么?

solidpanther 2005-12-08 12:45:04
我们同事负责一个客户的网站mis系统,
说是打开一个页的时候经常会到30多秒才打开web页,
然后再重新进去又好了,利马进去了,

这样的情况偶尔发生,也没做什么监控机制,
现在想问问大家都会有哪些情况呢?
十分感谢!
...全文
129 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlp321002 2005-12-08
  • 打赏
  • 举报
回复
是用什么开发的?.net 有缓存机制!开始启动的时候,是比较慢一些....
jedliu 2005-12-08
  • 打赏
  • 举报
回复
发晚一步!
楼主说的很有道理!
jedliu 2005-12-08
  • 打赏
  • 举报
回复
应该是数据库问题!
solidpanther 2005-12-08
  • 打赏
  • 举报
回复
刚才分析出来了,大家看看说得是不是有道理:
关于“今日访问量”库表设计的探讨

近日发现一个网站系统的主页上有个奇怪的现象,用户进入主页时候会等待30多秒,然后再重新进入又开始快了,这种问题是偶尔发生的,而不是有规律的;
经过查看程序代码,发现主页里有一个update命令,表结构如下:
日期 今日总次数
20010101 2次
20010102 3次
…………..

从如上的表结构和程序里的update语句可以分析出来如下结论:
例如今天是20010102
如果100个用户同时访问主页,就都要将表里的20010102这条记录修改,
Update语句可以理解为以下几个步骤:
1定位20010102这条记录,
2为20010102加锁
3将20010102老记录放入deleteed表里,同时删除原表这条记录;
4,将inserted表里的记录插入进来;
5,释放锁;

所以说,数据库接收这100个update命令是顺序执行的,
假设这个update需要0.2秒,那么第100个人就需要等待0.2*99大概19秒,
这对于一个主页来说是不能让人接受的;

所以我们必须采用如下的表结构:
一,今日访问记录表
Id 日期
1 20010102
1 20010102
1 20010102
1 20010102
…………

二,总访问记录表
日期 次数
20010101 2次
20010102 3次

在编写程序的时候是不会用到update语句的,用户只往” 今日访问记录表”里插入记录,这不会造成等待的;
插入的时候做个判断,看” 今日访问记录表”里时间不等于今天的记录是否大于0,如果是,则执行一条insert into总访问记录表(日期,次数) select 日期,count(1) from今日访问记录表 where 日期=today 就行了;

在其它应用中Update是避免不了的,我们只能告诉用户,为了避免读脏数据,您只能等其他用户处理完释放表后才能操作;
但在主页里,我们可以避开update操作带来的锁表问题;

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧