如何清除 Azure 上托管的 SQL Server DB 的缓冲区?

Sau*_*abh 4 sql-server azure-sql-database azure

我正在尝试微调我的查询和存储过程。我面临的问题是无法清除 Azure 中的数据库缓冲区。这意味着我不能DBCC DROPCLEANBUFFERS在 Azure 上使用。

是否有一些解决方法可以清理缓冲区,以便我可以测试存储过程的实际时间?我正在考虑减少页面的预期寿命(尽管我不确定我是否真的能做到)。

我尝试更改数据库的层,因为在一篇文章中提到它可能会清除缓冲区,但它没有任何效果。

我需要这个,因为本地机器(带有 8 GB ram 的 I5)太快了,并且在本地机器上执行需要一秒钟的查询在 Azure S2(20 DTU)SQL DB 上需要大约 30 - 40 秒。

Bre*_*zar 11

您基本上要做的是测量云中的存储速度。不幸的是,这不一定是可重复或可靠的——它可能会受到嘈杂的邻居、其他人在同一数据库上进行开发、因您的存储类型而异等的影响。

与其清除缓冲区或测量查询运行时间,不如尝试从测量逻辑读取开始。它是查询为实现其目标而读取的 8KB 页数。

在 SSMS 或 Operations Studio 中,运行:

SET STATISTICS IO ON;
Run Code Online (Sandbox Code Playgroud)

然后运行您的查询,并查看每个表上逻辑读取的输出消息——这是它读取的 8KB 页面的数量。(忽略物理读取——这些会根据缓存中的内容不时发生变化。)一般来说,读取更少的页面意味着更快的查询——无论这些页面是从内存还是从磁盘读取。

如果您的查询引用了很多表,那么不要尝试使用计算器将这些数字相加,而是将消息复制/粘贴到StatisticsParser.com 中。为您提供整体逻辑读取的一个很好的总结,即使在批处理中的多个语句中也是如此。(免责声明:该开源站点是由我的一名员工编写的,但与我的公司无关。)