我感兴趣的数据库是:SQL Server 2008、MySQL 和 PostgreSQL 9.0。
总的来说,我想知道其中哪一个能“扩大规模”得最好。我读过PostgreSQL 的扩展能力比 MySQL 更好,但差距已经缩小较新版本的 MySQL。
除了一般信息外,我还在寻求针对我的具体情况的建议:
我有一个 64 位 SQL Server 2008 R2 开发版数据库,其中包含 20 年的股票数据和 2 年的期权数据。硬件是 Intel i7 Extreme,6 核,12 GB RAM,64 位 Windows 7。
数据库相当大,诸如移动平均数之类的密集计算可能需要长达 7 分钟的时间。此外,即使查询完成后,磁盘活动仍然相当多。我现在正在存储过程中进行所有计算。
我的系统太慢了,我正在尝试提高其性能和效率。我目前正在改进我的数据模型并调整软件设置。有什么建议吗?
此外,什么时候应该考虑使用 MySQL Cluster?(既然我在问,我确信答案是“不是你的!”)
答案1
我的系统太慢了,我正在尝试提高其性能和效率。
内存太少。
而且,最重要的是 - 就像大多数不真正了解数据库的人一样 - 您谈论了很多关于核心和 RAM(以及 Win 7 - 请摆脱它并安装 Windows Server),但完全忽略了对数据库性能最重要的一件事:磁盘。您运行了多少张光盘?
例如,我运行一个 Futures 数据库 - 我的 SQL Server 有 6 个 Velociraptor 仅用于数据,还有 2 个磁盘用于 tempdb 和日志。这是在带有硬件 RAID 控制器的 SAS 基础设施上。我不确定我是否喜欢 IO 性能 ;)
此外,即使查询完成后,仍有相当多的磁盘活动
- RAM 太小
- 正常行为。事务数据库(以及计算移动平均数)总是占用大量磁盘。普通计算机正是出于这个原因而不适合数据库。文档中有一大部分内容介绍了 SQL Server(被迫使用)如何使用磁盘。
获取光盘 - 或更好的 SSD - 为您提供强大的光盘子系统。
答案2
如果您依赖存储过程来处理大型数据集,最终您将在性能方面遇到瓶颈。如果您需要更快的响应时间,您可能希望考虑从 DBMS 中卸载这些计算。
编辑:
我错误地认为您谈论的是某种交易系统,其中很难更改数据模型。我在一家大企业工作,在那里这样做非常困难。您也可以通过提前进行一次计算来“卸载”计算。
在做任何事情之前,您应该非常仔细地研究查询计划,并了解哪些查询占用了最多的资源以及原因。想想您实际上在做什么——以计算移动平均值为例,假设您正在引用不会改变的历史数据。如果您需要绘制 IBM 从 1982 年到 1992 年的 52 周移动平均值……为什么要按需计算?提前做吧!存储容量通常很便宜——IOPS 和 CPU 通常很昂贵。
我看到的另一件事是人们过度规范化(因为这被教导为“正确的做法”)。有时,特别是对于静态数据,反规范化可以通过消除连接来提高性能。