我最近通过添加索引调整了一些查询,现在正在尝试评估该表的整体情况是否有所好转。
我已经从 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 个字节(总结所有这些数字)。有吗?我怎么能猜到中间水平?
无论如何......(更多关于“有根据的猜测”的方向)在您的经验中这真的很重要,因为我让我免于扫描表格并以常规方式执行此操作?
非常感谢您阅读并与我分享您对查询调优利润计算的见解。