假设在设计新数据库时遵循了最佳实践,那么如何以可以提高数据库满足适当性能标准的能力的方式测试数据库,并且这将表明性能增强调整到数据库结构是否需要?
我需要测试数据吗?如果没有为数据库建立使用模式,那会是什么样的呢?
注意:欢迎使用博客文章和书籍等资源。
答案 0 :(得分:2)
我会做一些事情:
1)模拟用户/应用程序与db和测试负载的连接(负载测试)。 我建议与实际使用系统的用户连接的人数要多得多。您可以让所有用户登录或选择将登录许多用户的第三方软件,并执行您认为对系统进行充分测试的已定义功能。
2)插入许多(可能是数百万)测试记录并再次进行负载测试。(可扩展性测试)。随着表的增长,您可能会发现需要索引,而您之前没有这些索引。或者在整个系统中使用VIEWS或连接时可能会出现问题。
3)分析数据库。我指的是分析表格的方法。 Here是一个无聊的页面,描述它是什么。此外,here是一篇关于Oracle数据库调优的精彩文章的链接。其中一些可能与你正在做的事情有关。
4)运行应用程序/用户生成的查询并为它们运行解释计划。例如,这将告诉您何时进行全表扫描。它可以帮助您解决很多问题。
5)同时备份和重新加载这些备份以显示对此的信心。
答案 1 :(得分:1)
您可以使用RedGate's Data Generator之类的工具在其中获得大量测试数据,以了解架构在负载下的执行情况。你是对的,如果不知道使用模式,很难将一个完美的测试计划放在一起,但我认为你必须对将要针对它运行的查询类型有一个粗略的想法。
充足的性能标准实际上是由使用您的数据库的特定客户端应用程序定义的。在应用程序访问数据库的同时获取sql探测器跟踪,您应该能够快速发现可能需要更多优化的任何问题区域(甚至在某些情况下进行反规范化)。
答案 2 :(得分:1)
+1鸟嘴,同意这些建议。但是,数据库负载测试可能非常棘手,因为第一步和关键步骤是尽可能地预测将在现实世界中遇到的数据模式。此任务最好与至少一位领域专家一起完成,因为它与系统的功能而非技术方面有很大关系。
建模数据模式非常重要,因为大多数SQL执行计划都基于表“统计”,即计数和比率,现代RDBMS用它来计算最佳查询执行计划。有些人在所谓的"query optimizers"上写过书,例如Cost Based Oracle Fundamentals由于缺乏内部工作原理的记录(通常是故意的,因为RDBMS供应商不想透露太多关于细节的内容),因此解决其中一些问题往往是一个挑战。
回到你的问题,我建议采取以下步骤:
答案 3 :(得分:1)
我现在处于同样的情况,这是我的方法(使用SQL Server 2008):
创建一个单独的“Numbers”表,其中包含数百万行样本数据。该表可以包含随机字符串,GUID,数值等。 编写一个过程以将示例数据插入到模式中。使用数字列的模数(%)来模拟不同的用户ID等。
创建另一个类似于第一个表的“NewData”表。这可以用来模拟添加的新记录。
创建一个“TestLog”表,您可以在其中记录测试查询的行数,开始时间和结束时间。
编写存储过程以模拟您希望应用程序执行的工作流,并根据需要使用新记录或现有记录。
如果性能似乎很快,请考虑缓存未命中的可能性!例如,如果您的生产服务器具有32GB RAM,并且您的表预计为128GB,则随机行查找>在缓冲区缓存中找不到75%。
要模拟此操作,您可以在运行查询之前清除缓存:
DBCC DROPCLEANBUFFERS; (如果是Oracle:ALTER SYSTEM FLUSH SHARED POOL)
您可能会注意到性能下降了100倍,因为现在必须从磁盘加载索引和数据页。
运行SET STATISTICS IO ON;收集查询统计信息。查找查询的逻辑读取数非常高(> 1000)的情况。这通常是全表扫描的标志。
使用标准技术来了解您的查询访问模式(扫描与搜索)并调整性能。
包括实际执行计划,SQL Server Profiler