在为使用 SQL Server 的应用程序运行性能测试/基线之前,我希望能够将实例设置为“干净”状态,而无需重新启动实例。我倾向于遵循一些步骤,但我想构建一个按正确顺序排列的明确列表,并且没有多余的步骤。
此步骤列表是否完成将 SQL Server 设置为“干净”状态?
顺序是否合乎逻辑/正确?
有没有多余的步骤?
CHECKPOINT -- Write all dirty pages
DBCC DROPCLEANBUFFERS -- All should be clean after checkpoint?
DBCC FREEPROCCACHE -- Clear the plan cache
DBCC FREESYSTEMCACHE -- Is this necessary after FREEPROCCACHE?
DBCC FREESESSIONCACHE -- May not be necessary if distributed queries aren't used, but want to catch all scenarios
EXEC SP_UPDATESTATS -- Refresh stats
'BEGIN TESTING!'
Run Code Online (Sandbox Code Playgroud) 在我的开发环境中,我正在处理查询。为此,我需要重置 SQL Server 内存、计划等,这可以确保我的查询是所有值重置的服务器上唯一的压力/工作过程
我正在做的事情很少
我做得对吗?或者我需要更多的东西来清除或查看新的统计数据?
我一直在想,max_used_connections
一旦达到 的峰值,为什么值不会下降max_connections
?
我总是刷新状态并降低此值以避免数据库连接拒绝错误和错误日志中的警告消息:
=====
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
=======
Run Code Online (Sandbox Code Playgroud)
mysql> select version();show variables like "%max_connections%";show global status
like "%Max_used%";show status like "%thread%";
+--------------+
| version() |
+--------------+
| 5.1.52-2-log |
+--------------+
1 row in set (0.00 sec)
+-----------------+-------+ …
Run Code Online (Sandbox Code Playgroud) mysql performance max-connections mysql-5.1 performance-testing
我们在生产中有几个数据库服务器,其中 4 个具有非常相似的硬件配置。Dell PowerEdge R620,唯一的区别是2个最新的(3个月前购买和配置的)有RAID控制器v710,256GB RAM和CPU是2个物理Xeon E5-2680 2.80GHz。旧的(大约 1 年前购买和配置)具有 RAID 控制器 v700、128GB RAM 并在 witl 2 物理 Xeon E5-2690 2.90GHz 上运行。BIOS 已更新,所有驱动程序均已更新至最新版本等。所有运行 SQL Server 2008R2 Enterprise (SP1) 的系统均已更新至最新 CU 和 Windows 2012R2 Standard。两者都在 200 GB SSD x5 RAID10 上运行。每个数据库只运行一个数据库,使用调用 SSIS 包的作业进行同步。我们的系统管理员运行了大量性能和压力测试,以确保我们没有任何硬件或网络配置错误或故障。正如预期的那样,最新的表现出更好的性能结果。到现在为止还挺好。
我们可以在 Kibana 的屏幕截图中看到我们遇到的问题。黄色和橙色是 2 台较新的服务器(桌子上有 6,7 台),低于所有其他服务器。很明显,这两个新服务器的响应时间较慢。不仅如此,这 2 台服务器的负载也比 2 台较旧的服务器少(浅蓝色和深蓝色线 - 桌子上的 4,5)。
有几个监视脚本收集有关性能计数器的信息。用DMV和第三方监控工具尽可能挖掘,我手头有很多信息。但是应该有(ofc)一些我在这里遗漏的东西,因为我找不到这个较慢的响应时间的答案。
2 台最新的服务器使用的 RAM 较少,但我想这是意料之中的,与其他较旧的服务器相比,因为它们的负载较低。
| Server Name| Mem_MB | Mem_GB | Server_RAM_GB | SQL_max_mem_GB| SQL_min_mem_GB |
|------------|--------|--------------|---------------|---------------|----------------|
| 4 | 41108 | 40.145263671 …
Run Code Online (Sandbox Code Playgroud) performance sql-server-2008-r2 configuration performance-testing performance-tuning
我想知道是否有任何方法可以跨多个节点分发 SQL Server(我使用的是 2012 版)数据库。我正在尝试比较 SQL Server 和 MongoDB 之间的 READ 查询性能。该发行版全部使用具有使用虚拟机的不同分片的 MongoDB 进行设置,我想为 SQL Server 进行类似的设置,但是我遇到了很多麻烦。
有没有关于如何做到这一点的材料?这个过程有看起来那么艰难吗?
performance sql-server distributed-databases sql-server-2012 sharding performance-testing
非常奇怪的事情发生。这会出现的是所有查询都在我们的系统中针对特定数据库定期“运行缓慢”。即“正常速度”5 分钟,然后慢 5 分钟(大致)。
在进一步调查中(在消除“明显”的几天后),似乎有时客户端(Sql Server Management studio)多次发送查询并多次收到查询。
即“从客户端发送的字节数”将增加一倍甚至三倍,“从服务器接收的字节数”也会如此。“客户端处理时间”和“总执行时间”的增加模式明显相似。
这甚至发生SELECT * FROM table
在表有 3 行数据的情况下!
当一个查询变慢时,它们都会变慢。查询/结果集有多简单,或者访问哪个“客户端”(在基于 ADO.NET 的控制台应用程序/MVC Web 应用程序中相同)都无关紧要。
任何建议将不胜感激...
编辑
它也与网络无关,因为测试是从盒子本身运行的。
performance sql-server query-performance performance-testing
有谁知道任何现有的工具/产品可以完成我正在尝试做的事情?
在四处搜索之后,我唯一能找到的围绕我想要完成的事情是其他人在寻找同样的事情http://forums.mysql.com/read.php?24,192250,192250
这个想法是我想捕获到我的主人的所有流量,以针对监控开始时拍摄的整个数据库的快照保存重播日志。Bin 日志不会满足我的需求,因为它们只包含写入。我希望阅读活动能够真实地查看提议的更改对“真实”生产流量的影响。
真正的生产流量意味着来自所有访问数据库的应用程序的所有内容都将被修改。如果应用程序级别发生了某些更改,则仅运行该应用程序的测试不会考虑当时系统中正在进行的其他活动。不能保证在测试环境中运行的所有应用程序都具有相同的数据库状态。当我启动它们时,我可以将测试快照作为起点,但应用程序无法准确重放自己的活动。
我已经使用http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ 中的 tcpdump 脚本来监视活动,但这并没有告诉我哪些查询来自哪些连接。我想要的部分回放是多线程方法,它从实际使用的相同数量的线程中重放活动。
我负担不起打开常规查询日志记录 b/c 我的生产主机将无法处理性能损失。
整个过程的快照部分是有一个黄金起点数据库,以确保在每次测试运行开始时一切都相同。
我目前正在使用\timing on
Postgres 进行一些简单的性能测试。我想运行许多查询并将计时结果通过管道传输到文件。但是,我尝试过的所有选项(\o
、\l
和它们的命令行等效项)仅将查询结果通过管道传输到文件。该Time: 1.234 ms
消息不会被写入文件。
有什么方法可以将引起的计时输出通过管道\timing on
传输到文件中,还是必须选择其他方法来执行测试?
我正在评估 PostgreSQL 作为 Oracle 的替代品。我有一个包含 533 个表的数据库,其中最多包含 250,000 个条目。
\n\n为了进行性能比较,我在 Oracle 和 PostgreSQL 上构建了数据库。
\n\n然而,PostgreSQL 速度慢得多,并且它在 RAM 中存储的内容不多,而是具有大量的磁盘 I/O。
\n\n我的性能测试:
\n\n我的系统配置:
\n\n以下是我测量的性能(5 次运行的平均值):
\n\n\n\nNoTriggers 版本以ALTER TABLE x DISABLE ALL TRIGGERS
.
从图表中可以看出,PostgreSQL 并没有真正使用可用的 ram。\n查看资源监视器,它确实使用了高磁盘 io:
\n\n …postgresql performance performance-testing postgresql-performance
我刚刚看到这个函数定义:
create function dbo.f (@a int, @b int)
returns integer
as
begin
return case when
not exists (Select * from t1 where t1.col1 = @a)
AND @b > 0
then 1 else 0 end
end
GO
Run Code Online (Sandbox Code Playgroud)
看到一个不存在我想注意全表扫描并尝试改进它
create function dbo.f (@a int, @b int)
returns integer
as
begin
return case when
exists (Select * from t1 where t1.col1 = @a)
OR @b > 0
then 0 else 1 end
end
GO
Run Code Online (Sandbox Code Playgroud)
我的感觉是,这种转换可以由优化器来完成。看起来很简单,但我如何确定他是否这样做呢?
对伊戈尔的回答发表评论:( 由于马茨的评论而修复了比较)
这给我带来以下启发:
create …
Run Code Online (Sandbox Code Playgroud) performance ×10
sql-server ×5
mysql ×2
postgresql ×2
cache ×1
dbcc ×1
mysql-5.1 ×1
sharding ×1