我这边有个问题,一个网站Asp.net+MSSQL的,数据量呢不是很大,其中一张表里面有70万条数据,每天会有2万条左右的数据插入,然后还时时有个总数的查询只统计总数,不要详细信息网站跑三天以后,会越来越慢,如果访问量高了以后效果会更明显我手动操作数据库,删除,插入,修改,都会报连接超时的错误请高手帮忙分析下原因,提供点解决方案,谢谢。

解决方案 »

  1.   

    解决SQL连接超时 整理SQL死锁 
    DECLARE @rid int
    DECLARE @rcount int
    set @rcount=0
    DECLARE dt CURSOR
    FOR
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
    OPEN dtDECLARE @tabname sysname
    FETCH NEXT FROM dt INTO @tabname
    WHILE (@@FETCH_STATUS <> -1)
    BEGIN
    IF (@@FETCH_STATUS <> -2)
    BEGINSET NOCOUNT ON
    DECLARE @tablename VARCHAR (128)
    DECLARE @execstr VARCHAR (255)
    DECLARE @objectid INT
    DECLARE @indexid INT
    DECLARE @frag DECIMAL
    DECLARE @maxfrag DECIMAL
    -- Decide on the maximum fragmentation to allow
    SELECT @maxfrag = 30.0
    -- Declare cursor
    DECLARE tables CURSOR FOR
    SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_TYPE = 'BASE TABLE' and table_name=@tabname
    CREATE TABLE #fraglist (
    ObjectName CHAR (255),
    ObjectId INT,
    IndexName CHAR (255),
    IndexId INT,
    Lvl INT,
    CountPages INT,
    CountRows INT,
    MinRecSize INT,
    MaxRecSize INT,
    AvgRecSize INT,
    ForRecCount INT,
    Extents INT,
    ExtentSwitches INT,
    AvgFreeBytes INT,
    AvgPageDensity INT,
    ScanDensity DECIMAL,
    BestCount INT,
    ActualCount INT,
    LogicalFrag DECIMAL,
    ExtentFrag DECIMAL)
    -- Open the cursor
    OPEN tables
    -- Loop through all the tables in the database
    FETCH NEXT
    FROM tables
    INTO @tablename
    WHILE @@FETCH_STATUS = 0
    BEGIN
    -- Do the showcontig of all indexes of the table
    INSERT INTO #fraglist
    EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''')
    WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')
    FETCH NEXT
    FROM tables
    INTO @tablename
    END
    -- Close and deallocate the cursor
    CLOSE tables
    DEALLOCATE tables
    -- Declare cursor for list of indexes to be defragged
    DECLARE indexes CURSOR FOR
    SELECT ObjectName, ObjectId, IndexId, LogicalFrag
    FROM #fraglist
    WHERE LogicalFrag >= @maxfrag
    AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0
    -- Open the cursor
    OPEN indexes
    -- loop through the indexes
    FETCH NEXT
    FROM indexes
    INTO @tablename, @objectid, @indexid, @frag
    WHILE @@FETCH_STATUS = 0
    BEGIN
    PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',
    ' + RTRIM(@indexid) + ') - fragmentation currently '
    + RTRIM(CONVERT(varchar(15),@frag)) + '%'
    SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ',
    ' + RTRIM(@indexid) + ')'
    EXEC (@execstr)
    FETCH NEXT
    FROM indexes
    INTO @tablename, @objectid, @indexid, @frag
    END
    -- Close and deallocate the cursor
    CLOSE indexes
    DEALLOCATE indexes
    -- Delete the temporary table
    DROP TABLE #fraglistprint @tabname +' 整理完成 '
    END
    FETCH NEXT FROM dt INTO @tabname
    END
    CLOSE dt
    DEALLOCATE dt
    来源:http://blog.sina.com.cn/s/blog_627f0fad0100fryt.html
      

  2.   

    我都没用索引,只是简单的 Select  Count(*) ...
      

  3.   

    1.打相关补丁.
    2.建立相关索引.
    3.提高硬件配置.
    4.优化查询.
    http://topic.csdn.net/u/20080722/21/4501e9cb-a9fa-437e-aaf6-7b629bd26215.html?seed=1110065108
    http://topic.csdn.net/u/20080808/14/dfc973e7-fcf2-4526-9de1-fa5efc148f5c.html