如何解决SQL Server优化
我的应用程序(工业自动化)在Dell T330服务器上使用SQL Server 2017 Standard Edition,具有以下配置:
- 至强E3-1200 v6
- 16gb DDR4 UDIMM
- 2 x 2tb HD 7200RPM(团队1)
在此银行中,我保存了以下表格:
Table: tableHistory
Insert Range: Every 2 seconds
410 columns type float
409 columns type int
-
Table: tableHistoryLong
Insert Range: Every 10 minutes
410 columns type float
409 columns type int
-
Table: tableHistoryMotors
Insert Range: Every 2 seconds
328 columns type float
327 columns type int
-
Table: tableHistoryMotorsLong
Insert Range: Every 10 minutes
328 columns type float
327 columns type int
-
Table: tableEnergy
Insert Range: Every 700 milliseconds
220 columns type float
219 columns type int
注意:
当我生成报告/图形时,我的应用程序将内含物插入缓冲区。因为系统无法同时插入和查询。因为查询加载得很好。
A列,它们是电流,温度,水平等值。此信息记录一年。
问题
在这种处理水平下,我是否会遇到性能问题?
由于需求量大,我是否需要更好的硬件?
我的应用程序是否可能由于硬件而中断?
解决方法
您的问题可能因为过于广泛而被关闭,但是我想在评论中进一步阐述并提出其他建议。
要获得足够的性能,需要多少RAM取决于报告查询。影响因素包括接触的行数,执行计划运算符(排序,哈希等),并发查询数。更多的RAM还可以通过避免IO来提高性能,尤其是在旋转媒体时成本更高。
针对具有传统表的1-2TB数据库的报告工作负载(大型扫描)需要快速存储(SSD)和/或更多RAM(数百GB)以提供良好的性能。现有的硬件是最坏的情况,因为只有16GB的RAM不可能缓存数据,而单主轴每秒只能读取约150MB的数据。根据我对问题架构的粗略计算,每月tblHistory的摘要查询仅扫描10 GB数据(假设日期列上的聚集索引)就需要大约一分钟。查询持续时间将随着并发查询的数量而增加,因此由于磁盘带宽限制,每个5个并发用户运行同一查询时,每个查询至少需要5分钟。 SSD存储可以每秒维持多个GB,因此,使用相同的查询和RAM,上述查询的数据传输时间将不到5秒。
@ConorCunninghamMSFT建议的列存储(例如,集群列存储索引)将大大减少从存储传输的数据量,因为仅读取查询中指定列的数据和固有的列存储压缩 将同时减少磁盘上的数据大小和从磁盘传输的数据量。压缩的节省将在很大程度上取决于实际的列值,但是我希望与行存储表相比,其空间减少50%至90%。
针对测量数据的报告查询可能会指定日期范围标准,因此按日期划分列存储将限制扫描到指定的日期范围,而无需使用传统的b树索引。分区还将通过滑动窗口分区维护(分区TRUNCATE,MERGE,SPLIT)促进清除12个月保留标准,从而与删除查询相比,大大提高了该过程的性能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。