100分求一简单问题&SQL Server 2000相关&顶者有分&三天内结贴

xzh65414 2005-08-18 09:14:53
我用的Windows 2000 Advance Server + SQL Server 2000 做的C/S系统。
硬件环境:2*2.4Gcpu,2GRam,80GSCSI,MSI7320,
问题出在服务器端,服务器端不能正常的给SQL Server 2000 写入记录;
大概每运行10小时左右就会出现这个情况,有时三四个小时,有十二十几个小时。
我用多于一个程序给SQL写记录,每个程序每小时大概有8W条记录,二个程序就是16W左右,三个程序就有24W条记录左右,三个程序同时写SQL。用Query进行insert。数据库在硬盘上的文件为 20G-50G左右。在作业计划那里设置每天进行过期数据Delete;

出错提示:
---------------------------
实时提取文件到数据库
---------------------------
Operation cannot be performed while executing asynchronously.
---------------------------
确定
---------------------------
这个是出错时弹出来的按钮内容;

5144 :
Autogrow of file 'MyDataBase_Date' in database 'MyDataBase' cancelled or timed out after 30657 ms. Use ALTER DATABASE to set a smaller FILEGROWTH or to set a new size.
这个是在事件查看器里面的信息;

出现错误后,就算是在SQL查询分析器里面也不能对表进行Insert操作。必须重启SQL后才可以。有的时候重启SQL后还不行,就得重启Windows了。

那位大侠救救我吧。先谢过了。
...全文
268 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzh65414 2005-08-19
  • 打赏
  • 举报
回复
分不多。真不好分。有三人的回答正确了。谢谢大家。
xzh65414 2005-08-19
  • 打赏
  • 举报
回复
问题解决了。就像 belllab(菜鸟) 和 zjcxc(邹建) 所说。我设置的增长幅度太大了。
20% 太大。 30GB的20%为 6GB 。在短时间内不能分配出来。所以报错。
我改成 100MB 的增幅后运行了20小时了,还没有出现问题。

高兴。结贴。谢谢大家。谢谢 belllab(菜鸟) 和 zjcxc(邹建) ;

zjcxc(邹建) 不愧为SQL高手。你出的新书我一定买。书店没有。我在网上也要买一本。^-^
tfeiy 2005-08-19
  • 打赏
  • 举报
回复
服...
opqhjb_2002 2005-08-19
  • 打赏
  • 举报
回复
收获不少呀!佩服呀!
zxcnmv 2005-08-19
  • 打赏
  • 举报
回复
牛人回话了。。。
哈哈,学习中...
zjcxc 2005-08-19
  • 打赏
  • 举报
回复
错误编号: 5144 级别:10
数据库 '%3!' 中文件 '%1!' 的自动增长在 %5! 毫秒后已取消或出现超时。使用 ALTER DATABASE 设置更小的 FILEGROWTH 或设置新的大小。 2052


这个问题说明你的处理要求数据库立即分配 xx MB 的存储空间用于满足你的处理需求,但数据库在 xx 毫秒无法完成这个分配.
解决的办法:
1. 不要使用自动收缩, 自动收缩会定期收容数据文件的空闲空间,则处理需要的时候却要扩大数据文件,这两者相反的处理,是冲突的
设置方法:
ALTER DATABASE MyDataBase SET AUTO_SHRINK OFF

2. 如果你不进行事务日志备份, 也不需要利用事务日志做处理,则可以将数据库恢复模型设置为SIMPLE, 减少日志记录, 减轻磁盘I/O压力
ALTER DATABASE MyDataBase SET RECOVERY SIMPLE

3. 设置更小的文件增长步骤,以减少每次数据文件分配空间所需要的时间
ALTER DATABASE MyDataBase
MODIFY FILE(
NAME='MyDataBase_Date',
FILEGROWTH=50 MB) --不要使用百分比, 不然数据文件大了的话,这个百分比的结果就很大

4. 为数据文件预先分配足够大的空间,避免数据处理时分配空间
ALTER DATABASE MyDataBase
MODIFY FILE(
NAME='MyDataBase_Date',
SIZE=500 GB) -- 预设数据文件大小为500GB
5. 如果通过上述处理还无法解决问题,则应该考虑你的磁盘I/O性能不行,考虑提高硬件配置.
aloking 2005-08-19
  • 打赏
  • 举报
回复
会不会超时造成的,sqlserver我一个2.5g的数据库,带日志3g 我腾11g空间硬是不让我还原上去
把那个时间改长点,我在sqlserver对数据进行大规模数据操作500w,偶尔也会碰到断掉的情况
苍穹SUN 2005-08-18
  • 打赏
  • 举报
回复
帮你顶
belllab 2005-08-18
  • 打赏
  • 举报
回复
要不建议数据库文件直接设置成很大,15个G?这样就不用经常自动增长了。
belllab 2005-08-18
  • 打赏
  • 举报
回复
Operation cannot be performed while executing asynchronously.
这个错误似乎我碰到过,是在线程内用同一个ADOConnection时产生的,听人说ADOConnection是线程不安全,后来我用BDE了。
第二个错误没碰到过,从字面上看应该是去自动增长数据库文件时产生的(好像不是日志文件,是数据数据文件),有可能是按20%增长时,需要新分配的空间比较大,在短时间内无法完成,所以TimeOut?
Teng_s2000 2005-08-18
  • 打赏
  • 举报
回复
用存储过程试试!数据量大的时候用存储过程好些!
jitading 2005-08-18
  • 打赏
  • 举报
回复
看了头晕
cumtbwxj 2005-08-18
  • 打赏
  • 举报
回复
up
anonymous1982 2005-08-18
  • 打赏
  • 举报
回复
我刚刚接触delphi,还不太懂
只能帮你顶一下^
longfeih 2005-08-18
  • 打赏
  • 举报
回复
忘了说一句:


望楼主能在问题解决后,把方法贴出来,大家共享一下
longfeih 2005-08-18
  • 打赏
  • 举报
回复


关注!!!学习中。。。。。


hthunter(核桃-我的心在下雨,雨中我和她携手漫步) 说得很好
xzh65414 2005-08-18
  • 打赏
  • 举报
回复
hqhhh(枫叶):日志文件我设置的是简单(simple)大小没有超过10M

hthunter(核桃-我的心在下雨,雨中我和她携手漫步) :我已经把默认按百分比10%增长改成 20%增长。大小不受限制;

我有20G左右的剩余空间,就算他不自动收缩也有地方放。
xzh65414 2005-08-18
  • 打赏
  • 举报
回复
real_name(*真名):好的。有认识他的,希望请他过来看一下。
谢谢!
wanlinshan 2005-08-18
  • 打赏
  • 举报
回复
帮你顶下
hthunter 2005-08-18
  • 打赏
  • 举报
回复
Use ALTER DATABASE to set a smaller FILEGROWTH or to set a new size.
==========================

这里说的是文件增长的问题,默认数据库好像是按百分比10%增长的,你在企业管理器相应数据库的属性中把增长改为按字节数增长看看,一般改为20M到100M的增长速度就可以了

另外,最好设置数据库为自动收缩(因为你清理旧数据的话如果不收缩的话,数据文件大小是不会自动缩小的)
加载更多回复(13)

2,507

社区成员

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

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