收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 关于SQL2000 msado访问时间超长的问题

HengStar 2010-01-07 08:33:39
有两个问题,
1.这个比较基础,想了解一下PutCommandTimeout设置超时时间后,如果有一个命令执行时间超时了会执行什么样的操作,也就是我如何知道超时的命令,能在超时后设置回调函数处理吗?如果能,请教该怎么做.

2.项目中比较头疼的问题,目前还不能完全确定是SQL的访问问题,但根据出事情况大致能断定是数据库访问的问题,具体问题如下:
某用户登录时读取用户信息(可能会有很多用户同时登录),该函数头和函数尾都用GetTickCount函数来获取时间相减得到函数执行时间,其间包括比较多的一些用户信息数据库读取操作,API是用的msado15,但每天都会有用户反映说登录时间超过几分钟,而且根据函数执行的时间Log记录中看到确实有这样超长时间记录,原因不明,但该用户等待几分钟后确实成功登陆了,代码中没有发现主线程中有造成阻塞的代码,所以只能断定是数据库访问的问题,但是其它的服务器在同一时间访问同一数据库貌似又没有什么问题,很诡异,我不太了解msado底层的处理方式,我觉得同一个数据库多个连接访问,最终应该是队列的方式单线程处理这些访问消息...
希望大虾们能给一些有帮助的建议去尝试查出原因并解决。在线等
...全文
55 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘雨 2010-01-08
  • 打赏
  • 举报
回复
1.这个比较基础,想了解一下PutCommandTimeout设置超时时间后,如果有一个命令执行时间超时了会执行什么样的操作,也就是我如何知道超时的命令,能在超时后设置回调函数处理吗?如果能,请教该怎么做.

如果设置了这个属性,到达指定超时时间,查询依然未能完成,则会在这个时间抛出异常,你可以通过异常捕获来决定做什么。

2.根据你的情况,你的用户表比较大,如果这个表更新的不算频繁,只是select频繁,那么就是加索引。
如果用户表比较大,但是登陆的同时,还伴随其他用户大量的update,delete。insert操作,即使有索引,很有可能会产生频繁的重建索引的调用(表重建索引),重建索引会导致频繁锁表,现象就是select都有可能被锁定。解决办法么,就是不要索引。但是这又出现矛盾。用户登陆验证的表,最好拆分。对于验证字段,单独建表,其他经常更新的字段,放在另外一个表中。这样只用主键表来验证。就能好一些
wildwise 2010-01-07
  • 打赏
  • 举报
回复
太鲁莽了,看完题发现不会,以前在添加数据的时候会显示超时,因为数据量比较大,毕竟将近100W条记录,那时候超时也就几秒钟吧,后来改了打开方式就好了,
你说的情况,登陆好像只涉及到查询,这样不知道了,几分钟觉得有点夸张了,真的是这样的话也觉得不会是数据库的问题。
wildwise 2010-01-07
  • 打赏
  • 举报
回复
貌似沙发

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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