2016-11-18 210 views
3

我最近通过添加一个索引来调整一些查询,并且现在正试图在该表的整体情况变得更好的情况下进行查询。SQL Server:查询性能利润计算

我从sys.dm_db_index_usage_stats抓获了一些指标。所述第一图表显示之间的差整体user_seeks(扫描,查找和user_updates(写入)),选择那些特定的新索引的数量。所述第二图表简单地减去user_updates从所有的读取该索引。单看这些数字,我可以清楚地看到,索引更多地写入,而不是实际读取。

然而,该指数特别是帮助两个监控查询击中服务器每分钟24/7。在添加此索引之前,这些查询进行了聚簇索引扫描。通过查看聚集索引的度量标准,我可以清楚地看到,新索引现在获取的扫描次数以相同速率下降(720每6小时查找一次,因此每天有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个字节(总结所有数字)。有吗?我怎么能猜中间水平?

无论如何...(更多关于“受过教育的猜测”的方向)在你的经历中是否真的很重要,因为我无论如何都无法保存我的扫描表并以常规方式进行此操作?

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

Index Performance

回答

0

退房的DMV sys.dm_db_index_operational_stats中,它会提供有关SQL Server是多少页有走动和阅读,以满足查询/更新的信息。这可以更好地了解实际的IO。同时仔细看看Waits上的列,它会让你知道索引维护是否导致其他查询出现问题。