-
Notifications
You must be signed in to change notification settings - Fork 341
Description
BC Idea Link
https://experience.dynamics.com/ideas/idea/?ideaid=0dce5f31-6512-f111-83da-6045bd81940a
Description
GitHub Issue β Body
BC Idea Link
Description
π― Goal
Improve the "Indexes List Part" page (8704) to provide a comprehensive, at-a-glance view of SQL index structure, SIFT maintenance, usage patterns, and health β while adding safeguards against accidental SIFT index disruption.
π€ User Stories
Index analysis: As a database administrator, I want to see the fields composing each index and its included columns directly on the page, so I can assess index coverage without querying the system tables separately.
SIFT visibility: As a consultant, I want to see which indexes maintain SIFT and which fields are aggregated, so I can evaluate FlowField performance impact at a glance.
Health monitoring: As an administrator, I want disabled indexes highlighted in red and high-fragmentation indexes visually flagged, so I can quickly spot indexes that need attention.
Usage metrics: As a performance analyst, I want a Reads/Writes ratio column, so I can identify write-heavy indexes that may be candidates for removal or restructuring.
Data accuracy: As a user, I do not want to see misleading default timestamps (e.g., 01/01/0001) for Last Seek/Scan/Lookup/Update when no activity has occurred β these should be blank.
SIFT protection: As an administrator, I want to be prevented from accidentally disabling a SIFT index, with a clear error message explaining why, instead of a confusing platform error.
π Technical Concept
- New Data Columns on the Repeater
Index Fields (Rec."Column Names"): Shows the fields composing the index (width 40).
Maintain SIFT (Boolean variable MaintainVSIFT): Populated from the Key virtual table's MaintainSIFTIndex field via a lookup in OnAfterGetRecord.
SIFT Fields (Text variable VSIFTFields): Populated from the Key virtual table's SumIndexFields field.
Included Columns (Rec."Included Fields"): Shows non-key columns included in the index for covering queries (width 40).
Reads/Writes (Decimal variable ReadWriteRatio): Computed as (User seeks + User scans + User lookups) / User updates (denominator defaults to 1 when updates = 0). - Column Reordering & FreezeColumn
Reorder columns: Enabled β AL Defined β Unique β Index Name β Index Fields β Maintain SIFT β SIFT Fields β Included Columns β Fragmentation β Index Size β Seeks β Scans β Lookups β Updates β Reads/Writes β Last Seek β Last Scan β Last Lookup β Last Update β Statistics updated at.
Set FreezeColumn = "Index Fields" so identification columns remain fixed during horizontal scroll. - Visual Styling (StyleExpr)
IndexStyleExpr: 'Unfavorable' (red) when Rec.Enabled = false, otherwise 'Standard'. Applied to all fields.
FragmentationStyleExpr: 'Unfavorable' when Rec."Fragmentation %" > 30, otherwise inherits IndexStyleExpr. - Blank Timestamps for Zero Counters
Convert Last Seek/Scan/Lookup/Update from record fields to Text variables (LastSeekText, LastScanText, LastLookupText, LastUpdateText).
In OnAfterGetRecord, set to Format(Rec."Last seek") only when the corresponding counter (User seeks, etc.) is non-zero; otherwise leave blank. - SIFT Disable Guard
In both TurnIndexOff and TurnIndexOffInAllCompanies action triggers, before proceeding:
Call FindKeyFromDatabaseIndex(Rec, KeyRec) to locate the matching Key record.
If KeyRec.MaintainSIFTIndex is true, raise Error(CannotDisableSIFTIndexErr, Rec."Index Name").
New label: CannotDisableSIFTIndexErr: Label 'Cannot enable or disable SIFT indexes ''%1''.' - Label Cleanup
TurnOnIndexQueueInfoMsg: Remove "(over the night local time)" β maintenance window timing is environment-specific.
I will provide the implementation for this BC Idea
I will provide the implementation for this BC Idea
- I will provide the implementation for this BC Idea