关于SQL数据库 数据量太大引起的性能问题
单位数据库帐套中的数量量太大了,数据文件有50G左右,部分业务表中的数量已达到2000W级别,最近导致操作比较慢(插入,查询)业务数据也不能直接删除,以后还要进行查询,请问有什么好的办法处理这种问题?
[解决办法]
具体要看你的实际情况.
并发量大不?
你INSERT 是因为索引过多还是?聚集索引键没弄好?
查询的话跟踪看看..
如果业务逻辑不好处理,把历史数据转移.或者分区表看看.(2KW数据量并不算很大.)
[解决办法]
算小偏大的DB吧。。如果有预算优化,欢迎联系我
[解决办法]
慢的瓶颈在哪里?缺少索引?IO?CPU?内存?Blocking?先找到原因之后再对症下药,2000W的数据不算大的,可以优化的很好。
[解决办法]
2000W的数据表 索引这些应该也不少吧 插入的时候慢很正常了 查询的时候很慢的话其实是可以优化的
首先检查你的索引 是否查询的时候索引未被使用到 还有就是索引碎片是否过多
此外 死锁 阻塞这些也可能会造成查询的时候很慢
至于是否是用分区表 我个人的想法是分区不如分表 你2000W的数据量 应该是算上历史数据吧 可否考虑把历史数据转移到另一张结构完全一样的表中 还有就是 可以把经常要查询的数据放到一个表中 不是经常用到的数据放到另外一个表中
[解决办法]
按#4楼的方法先检查。
不改变原来数据库设计结构,可以考虑分库,把历史数据放到另外一个数据库中,只保留最近三个月或者半年的业务数据。
如果光从索引角度考虑,可以参考:
<Indexing Rules of Thumb & Index Selection Decisions>
http://www.cnblogs.com/wghao/archive/2013/04/10/3013384.html
[解决办法]
select o.name as table_Name,
i.name as index_name,
s.user_seeks, --索引查找
s.user_scans, --扫描
s.user_lookups, --书签查找或键查找
s.user_updates --索引更新次数
from sys.dm_db_index_usage_stats s
inner join sys.objects o
on s.object_id = o.object_id
inner join sys.indexes i
on i.index_id = s.index_id
and i.object_id = s.object_id
where database_id= db_id()
and o.name in ('报表中涉及到的表1','报表中涉及到的表2')
dbcc showcontig('表',索引id)
alter table 表
rebuild