日期:2014-05-19  浏览次数:20507 次

公司的系统服务器很慢,有什么好的方法解决呢?
我们公司内部使用了一套系统,主要要来处理公司内部文件签核等等使用,由于事情很多,所以开发的申请表很多,因此使用了几个月数据量急增,因此数据库访问的速度降低,有时候在系统中调用用户表数据时候会等待相当长的一段时间。请问,有什么好的办法来解决数据库访问慢的问题呢?

现在该系统的数据库已经达到4.5G容量,以前没多少数据的时候访问速度很快,但后来就慢了。有时候数据库连接数在300以上就开始受不了了,请问有什么好的解决方法吗?

------解决方案--------------------
全文索引,删除n年前的无用数据
------解决方案--------------------
把数据库分布到多台机器上
------解决方案--------------------
看看,内存、I/O、CPU等性能参数。一般来说,上RAID硬盘+索引优化就足够了
------解决方案--------------------
--查找Query Plan的CPU相关统计
--总计耗费CPU时间最长的查询计划
SELECT TOP 5 total_worker_time, last_worker_time,
max_worker_time, min_worker_time,
SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) as statement_text
FROM sys.dm_exec_query_stats as qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as st
ORDER BY total_worker_time DESC


--单次执行耗费CPU时间最长的查询计划
SELECT TOP 5 total_worker_time, last_worker_time,
max_worker_time, min_worker_time,
SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) as statement_text
FROM sys.dm_exec_query_stats as qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as st
ORDER BY max_worker_time DESC


--利用次数最多的查询计划
SELECT TOP 5 creation_time, last_execution_time,
execution_count,
SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) as statement_text
FROM sys.dm_exec_query_stats as qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as st
ORDER BY execution_count DESC
GO


------解决方案--------------------
遇到性能问题,首先找出影响性能的地方,然后看是否能优化SQL,然后再考虑升级硬件
------解决方案--------------------
不会的,服务器设定时间后自动会断开用户连接,还有,最好将数据备份一下,然后删除日志文件。