我有一个新的想法和问题想问你。
我们有一个本地/内部的 CRM 应用程序。我们使用 24X7 的应用程序类型。我们还在同一个 CRM 数据库(即 OLTP)上进行计费和工资管理,对于 SSRS 报告也进行同样的操作。
看起来每当我们在前端进行操作时,都会同时插入和更新几个实体,我们的应用程序会被冻结,直到该过程完成。例如提取 500 名员工过去 2 周内活动的工资。基本上,它总结了总工作时间,从数据库中提取这些数字,并写入/更新记录提取已完成的位置。因此,对于 500 名员工,我们一起查看大约 40K-50K 行的 Insert/Select/Update 语句。
当这个进程运行时,没有人可以做任何事情!我们正在考虑以下选项来解决此问题。
- 在非工作时间运行此过程
- 或者复制 Dyna 的数据库。 CRM 并在副本上执行此操作(提取数千条记录并运行多个报告)。
我的问题是:
- 首先如何创建副本以及在哪里创建副本(最佳实践)?
- 如何使其实时同步。
- 如果我们在复制数据库中执行 select 语句操作就可以了,但是如果我们在副本上执行任何插入/更新,如何在实际实时数据库中反映这一点? ,简而言之如何确保原始数据库和副本数据库实时同步。
我知道我问了太多问题,但作为 SQL 人员,进入 CRM 团队并提供建议,你知道我想说什么。
感谢大家提前提出的任何建议。
回答您关于数据库实时“副本”的问题,一个好的解决方案是alwayson可用性组。
https://blogs.technet.microsoft.com/canitpro/2013/08/19/step-by-step-creating-a-sql-server-2012-alwayson-availability-group/ https://blogs.technet.microsoft.com/canitpro/2013/08/19/step-by-step-creating-a-sql-server-2012-alwayson-availability-group/
尽管我认为这不是您在这种情况下想要的。 Alwayson 可用性组通常适用于需要极短故障时间范围的数据库实例。例如:如果集群中的主数据库服务器出现故障,它最多会在一两秒内故障转移到辅助数据库服务器,最终用户只会注意到一秒钟的轻微停顿。
我认为您会发现更好的是查看那些正在访问数据库服务器的插入语句,并了解它们为何阻止您提取数据。如果他们确实锁定了表,也许将大量读取更改为“nolock”读取可能有助于纠正您的情况。
了解您分配了哪些类型的资源以及您的数据库核心表是否有正确的索引也会很有帮助。如果您没有正确的索引,那么许多查询可能需要比正常情况更长的时间,从而导致锁定您的视图。
最后,如果您要拉取的表太大,我建议进行表分区。这可以帮助解决许多潜在的磁盘速度问题,如果您按时间段分区,还可以帮助优化您的查询(即每 X 个月创建一个新分区,这样当查询从一个时间段提取时,它们只从该一个数据文件中提取) 。
https://msdn.microsoft.com/en-us/library/ms190787.aspx https://msdn.microsoft.com/en-us/library/ms190787.aspx
我想说,您需要关注效率,而不是“复制数据库”,因为您的数量并不是很高,因此从声音来看,不需要类似的东西。我目前有一个 sql server 事务数据库,每天运行超过 1000 万次插入,而且我仍然有针对它的实时报告。您只需要资源和适当的索引来适应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)