关于SQLServer2005超时的问题

chenyu112 2010-06-01 09:14:26
环境是SQLServer2005
订单表中修改了几个字段的长度,原来是varchar(8000),改成了varchar(max)
修改后局域网中没有问题,但是更新到外网上又不行了,老是在下订单时提示超时

情况:
网址1的数据库是一台服务器,单独的一个数据服务器,程序在这个下面运行出现了两笔/天的超时
剩余7个网址的数据库在其他一台服务器上,在这个服务器上的程序都不行,出现的超时情况比较多,而且订单量大的网址超时情况到少,订单量小的超时到多,不知道这个为什么?原理?如何解决

我的疑虑:
1。是不是在多个数据库(一个实例)的情况下,SQLServer会自动优先处理量大的数据库信息?数据量小的数据库被安排到后面执行?
2.因为下订单过程中只涉及到了varchar(max)字段的增加以及修改,这样也会暂很多内存?如果现实这个字段的话也暂用很多吗?
想这种情况我该如何处理?从哪儿下手?

期待高手解答
...全文
479 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
LittleLee 2010-06-02
  • 打赏
  • 举报
回复
learn!!!!!
--小F-- 2010-06-02
  • 打赏
  • 举报
回复
--查询数据库db中表tb的所有索引的随片情况
use db
go
select
a.index_id,---索引编号
b.name,---索引名称
avg_fragmentation_in_percent---索引的逻辑碎片
from
sys.dm_db_indx_physical_stats(db_id(),object_id(N'create.consume'),null,null,null) as a
join
sys.indexes as b
on
a.object_id=b.object_id
and
a.index_id=b.index_id
go

---解释下sys.dm_db_indx_physical_stats的参数
datebase_id: 数据库编号,可以使用db_id()函数获取指定数据库名对应的编号。
object_id: 该索引所属表或试图的编号
index_id: 该索引的编号
partition_number:对象中分区的编号
mode:模式名称,用于指定获取统计信息的扫描级别。


有关sys.dm_db_indx_physical_stats的结果集中的字段名去查下联机丛书。
永生天地 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chenyu112 的回复:]
重建了库存表中的索引就没有问题了,应该是库存表索引碎片造成的

但是这个问题还不是很明确
对于大数据量的插入,修改操作的数据表,最好隔断时间就去重新建立索引???
[/Quote]
你的问题是在程序里调用超时,而且局域网中没问题。

是不是可以排除某些原因呢,比如说什么碎片的。。
--小F-- 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chenyu112 的回复:]
重建了库存表中的索引就没有问题了,应该是库存表索引碎片造成的

但是这个问题还不是很明确
对于大数据量的插入,修改操作的数据表,最好隔断时间就去重新建立索引???
[/Quote]

检查磁盘碎片 超过75%就需要重新建立或者重新整理了
chenyu112 2010-06-02
  • 打赏
  • 举报
回复
重建了库存表中的索引就没有问题了,应该是库存表索引碎片造成的

但是这个问题还不是很明确
对于大数据量的插入,修改操作的数据表,最好隔断时间就去重新建立索引???
cdrdfuture 2010-06-01
  • 打赏
  • 举报
回复
试试这样的:
1.增加SQL服务器上登录时间最大设置
执行系统存储过程 sp_configure 设置里面的remote login timeout(s)


2.在客户端设置大的超时设置
比如sqlcommand.CommandTimeout=120

默认时间单位大概都是秒
永生天地 2010-06-01
  • 打赏
  • 举报
回复
增大连接超时的设置,如.net里
sqlcommand.CommandTimeout = 120
sych888 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 garnett_kg 的回复:]
VARCHAR(8000)跟VARCHAR(MAX)的存储、处理方式都不一样

你在更新这个字段如果长度超过8000,就会按LOB Data的方式处理,资料会存储在另一个Tree中.

我的建议是重建你这个表的聚集索引,然后再看效果。
[/Quote]
学习..........
Garnett_KG 2010-06-01
  • 打赏
  • 举报
回复
VARCHAR(8000)跟VARCHAR(MAX)的存储、处理方式都不一样

你在更新这个字段如果长度超过8000,就会按LOB Data的方式处理,资料会存储在另一个Tree中.

我的建议是重建你这个表的聚集索引,然后再看效果。
dawugui 2010-06-01
  • 打赏
  • 举报
回复
1。是不是在多个数据库(一个实例)的情况下,SQLServer会自动优先处理量大的数据库信息?数据量小的数据库被安排到后面执行?


不会,需要你指定去连接哪个数据库.


2.因为下订单过程中只涉及到了varchar(max)字段的增加以及修改,这样也会暂很多内存?如果现实这个字段的话也暂用很多吗?

这个看不懂,帮顶.

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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