我目前正在进行性能调优练习。应用程序是数据库密集型的,只有很少的处理逻辑。性能调优是围绕数据库调用的方式和数据库本身进行的。
我们进行了查询调优,我们放置了缺失的索引,我们尽可能地减少或消除了DB调用。应用程序运行得非常好,一切都很好。
对于较小的数据量(例如高达100,000条记录),性能非常出色。我的问题是,需要做些什么才能在更高的数据量下确保如此好的性能?预计数据量将达到1000万条记录。
我可以考虑表和索引分区,建议使用针对DB存储和定期归档进行优化的文件系统来控制行数。我想知道还能做些什么。任何提示/策略/模式都会非常有帮助。
发布于 2009-05-30 19:11:43
使用一些工具来监控性能,以及、内存和I/O的饱和度。绘制趋势线,这样您就可以在到达之前知道您的下一个瓶颈在哪里。
创建模拟数据,因此您现在在测试服务器上有1,000万行数据。对应用程序中的查询进行基准测试,看看随着数据量的增加,它们的性能如何。你可能会惊讶于先出故障的是什么,或者它可能和预期的完全一样。关键是你可以找到答案。
维护:确保您的应用程序和基础设施支持一些停机时间,因为这始终是必要的。您可能需要对索引进行碎片整理和重建。您可能需要重构一些表结构。您可能需要升级服务器软件或应用补丁程序。为了在不中断连续操作的情况下做到这一点,您需要在设计中内置一些冗余。
研究。为你正在使用的数据库品牌找到最好的期刊和博客,并阅读它们(例如,如果你使用MySQL,则阅读http://www.mysqlperformanceblog.com )。你可以问一些很好的问题,比如你在这里问的问题,也可以看看其他人在问什么,以及他们被建议做些什么。你可以学习你还没有的问题的解决方案,这样当你有了解决方案时,你就会有一些策略可用。
发布于 2009-05-30 19:08:54
不同的数据库需要以不同的方式进行调优。您使用的是什么RDBMS?
此外,您如何知道您到目前为止所做的工作是否会导致较大数据集的性能不佳?你有没有用大量的测试数据来测试你当前的优化?
当你这样做的时候,性能发生了怎样的变化?如果您能够调优数据库,使其能够处理现有的数据,那么就没有理由认为您的方法不适用于更大的数据集。
根据RDBMS的不同,下一种解决方案很简单:获得更大、更强大的硬件。更多RAM、更多磁盘、更多CPU。
发布于 2009-05-30 19:57:20
1000万条记录对于分区来说可能太小了。通常,只有当您的数据量超过一个数量级或数量级时,分区才会有意义。
对于一个包含100,000行的数据库,索引调优可能会使您获得所需的1,000万行的99%。注意系统中大表上的表扫描或索引范围扫描。在较小的表上,它们很好,在某些情况下甚至是最佳的。
对旧数据进行归档可能会有所帮助,但对于1000万行来说,这可能有些过分了。
一种可能的优化是将报告转移到单独的服务器上。这将减轻服务器的负担-当在操作系统上运行报告时,报告通常是非常反社会的,因为模式往往没有针对它进行很好的优化。
您可以使用数据库复制来实现这一点,或者创建一个用于报告的数据集市。复制更容易实现,但报告的效率会较低,不会比生产系统上的效率高。构建星型模式数据集市将更有效地进行报告,但会带来额外的开发工作。
https://stackoverflow.com/questions/930347
复制相似问题