none
一个非常怪的数据库问题 RRS feed

  • 问题

  • 我的SQL SERVER2005数据库服务器上跑了4K个数据库
    现在每到下午我的数据库服务器就挂了,我直接打开管理工具,用SA和本地帐户都
    进不了数据库,我要重启下数据服和服务才行,等我重启完后,在数据库查询分析
    器打不开里面的数据库,可以看到数据库名,点下数据库不能打开,看不到表,但
    数据文件是存在的,非要手工删了然后附加进来。
    
    以前没有出现过这种情况,不知是什么原因
    
    我现在的数据库文件和网站文件的磁盘放在同一个磁盘驱动器,现在每天的PV在
    10W左右,我想这个访问量应不会对IO有太大的影响
    我看性能IO最高时也就是15M/分钟,我怀凝是不是数据库管理的DMBC数据库太多,
    当我重新启用服务时没法一次性把所有的数据库加载管理起来。
    2010年4月2日 13:09

答案

  • 1. 重启之后, 数据库要 recovery, 根据重启前 transaction 的数量, 这个时间是不定的, 在 recovery 期间, 数据库是不可用的, 你可以通过读取 sql server log 来确定(sp_readerrorlog)

    2. 根据你的描述, 故障发生的时间是定时的, 那么应该先检查定时执行的 job/ windows 上的task, 并尽可能的调整这些处理的 schedule, 或者先暂停, 看看是否可以避免发生问题了, 如果能, 那么逐个去排除这些任务中可能导致发生问题的(一般先分析执行时间长的)

    4. 4K个数据库(而不是表), 我想应该考虑分服务器了, 就算什么东西都不做, 每个数据库上产生一个连接, 那么也有 4K 个连接, 这个对网络/服务器的压力都很高, 而且tempdb 只用一个, 但每个数据库中的临时对象和系统内部对象什么的, 都用到这个tempdb, 这个的负载也非常之大.

    2010年4月6日 4:23

全部回复

  • It takes time to bring dbs online when start sql. Any error in sql server log and windows event logs? Checked server resource usages when sql hung?
    2010年4月2日 16:17
  • 你的15M/分鐘是指什么?

    有没有观察磁盘的响应时间?缓存的命中率?

    然后你4000个数据库,当年重启服务后,数据库引擎要检查数据库日志决定是否要rollback部分事务。你重启之后有没有试过将网络断开,之后等待一段时间,看看不能不能打开?

    2010年4月3日 8:28
  • 还是先看看SQL的日志和windows系统日志
    More: blog.csdn.net/happyflystone
    2010年4月3日 12:35
  • 你的数据量有多大?建议你查看一下统计信息和表索引碎片情况,或者查看一下数据库在等待什么时候;一般出现这种问题是由于数据库处理事务时产生了资源争用。
    2010年4月6日 3:52
  • 1. 重启之后, 数据库要 recovery, 根据重启前 transaction 的数量, 这个时间是不定的, 在 recovery 期间, 数据库是不可用的, 你可以通过读取 sql server log 来确定(sp_readerrorlog)

    2. 根据你的描述, 故障发生的时间是定时的, 那么应该先检查定时执行的 job/ windows 上的task, 并尽可能的调整这些处理的 schedule, 或者先暂停, 看看是否可以避免发生问题了, 如果能, 那么逐个去排除这些任务中可能导致发生问题的(一般先分析执行时间长的)

    4. 4K个数据库(而不是表), 我想应该考虑分服务器了, 就算什么东西都不做, 每个数据库上产生一个连接, 那么也有 4K 个连接, 这个对网络/服务器的压力都很高, 而且tempdb 只用一个, 但每个数据库中的临时对象和系统内部对象什么的, 都用到这个tempdb, 这个的负载也非常之大.

    2010年4月6日 4:23
  • 遍历一次,读取基本的数据字典,也需要不少时间

    如果实在没机器,试着装多几个实例,将部分DB移到新实例下试下

    **未经测试,虽然多实例需要更多的基本内存,而且可能内存分配更麻烦,可能需要手动地准确去调整每个实例的内存分配

    **但或许能对单一实例的4K个DB有效果呢?


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2010年4月7日 13:33
  • 我试过了用sp_readerrorlog来查看LOG,没有相关的错误LOG
    后来还是出现了类似的错误,经过几次折腾发现,我只要把一个数据库删除,并且重新附加进来后,其它的几千个慢慢又可以访问了,我估计是DBMS加载初始化这些数据库要很长时间。
    我这4K个数据库不是每个都是活的,有些它建了没有人用,所以不会产生链接。不过你说的对,将来会出为一个问题
    现在数据库的内存涨了很高,我把数据库的memroy属性设成了
    min 1024 max 6141数据库的使用内存反而高了,开始不手工设置反而没这么高在5G上下,现在都6G了,请教下这是什么问题
    2010年4月13日 6:21
  • Sql will use all availble memory on the server. Only 6gb memory for 4k dbs, you can't complain that.
    2010年4月13日 12:38
  • Sql will use all availble memory on the server. Only 6gb memory for 4k dbs, you can't complain that.
    2010年4月13日 12:38