我目前正在进行一项表演调整练习。该应用程序是数据库密集型的,处理逻辑很少。性能调优与数据库调用的方式和数据库本身有关。
我们进行了查询调优,我们放置了缺失的索引,尽可能减少或消除了数据库调用。该应用程序表现非常好,一切都很好。
数据量较小(比如高达100,000条记录),性能非常好。我的问题是,需要做些什么才能确保在更高的数据量下获得如此良好的性能? 预计数据量将达到1000万条记录。
我可以考虑表和索引分区,建议针对数据库存储优化的文件系统和定期存档以保持行数。我想知道还能做些什么。任何提示/策略/模式都会非常有用。
答案 0 :(得分:4)
监控。使用一些工具来监控CPU,内存和I / O的性能和饱和度。制作趋势线,以便在到达之前了解下一个瓶颈的位置。
测试。创建模拟数据,以便今天在测试服务器上有1000万行。对应用程序中的查询进行基准测试,看看它们的性能如何数据量增加。您可能会对首先发生故障的情况感到惊讶,或者它可能与预测完全一致。关键是你可以找出。
维护。确保您的应用程序和基础架构支持一些停机时间,因为这始终是必要的。您可能必须进行碎片整理并重建索引。您可能必须重构某些表结构。您可能必须升级服务器软件或应用修补程序。要在不中断连续操作的情况下执行此操作,您需要在设计中内置一些冗余。
研究。查找您正在使用的数据库品牌的最佳期刊和博客,并阅读它们(例如http://www.mysqlperformanceblog.com如果您使用MySQL)。你可以问一些类似你在这里提出的问题,也可以阅读其他人的问题,以及他们被建议做些什么。您可以学习到您尚未拥有的问题的解决方案,以便当拥有它们时,您将有一些策略可以使用。
答案 1 :(得分:1)
你是正确的方式:
1)正确的指标
2) DBMS选项调整(内存缓存,缓冲区,内部线程控制等)
3)查询调优(特别是日志慢查询,然后调整/重写它们)
4)要调整查询和索引,您可能需要研究查询执行计划
5) Poweful专用服务器
6)考虑客户端应用程序发送到数据库的查询。它们总是必要的吗?您需要您要求的所有数据吗?是否可以缓存一些数据?
答案 2 :(得分:1)
需要以不同方式调整不同的数据库。您使用的是什么RDBMS?
另外,您如何知道到目前为止您所做的事情是否会导致较大数据集的性能不佳?您是否使用大量测试数据测试了当前的优化?
当你这样做时,性能如何变化?如果您能够调整数据库以使其与现有数据一起执行,则没有理由认为您的方法不适用于更大的数据集。
根据RDBMS,下一类解决方案很简单:获得更大,更强大的硬件。更多RAM,更多磁盘,更多CPU。
答案 3 :(得分:0)
1000万条记录可能太小而无法进行分区。通常,如果您的数据量大于或大于或大于此值,则分区将非常有用。
对具有100,000行的数据库进行索引调整可能会获得99%的所需内容,包含1000万行。密切关注系统中大表的表扫描或索引范围扫描。在较小的桌子上,它们很好,在某些情况下甚至是最佳的。
存档旧数据可能会有所帮助,但这可能超过1000万行。
一种可能的优化方法是将报告移到单独的服务器上。这将减轻服务器的负担 - 报告在操作系统上运行时通常非常反社交,因为架构往往不能很好地优化它。
您可以使用数据库复制执行此操作或为报告创建数据集市。复制更容易实现,但报告效率较低,效率不如生产系统。构建星型模式数据集市将更有效地进行报告,但需要进行额外的开发工作。