大容量数据读写分离方案讨论
数据库是sql server 2008 r2,数据库有两张表,一个主表,大概有150万数据,对应的字表有1亿多数据。
因为两个表的更新操作都很频繁,建了索引,查询需要用到两个表的inner join,每次查询是根据某个条件某个字段排序,只需要查询前1000条数据即可。语句都用的with(nolock),但是查询速度速度还是比较慢,有的时候瞬间出来结果,有的时候几十秒甚至1分钟以上。服务器CPU使用率都很低,内存也够大,96G的内存。
以前有在论坛发过贴,http://bbs.csdn.net/topics/390381835
分析下来应该是因为频繁更新导致索引有碎片或者分布不均匀。
大家有好的建议吗?我的数据允许脏读,脏读允许几个小时甚至更长。
我现在想到的是,通过数据库发布订阅功能,专门建立一个只读数据库来专门给查询使用。
但是我几个有个疑问:
1.通过发布订阅同步到只读数据库的时候,不同样有数据写入吗?会不会也会对查询性能有影响。
2.数据量比较大,我是应该用快照发布的方式呢?还是事务发布的方式呢?
3.我昨天有测试过用快照发布的方式,发现发布初始化的时候,会锁表,我的数据库更新操作就会很卡,有办法在发布的时候不锁表吗?
4.我是不是需要先通过还原数据库的方式在订阅服务器上把数据库先还原好,再来做发布订阅,这样会节省时间?
希望大家给我出出主意,谢谢。
另外,我看sql server 2008有Snapshot的功能,数据库的快照能满足我的需求吗?