拆分数据库的技巧
Posted
技术标签:
【中文标题】拆分数据库的技巧【英文标题】:Tips for splitting database 【发布时间】:2009-12-03 16:47:23 【问题描述】:我已经阅读了几本关于 SQL Server 2005 的书籍,但没有找到正确答案。
问题是这样的:- 我有一个数据库,一次有 5-20 个用户使用它来预订客户订单。 他们在一天内通过电话收到许多订单,因此下订单和查找产品\旧订单必须很快。
随着时间的推移,已经下了许多订单。 有许多表包含此订单详细信息,并且有许多报告使用此数据。 问题是报告很慢。索引有点帮助,但没有我预期的那么大。
阅读了一下之后,我想尝试将数据库分为两部分 - 一个用于在线交易,一个仅用于报告。
如果您通过推荐一本书或网站来帮助我,我将非常感谢您 设计用于快速报告的数据库以及如何将两个数据库分开 - 一个用于在线交易,另一个用于快速报告(这将是用于快速报告的数据仓库设计吗?)
我的主要目标是制作非常快速的报告(一些报告现在需要 5 分钟才能运行,并且随着数据的增加它会变得更慢)。 任何能指引我正确方向的帮助都将不胜感激。
【问题讨论】:
请提供更多详细信息,例如记录数、相关表的一般复杂性以及与报告相关联的查询。虽然最终可能证明有必要拆分成多个数据库,但您可能会发现对原始模型、其索引和/或查询进行一些调整,可以让您保留一个数据库,从而避免与同步相关的麻烦。 mjv 感谢您的快速回复。销售订单数据分为大约 30 个表。目前最大的表有大约 200 万条记录,并且正在迅速变大。大多数报告使用连接在一起的 2-3 个表。报告有多个过滤选项,例如显示用户 1 到 10、日期 A 到 B、客户组 X 等的数据。我不确定是否是这种随机查询使报告变慢 报告以分钟为单位非常可疑...您能否告诉我们您正在运行哪些类型的查询以及伴随它们的索引类型? 【参考方案1】:看看 Ralph Kimball 的 Data Warehouse Toolkit。只需简单的 star-schema 就可以加快报告速度。以及 here is an example 星型模式如何简化报告。
【讨论】:
【参考方案2】:首先,一定要看看您现有的设计和工作量。
如果您不能进一步优化您的 OLTP 方面,我完全会使用 Kimball 数据仓库方法。使用 SSIS 或其他方式在常规数据库上更新您的数据,并将您的数据转换为星号。您应该会发现,您的报告性能应该会显着提高,并且不会干扰您在 OLTP/规范化方面的生产事务。
这可以改进到您甚至可以使用空闲周期使两个数据库保持非常紧密的同步,这些空闲周期以前被报告一个不太适合报告的规范化数据库模式消耗掉。如果您扩大规模,您可以使用触发器或计划任务相对轻松地使仓库保持最新状态,并提供更复杂的选项。
如果你的数据库不是特别大,这不一定需要在两个数据库中,你可以使用不同的模式来保持它们的逻辑组织,即使你拆分它,你也可以在你的 OLTP 数据库中放置视图在不更改连接上的数据库的情况下使它们可用。拥有独立数据库的主要好处是可以更改数据库范围的选项,例如排序规则或备份模型(当然,您也可以使用文件组来帮助解决此问题)。
【讨论】:
凯德,谢谢您的回复。我正在查看您和 Damir 对 Kimball 模式的建议以上是关于拆分数据库的技巧的主要内容,如果未能解决你的问题,请参考以下文章