@@ -183,47 +183,43 @@ public static List<Index> GetIndexes(SqlConnection connection) {
183183
184184 DateTime ? lastWrite = _ . Field < DateTime ? > ( Resources . LastWrite ) ;
185185 DateTime ? lastRead = _ . Field < DateTime ? > ( Resources . LastRead ) ;
186- long ? seeks = _ . Field < long ? > ( Resources . TotalSeeks ) ;
187- long ? scans = _ . Field < long ? > ( Resources . TotalScans ) ;
188- long ? lookups = _ . Field < long ? > ( Resources . TotalLookups ) ;
189186
190187 Index index = new Index {
191- DatabaseName = connection . Database ,
192- ObjectId = _ . Field < int > ( Resources . ObjectID ) ,
193- IndexId = _ . Field < int > ( Resources . IndexID ) ,
194- IndexName = _ . Field < string > ( Resources . IndexName ) ,
195- ObjectName = _ . Field < string > ( Resources . ObjectName ) ,
196- SchemaName = _ . Field < string > ( Resources . SchemaName ) ,
197- PagesCount = _ . Field < long > ( Resources . PagesCount ) ,
198- UnusedPagesCount = _ . Field < long > ( Resources . UnusedPagesCount ) ,
199- PartitionNumber = _ . Field < int > ( Resources . PartitionNumber ) ,
200- RowsCount = _ . Field < long > ( Resources . RowsCount ) ,
201- FileGroupName = _ . Field < string > ( Resources . FileGroupName ) ,
202- IndexType = indexType ,
203- IsPartitioned = _ . Field < bool > ( Resources . IsPartitioned ) ,
204- IsUnique = _ . Field < bool > ( Resources . IsUnique ) ,
205- IsPK = _ . Field < bool > ( Resources . IsPK ) ,
206- IsFiltered = _ . Field < bool > ( Resources . IsFiltered ) ,
207- FillFactor = _ . Field < int > ( Resources . FillFactor ) ,
208- IndexStats = _ . Field < DateTime ? > ( Resources . IndexStats ) ,
209- TotalWrites = _ . Field < long ? > ( Resources . TotalWrites ) ,
210- TotalReads = ( seeks ?? 0 ) + ( scans ?? 0 ) > 0 ? ( seeks ?? 0 ) + ( scans ?? 0 ) : ( long ? ) null ,
211- TotalSeeks = seeks ,
212- TotalScans = scans ,
213- TotalLookups = lookups ,
214- LastWrite = lastWrite ,
215- LastRead = lastRead ,
216- LastUsage = Nullable . Compare ( lastWrite , lastRead ) > 0 ? lastWrite : lastRead ,
217- CreateDate = _ . Field < DateTime > ( Resources . CreateDate ) ,
218- ModifyDate = _ . Field < DateTime > ( Resources . ModifyDate ) ,
219- DataCompression = ( DataCompression ) _ . Field < byte > ( Resources . DataCompression ) ,
220- Fragmentation = _ . Field < double ? > ( Resources . Fragmentation ) ,
221- PageSpaceUsed = _ . Field < double ? > ( Resources . PageSpaceUsed ) ,
222- IsAllowReorganize = _ . Field < bool > ( Resources . IsAllowPageLocks ) && indexType != IndexType . HEAP ,
223- IsAllowOnlineRebuild = isOnlineRebuild ,
224- IsAllowCompression = Settings . ServerInfo . IsCompressionAvailable && ! _ . Field < bool > ( Resources . IsSparse ) ,
225- IndexColumns = _ . Field < string > ( Resources . IndexColumns ) ,
226- IncludedColumns = _ . Field < string > ( Resources . IncludedColumns )
188+ DatabaseName = connection . Database ,
189+ ObjectId = _ . Field < int > ( Resources . ObjectID ) ,
190+ IndexId = _ . Field < int > ( Resources . IndexID ) ,
191+ IndexName = _ . Field < string > ( Resources . IndexName ) ,
192+ ObjectName = _ . Field < string > ( Resources . ObjectName ) ,
193+ SchemaName = _ . Field < string > ( Resources . SchemaName ) ,
194+ PagesCount = _ . Field < long > ( Resources . PagesCount ) ,
195+ UnusedPagesCount = _ . Field < long > ( Resources . UnusedPagesCount ) ,
196+ PartitionNumber = _ . Field < int > ( Resources . PartitionNumber ) ,
197+ RowsCount = _ . Field < long > ( Resources . RowsCount ) ,
198+ FileGroupName = _ . Field < string > ( Resources . FileGroupName ) ,
199+ IndexType = indexType ,
200+ IsPartitioned = _ . Field < bool > ( Resources . IsPartitioned ) ,
201+ IsUnique = _ . Field < bool > ( Resources . IsUnique ) ,
202+ IsPK = _ . Field < bool > ( Resources . IsPK ) ,
203+ IsFiltered = _ . Field < bool > ( Resources . IsFiltered ) ,
204+ FillFactor = _ . Field < int > ( Resources . FillFactor ) ,
205+ IndexStats = _ . Field < DateTime ? > ( Resources . IndexStats ) ,
206+ TotalUpdates = _ . Field < long ? > ( Resources . TotalUpdates ) ,
207+ TotalSeeks = _ . Field < long ? > ( Resources . TotalSeeks ) ,
208+ TotalScans = _ . Field < long ? > ( Resources . TotalScans ) ,
209+ TotalLookups = _ . Field < long ? > ( Resources . TotalLookups ) ,
210+ LastWrite = lastWrite ,
211+ LastRead = lastRead ,
212+ LastUsage = Nullable . Compare ( lastWrite , lastRead ) > 0 ? lastWrite : lastRead ,
213+ CreateDate = _ . Field < DateTime > ( Resources . CreateDate ) ,
214+ ModifyDate = _ . Field < DateTime > ( Resources . ModifyDate ) ,
215+ DataCompression = ( DataCompression ) _ . Field < byte > ( Resources . DataCompression ) ,
216+ Fragmentation = _ . Field < double ? > ( Resources . Fragmentation ) ,
217+ PageSpaceUsed = _ . Field < double ? > ( Resources . PageSpaceUsed ) ,
218+ IsAllowReorganize = _ . Field < bool > ( Resources . IsAllowPageLocks ) && indexType != IndexType . HEAP ,
219+ IsAllowOnlineRebuild = isOnlineRebuild ,
220+ IsAllowCompression = Settings . ServerInfo . IsCompressionAvailable && ! _ . Field < bool > ( Resources . IsSparse ) ,
221+ IndexColumns = _ . Field < string > ( Resources . IndexColumns ) ,
222+ IncludedColumns = _ . Field < string > ( Resources . IncludedColumns )
227223 } ;
228224
229225 indexes . Add ( index ) ;
@@ -251,8 +247,6 @@ public static List<Index> GetIndexes(SqlConnection connection) {
251247 . Replace ( "]" , string . Empty )
252248 . Replace ( " " , string . Empty ) . Truncate ( 240 ) ;
253249
254- long ? seeks = _ . Field < long ? > ( Resources . TotalSeeks ) ;
255- long ? scans = _ . Field < long ? > ( Resources . TotalScans ) ;
256250 DateTime ? lastRead = _ . Field < DateTime ? > ( Resources . LastRead ) ;
257251
258252 Index index = new Index {
@@ -266,9 +260,8 @@ public static List<Index> GetIndexes(SqlConnection connection) {
266260 FileGroupName = "PRIMARY" ,
267261 IndexType = IndexType . MISSING_INDEX ,
268262 IndexStats = _ . Field < DateTime ? > ( Resources . IndexStats ) ,
269- TotalReads = ( seeks ?? 0 ) + ( scans ?? 0 ) > 0 ? ( seeks ?? 0 ) + ( scans ?? 0 ) : ( long ? ) null ,
270- TotalSeeks = seeks ,
271- TotalScans = scans ,
263+ TotalSeeks = _ . Field < long ? > ( Resources . TotalSeeks ) ,
264+ TotalScans = _ . Field < long ? > ( Resources . TotalScans ) ,
272265 LastRead = lastRead ,
273266 LastUsage = lastRead ,
274267 DataCompression = DataCompression . NONE ,
@@ -404,8 +397,8 @@ public static void FindUnusedIndexes(List<Index> indexes) {
404397 foreach ( Index ix in indexes . Where (
405398 _ => ! _ . IsPartitioned
406399 && _ . Warning == null
407- && _ . TotalWrites > 50000
408- && ( _ . TotalReads ?? 0 ) < _ . TotalWrites / 20
400+ && _ . TotalUpdates > 50000
401+ && ( _ . TotalScans ?? 0 ) + ( _ . TotalSeeks ?? 0 ) < ( _ . TotalUpdates ?? 0 ) / 20
409402 && ( _ . IndexType == IndexType . CLUSTERED || _ . IndexType == IndexType . NONCLUSTERED || _ . IndexType == IndexType . HEAP ) ) ) {
410403 ix . Warning = WarningType . UNUSED ;
411404 }
0 commit comments