SQL Server:查询性能利润计算

时间:2016-11-18 11:09:50

标签: sql-server performance controlling

我最近通过添加一个索引调整了一些查询,现在我正试图判断该表的整体情况是否有所改善。

我已从sys.dm_db_index_usage_stats中捕获了一些指标。 第一个图表显示了该特定新索引的总体 user_seeks(扫描,查找和user_updates(写入))之间的差异。 第二个图表只需从该索引的所有读取中减去 user_updates。仅从这些数字看,我可以清楚地看到,索引写得比实际读取的更多。

然而,这个索引特别有助于两个监控查询每分钟24/7每分钟点击服务器。在我添加此索引之前,这些查询执行了聚簇索引扫描。通过查看聚簇索引的度量,我可以清楚地看到扫描的数量下降了新索引现在被搜索的速率(每6小时窗口搜索720次,因此每天搜索2.880次(或以前的聚簇索引扫描))。

感谢您耐心等待所有这些....现在回答我的问题。我能以何种方式计算写入新索引的MB卷的数量。我想在IO(以MB为单位)与所有表扫描之间进行比较,然后在寻求和维护新索引时对IO进行比较。

这就是我做的计算:

Read IO Table Scan             79.977 Reads / 128 = 765,45 MB

-Read IO Index Seek                15 Reads / 128 = 0,12 MB

= Read IO Savings per query    765,33 MB

Read IO savings per day        765,33 MB * 2.880 = 2.152 GB

- 每天写入新索引26.000写入*每行写入49字节= 1.274.000字节

Overall benefit per day          2.152 - 754.000/(1024^3) = 2.152 - 0,0011= 2.151,99 ?????

我在读取IO上的节省非常简单,因为我在查询调优期间收集了这些信息。但是,如何计算(或做出有根据的猜测)写入该索引的IO开销?我知道我每天要做大约26.000次写作。索引具有以下结构:

 [2 KEYS] column1 {datetime 8}, column2 {datetime 8} [3 INCLUDES]  column3 {bit 1}, column4 {bigint 8}, column5 {int 4} [SECRET COLUMNS (Clustered Key)] [3 KEYS] column6 {bigint 8}, column7 {bigint 8}, column8{int 4}

所以我猜叶级记录有49个字节(总结所有这些数字)。有吗?我怎么能猜到中间水平?

无论如何...(更多关于"有根据的猜测"的方向)在你的经历中真的很重要,因为我正在拯救我无论如何都要扫描桌子并以正常的方式做这件事吗? / p>

非常感谢您阅读并与我分享您对查询调优利润计算的见解。

Index Performance

1 个答案:

答案 0 :(得分:0)

查看dmv sys.dm_db_index_operational_stats,它将提供有关SQL Server必须移动和读取多少页面的信息,以便完成查询/更新。这样可以更好地查看实际IO。另外,请仔细查看Waits上的列,它会告诉您索引维护是否会导致其他查询出现问题。