1.c/s 三层erp
2.数据库服务器是win2003+SqlServer2005
3.数据库服务器是ibm 至强2.5八核,内存12G
4.中间层服务器是ibm 至强2.5四核win2000Server 4G内存
4.数据库文件60G,压缩后40G
用 sp_who[sa] 显示410个连接。
最近erp 很慢,重新索引收缩数据库后,还是很慢。数据库服务器也重做了。请问是什么原因?数据库服务器sqlserver压缩索引

解决方案 »

  1.   

    cpu,I/O使用情况如何呢。
    查询,插入都慢吗
      

  2.   

    这种情况通常要从等待状态入手:
    SELECT * FROM sys.dm_os_wait_stats
    ORDER BY wait_time_ms DESC select * from sys.dm_os_waiting_tasks
    ORDER BY wait_duration_ms DESC 
      

  3.   

    升级操作系统吧,windows 2003和xp马上要会不再支持了
      

  4.   

    用 sp_who[sa] 显示410个连接。
    ------------------------------------
    有多少个用户,为何这么多连接?
      

  5.   

    你看那些大表数据,是不是因为他们做什么操作时慢。我在维护一个sql2000数据库时,也存在慢的时候,在操作哪些页面慢时,用户都有反应,你就要针对那个大表优化。
    还有看日志文件,如果太大了就要截断日志、清空日志
      

  6.   

    第一个等待状态,暗示“可能”内存不够,导致查询所需的数据需要从磁盘加载到buffer,这个过程中产生第一个等待类型。第二个等待类型,暗示可能过多的行操作,对于OLTP来说,一般不需要并行操作,甚至很多优化的方案都是直接定义“不用并行”
    如果你的服务器开了一段时间,那这些数据是比较靠谱的,假设你不是重启后马上查询的话,建议如下:
    1、用性能计数器查看SQL Server: Buffer Manager: Page life expectancy 的时间,一般平均值应该在300s以上,1000s更好。过低意味着内存不够,当然这种情况下通常是缺少合理甚至完全全少索引,导致经常表扫描或者范围扫描,每次都占用很大内存,导致内存中的数据频繁清空。
    2、为了不影响服务器级别的设置,先不要降低并行设置,但是可以可以先提高并行阈值,让其“达不到”并行运行的开销而依旧选择串行执行:
    sp_configure 'show advanced options',1
    go
    RECONFIGURE
    go
    sp_configure 'cost threshold for parallelism',25
    GO
    RECONFIGURE
    GO3、绝大部分问题都是索引和查询导致的。如果上面的无效,看看重建聚集索引、做日志备份、还有监控一下磁盘问题:
    http://blog.csdn.net/dba_huangzj/article/details/8614817
      

  7.   

    用profiler创建一个sql trace,然后运行一段时间,再用数据库优化顾问(DTA)来分析一下,看看是否大量丢失索引或者统计信息缺失情况。
      

  8.   


    已重建索引了,没有效果。用profiler创建跟踪,发现 Audit Logout 的 Duration 时间最长
      

  9.   

    你先检查一下其他脚本,比如你图中最后一行,那个logout的你做不了什么的了
      

  10.   

    看看丢失索引的情况SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
     SELECT TOP 30
             ROUND(s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks
                                                                 + s.user_scans ),
                   0) AS [Total Cost] ,
             s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks
                                                                   + s.user_scans ) AS Improvement_Measure ,
             DB_NAME() AS DatabaseName ,
             d.[statement] AS [Table Name] ,
             equality_columns ,
             inequality_columns ,
             included_columns
     FROM    sys.dm_db_missing_index_groups g
             INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle
             INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle
     WHERE   s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks
                                                                   + s.user_scans ) > 10
     ORDER BY [Total Cost] DESC ,
             s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks
                                                           + s.user_scans ) DESC
      

  11.   


    所有的操作都慢,还是局部慢?我想可能是某个事务造成的。如果能够找到那个事务,建议你使用事务系列化隔离级别高点,SET TRANSACTION ISOLATION LEVEL SERIALIZABLE      --系列化级别

    SET TRANSACTION ISOLATION LEVEL SNAPSHOT          --已提交读快照级
      

  12.   

    先把前几行的数据加上索引,include里面用最后一列的列名
      

  13.   

    是哪家的erp?连接数410,似乎是用友??它老是不会释放使用过的连接,导致。
      

  14.   

    equality_Columns 里面的列, 检查一下,建立索引。include索引,看看,数据量大的,用的次数比较多,也建立个include 索引吧
      

  15.   

    1.在慢的时间点正在运行什么SQL,他们在等待什么资源。
    2.在慢的时间点抓10分钟trace
    3.参考性能计数器三个同时进行,基本能定位问题。另外还要看下SQL内存配置。
      

  16.   

    突然变慢,可能的原因大致有:
    一、出现死锁
    二、磁盘I/O被某个进程(例如备份)或者被其它应用程序占用
    三、Windows异常,例如,某个进程占据CPU而不能正常释放。