在比较两个不同查询的执行时间时,清除缓存以确保第一个查询的执行不会改变第二个查询的性能非常重要。
在 Google 搜索中,我可以找到以下命令:
DBCC FREESYSTEMCACHE
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)
事实上,在多次执行后,我的查询需要比以前更现实的时间来完成。但是,我不确定这是推荐的技术。
最佳做法是什么?
我试图让 PostgreSQL 积极地自动清空我的数据库。我目前已按如下方式配置自动真空吸尘器:
我注意到自动真空仅在数据库未加载时才会启动,因此我遇到死元组比活元组多得多的情况。有关示例,请参阅随附的屏幕截图。其中一张表有 23 个活动元组,但有 16845 个死元组等待真空。这太疯狂了!
当测试运行完成并且数据库服务器空闲时,自动真空开始,这不是我想要的,因为我希望自动真空在死元组数量超过 20% 活元组 + 50 时启动,因为数据库已经配置。服务器空闲时的自动真空对我来说是无用的,因为生产服务器预计会在持续时间内达到 1000 次更新/秒,这就是为什么即使服务器负载不足我也需要自动真空运行。
有什么我想念的吗?如何在服务器负载较重时强制运行自动吸尘器?
更新
这可能是一个锁定问题吗?有问题的表是通过插入后触发器填充的汇总表。这些表以 SHARE ROW EXCLUSIVE 模式锁定,以防止并发写入同一行。
我是代理键的粉丝。我的发现存在确认偏倚的风险。
我在这里和http://stackoverflow.com 上看到的许多问题都使用自然键而不是基于IDENTITY()
值的代理键。
我的计算机系统背景告诉我,对整数执行任何比较运算都比比较字符串快。
这个评论让我怀疑我的信念,所以我想我会创建一个系统来研究我的论点,即整数比字符串更快,用作 SQL Server 中的键。
由于小数据集可能几乎没有可辨别的差异,我立即想到了一个两表设置,其中主表有 1,000,000 行,而辅助表在主表中的每一行有 10 行,总共有 10,000,000 行。次要表。我的测试的前提是创建两组这样的表,一组使用自然键,一组使用整数键,并在简单的查询上运行计时测试,例如:
SELECT *
FROM Table1
INNER JOIN Table2 ON Table1.Key = Table2.Key;
Run Code Online (Sandbox Code Playgroud)
以下是我作为测试台创建的代码:
USE Master;
IF (SELECT COUNT(database_id) FROM sys.databases d WHERE d.name = 'NaturalKeyTest') = 1
BEGIN
ALTER DATABASE NaturalKeyTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE NaturalKeyTest;
END
GO
CREATE DATABASE NaturalKeyTest
ON (NAME = 'NaturalKeyTest', FILENAME =
'C:\SQLServer\Data\NaturalKeyTest.mdf', SIZE=8GB, FILEGROWTH=1GB)
LOG ON (NAME='NaturalKeyTestLog', FILENAME =
'C:\SQLServer\Logs\NaturalKeyTest.mdf', SIZE=256MB, FILEGROWTH=128MB); …
Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2012 surrogate-key natural-key performance-testing
我想针对其他一些分支(例如 Percona 服务器、MariaDB 以及可能的其他分支)对 MySQL 服务器 rpm 进行性能测试(又名烘焙)。我希望通过提出这个问题,我可以更好地理解设置适当性能测试背后的方法。我计划使用 sysbench 来运行我的实际测试,但我对任何事情都持开放态度。
很多时候,当试图提出一个高效的数据库设计时,最好的做法是建立两个示例数据库,用数据填充它们,然后对它们运行一些查询,看看哪个性能更好。
是否有一种工具可以相对快速地生成(最好直接进入数据库)大型(约 10,000 条记录)测试数据集?我正在寻找至少适用于 MySQL 的东西。
作为一名软件开发人员和一名有抱负的 DBA,我在设计 SQL Server 数据库时尝试结合最佳实践(我的软件 99% 的时间位于 SQL Server 之上)。我在开发之前和开发过程中做出最好的设计。
但是,就像任何其他软件开发人员一样,存在需要更改/创建的数据库对象的附加功能、错误和需求更改。
我的问题是,查询优化应该是主动的还是被动的?换句话说,在一些大量的代码/数据库修改几周后,我是否应该留出一天来检查查询性能并根据它进行调整?即使它似乎运行正常?
或者我应该知道低于平均水平的性能应该是数据库检查并回到众所周知的黑板?
查询调优可能会占用大量时间,并且取决于初始数据库设计,它可能是最小的好处。我对公认的作案手法感到好奇。
有哪些有效的方法可以对数据库操作执行编程性能测试,尤其是在数据库本身不提供专用工具的环境中?
例如,在 Google App Engine 中,整个页面加载被评估为一项操作,其中可能包括特定的数据库操作。SQLite 和其他集成数据库中也可能存在此问题。由于很难完全抽象需要测试的(等价的)选择和插入,是否有任何推荐的数据库工具来对这些类型的查询执行更彻底的诊断?
performance google-app-engine database-design performance-testing
从我的另一个问题中可以看出,生成测试数据是我现在的主题。
在这一点上,我仍在手动生成我的测试数据。但是,此过程始终会生成少量数据(通常为 5-10 行),因为它是一个手动过程。
是否有任何工具可以自动执行此过程?特别是,我希望能够生成 100 万行以上。
我有一个电子邮件应用程序,它将被要求在每个页面加载时将给定用户的新消息数量传送到 UI。我在数据库级别上测试了一些变化,但所有内容都由存储的 proc 调用抽象。
我试图猛击数据库以查看断点(每秒请求数)是什么。
简而言之,我有一个表,比如这个 userId、newMsgCount,在 userId 上有一个聚集索引。SQL 应该能够每秒处理成百上千个这样的响应。我认为落后者是我的 .NET 应用程序。
我怎样才能使这个测试成为一个很好的测试来实现基于 SQL 性能的测试结果?
有没有一个工具,我可以给它一个存储的过程名称和参数,以便它打我的数据库?
我想看看数据库是否可以返回分钟。每秒 250 个响应。
performance sql-server testing scalability performance-testing
我的任务是对我们的 MSSQL 服务器和 MySQL 服务器进行压力测试。我想知道是否有任何工具或脚本可以在我们当前的系统和新系统上使用来比较性能?
我想测量读/写磁盘和处理器性能。任何其他可能有用的东西也会很棒。
谢谢!
performance ×10
sql-server ×5
mysql ×3
testing ×2
mariadb ×1
natural-key ×1
percona ×1
postgresql ×1
query ×1
scalability ×1
tools ×1
vacuum ×1