【问题标题】:SQL Server database splitting by purposeSQL Server 数据库按用途拆分
【发布时间】:2018-03-28 19:39:09
【问题描述】:

数据库通常是大多数应用程序的存储。我们公司还每天对这些数据进行大量计算和数据操作。

一旦我们获得越来越多的数据,数据生成就成为一个问题,因为需要太长时间。而且我认为将数据库分成至少两个是有意义的:

  • 用于存储数据,重点关注读/写性能;

  • 用于侧重于数据聚合性能的计算。

有没有人有类似的经验,可以判断这个想法是否好,上述两点的设计差异是什么?

也许值得寻找用于计算数据的 noSQL 解决方案,例如内存数据库?

【问题讨论】:

  • 看看 SQL SSAS 的计算和聚合
  • @RegBes 您是在谈论添加度量计算吗?它更快吗?我可以试试...
  • @RegBes 不确定它是否会起作用.. 因为没有太多经验。我们这一代有几十个计算步骤。所以我需要创建一个依赖于前一个的计算度量链?
  • 您可以使用计算创建一个单独的数据库,本质上是一个数据集市。只需使用 SSIS 编写 ETL。您可以进行计算、存档历史数据等。我们在之前的一家公司做了类似的事情,每月运行一个流程,对最近一个月的数据进行归档和新计算。

标签: sql-server design-patterns database-design


【解决方案1】:

将数据库分成至少两个是有意义的

如果数据库位于不同的磁盘中(具有不同的主轴),这可能会有所帮助,否则您将无法获得任何收益,因为磁盘 IO 在这些数据库之间共享。

如需最佳实践,请阅读Storage Top 10 Best Practices

也许值得寻找用于计算数据的 noSQL 解决方案,例如内存数据库?

无需使用noSQL解决方案,可以使用内存表 In-Memory OLTP 可以显着提高事务处理、数据加载和瞬态数据场景的性能。

更多详情,In-Memory OLTP (In-Memory Optimization)

其他策略

1) 调整 tempdb

Tempdb 对所有数据库都是通用的,并且在计算中大量使用。

更实用的方法是在文件和最多 8 个逻辑 CPU(内核)之间进行 1:1 映射。

更多详情:SQL Server TempDB Usage, Performance, and Tuning Tips

2) 评估预期寿命 (PLE) 计数器并采取措施进行改进

要评估数据缓存,请运行以下查询

    SELECT [object_name],
    [counter_name],
    [cntr_value] FROM sys.dm_os_performance_counters
    WHERE [object_name] LIKE '%Manager%'
    AND [counter_name] = 'Page life expectancy'

PLE 计数器的推荐值(以秒为单位)大于:

     total_memory_dedicated_for_sql_server / 4 * 300  

Page Life Expectancy 是页面在没有引用的情况下停留在缓冲池中的秒数。简而言之,如果您的页面在缓冲池(内存缓存区域)中停留的时间更长,那么您的 PLE 就会更高,从而导致更高的性能,因为每次请求到来时,它都有可能在缓存中找到其数据而不是去硬盘来读取数据。

如果 PLE 不够 增加内存并调整索引和统计信息。

3) 使用 SSD 磁盘

随着固态磁盘 (SSD) 的成本下降,将 SSD 用作第二层缓存。

4) 数据库使用 RAID 5;以及用于事务日志和 tempdb 的 RAID 10。

一般来说,SQL 优化器游戏是将数据从磁盘(低速)移动到缓存(内存-高速)。

增加内存和提高diskIo速度,你获得高性能

【讨论】:

  • 感谢 M.Hassan 提供如此重要的回答!将尝试您的所有建议。检查是否已接受
  • 欢迎和快乐的一天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
相关资源
最近更新 更多