我知道我们非常需要一个数据库维护策略。
+1用于确定需要
至于我的背景,我是一个大学生,在这家公司工作的兼职
坚持学习,获得经验,但在此期间找一位经验丰富的顾问。
该表是通过运行4个线程每个
我想这是在工作日相当关键任务,和停机时间是个坏消息24名工人居住?如果是这样的话,不要使用它。
上有ResultID和字段名
一个聚集索引ResultID在PK的第一列,因为你说明什么?
如果是这样,我敢打赌它没有足够的选择性,并且根据查询的需求,PK字段的顺序应该交换(尽管这个复合键看起来是一个糟糕的选择集群PK)
什么结果:
SELECT COUNT(*),COUNT(DISTINCT ResultID)FROM MyTable的
如果第一计数,比方说,4个大如第二或更重要的是,由于ResultsID的选择性较低,因此您最有可能获得扫描优先搜索,并且一些简单的更改将会给予巨大的性能改进。
此外,字段名是相当宽(50个字符),所以任何二级索引将有50 + 4个字节添加到每个索引条目。这些字段是否真的是CHAR而不是VARCHAR?
就我个人而言,我会考虑增加叶页的密度。在90%的情况下,您只会留下一些差距 - 可能每页只有一个。但是对于一张5亿行的大型表格,较高的封装密度可能意味着树中的层次更少,因此需要更少的查找。相反,对于给定页面,几乎每个插入都需要分页。这将有利于集群插入,因此可能不合适(因为您的插入数据可能未集群)。像很多事情一样,你需要做一个测试来确定哪个索引密钥密度最好。SQL Server具有帮助分析查询如何被解析,它们是否被缓存,它们引起的表的扫描次数,哪些查询“运行缓慢”等等的工具。
请咨询顾问来看看并给你一些建议。这不是一个回答这里的问题将给你一个安全的解决方案来实现。
对于每天拥有500万行数据表和插入数据流的表,您真的需要仔细考虑维护策略。对不起,但我对进入这种状态的公司感到非常沮丧。
该表需要进行碎片整理(如果没有聚簇索引,选项会变得更少,因此请保留该选项,直到您确定存在更好的候选项为止)。 “在线”碎片整理方法将对性能产生适度影响,并且可能会突然消失 - 如果它们超出时间/ CPU限制(尽管这很可能需要一些编程),可以安全地中止。如果你有一个“安静”的插槽,然后用它进行表碎片整理并更新索引的统计信息。不要等到周末才试着去做所有的桌子 - 在每天的安静时间(大概是在夜间)尽可能多/尽可能多地做。
对表进行碎片整理可能会导致事务日志使用量大幅增加,因此请确保任何TLogs都经常备份(我们有10分钟的TLog备份策略,我们在表碎片整理过程中每分钟增加一次)磁盘碎片整理过程不会成为所需的Tlog空间的定义!)
典型的查询将是非顺序插入,没有更新,没有删除,并且选择的频率不如插入(写入很多,读取很少)。我想我需要阅读并定期查看哪些查询正在运行。 – llamaoo7 2009-02-15 19:57:28
这听起来像是删除聚集索引的好方案。另外,请查看索引填充因子。确保有足够的空间来减少索引页拆分的需要。默认的填充因子80可能对您的需求太高。 – Tomalak 2009-02-15 20:06:08