gpt4 book ai didi

.net - 如何防止两个应用程序因使用同一个数据库而发生冲突?

转载 作者:行者123 更新时间:2023-12-04 18:11:48 24 4
gpt4 key购买 nike

情况

有两个应用程序:

  • Windows 服务
    • 处理队列消息
    • 执行大量数据库 I/O(SELECT/UPDATE/INSERT)
  • ASP.NET 应用程序
    • 主要使用数据库进行 SELECT 查询

两个应用程序都使用一个(镜像)MSSQL 数据库 (SQL Server 2014)。我们使用 NHibernate ORM 查询数据。应用程序和数据库服务器都有自己的专用服务器。

问题

数据库中有数百万条记录,因此只有在有足够的可用索引时查询才有效。 Windows Service大多使用聚集索引进行查询,但在Web应用程序中也有很多非聚集索引用于查询其他字段。 Windows 服务应该尽可能快。

  • 这些非聚集索引会使更新和插入查询变慢。
  • 网络应用程序的使用对服务性能有很大影响。

迄今为止我们的解决方案

  • 扩展服务器
  • 存档数据
  • 改进索引

问题

除了我们目前的努力之外,还有其他解决方案吗?我们不想添加额外的服务器,我们希望使用新的架构或软件来解决这个问题。在理想情况下,使用 Web 应用程序根本不会影响 Windows 服务的性能。

最佳答案

这不是一个理想的世界。 table 上的任何事件都会影响其他事件。

如您所知,索引会减慢插入、更新和删除速度。

索引维护将有所帮助(碎片整理)

填充因子小于 100 会有帮助(例如 50)

尝试按照PK的顺序执行插入
如果不是按照尽可能多的索引顺序PK

尽可能设置基本更新、插入和删除
获得一个写锁和 1000 次插入比一次获得一个更有效

Web 应用程序的主要影响是它会锁定。
您可以选择 select .... with (nolock) 吗?
with (nolock) 是脏读所以只能谨慎使用。

关于.net - 如何防止两个应用程序因使用同一个数据库而发生冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com