这是我在这里的第一个问题,所以我很乐意帮助它的工作:DBA。
我继承了一个较旧的关系系统,它位于Server 2005框上,数据库处于SQL2000兼容状态。在我的初步检查中,这个系统装载了游标函数和非常繁琐的代码(包括*=联接)。我有一种感觉,这是因为每个表都有一个非标识的主键列,并且除了两个表之外,没有任何PK关系。这个列恰好是相同的值,DocID。在"PK“上的聚集索引之外,几乎没有任何索引是所有表都有的。我在几个地点找到了第二甚至第一张规范化表。没有数据字典,任何人都知道,这个系统的最初的建设者现在已经离开了很久,建立这个系统的公司已经被移交了3-4次,不再支持这个系统了。只有一个框,"test“环境是同一服务器上的另一个数据库结构,我没有能力创建辅助服务器来测试/构建解决方案。最后一个小问题是,我的公司决定更换这个系统,如果没有其他的话,我将需要从这个系统中提取大量的基线数据,以便在今后6-8个月内输入到新系统中,如果没有其他的话,我将离开旧的系统。
目前,由于连接条件和几个大规模存储过程快速连续地接触到大多数(如果不是所有的表),因此存在严重的减速、I/O请求和长锁条件造成的问题。这就是我要消除的。我已经开始从Server内部手动映射系统的体系结构。
我还没有经历过这样程度的破损的数据库。我来自开发人员这一边,所以我知道如何用set表示法编写/重构/更新查询,但我很难理解为什么在构建系统时没有使用查询之外的任何关系,在查询之外,逻辑和大量基于游标的更新和插入。(我想为什么在这一点上是没有意义的,但最好把这个过程的痛苦归因于某种“好的”原因。)
我能做些什么来建立关系,以便DBMS能够实际使用它的功能来处理当前每天3到4次爬行系统的请求?使用Server 2005关系图工具对构建关系和检查每个表中的列的索引潜力是否有用?如果我使用这个工具,关系的改变会不会“破坏”遗留的过程?例如,如果我在不调整存储过程的情况下重新键和索引它们正在处理的表,带有游标的存储过程是否仍能正常工作?
发布于 2014-10-20 18:59:57
我不会进行修改,比如将主/唯一或外键约束添加到您尚未构建的遗留数据库中。考虑到您提到的问题和设计问题,最初的开发人员很可能已经构建了与这些约束相违背的逻辑。
例如,如果应用程序在键列中使用0而不是NULL来表示"nothing",则即使该值只是在过程中临时使用,外键约束也会失败。
最好的起点可能是识别显示性能问题或导致锁定的特定查询,并处理这些查询。仅仅在战略表上添加适当的索引对您来说可能是一个巨大的改进。
至于游标。有些神职人员就是不太清楚。:)
https://dba.stackexchange.com/questions/80666
复制相似问题