protected override void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo) { QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.UtilizedIndexes, indentLevel: 1); foreach (IndexUtilizationData indexUtilizationData in indexUtilizationInfo.UtilizedIndexes) { WriteIndexUtilizationData(indexUtilizationData); } QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.PotentialIndexes, indentLevel: 1); foreach (IndexUtilizationData indexUtilizationData in indexUtilizationInfo.PotentialIndexes) { WriteIndexUtilizationData(indexUtilizationData); } void WriteIndexUtilizationData(IndexUtilizationData indexUtilizationData) { QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.FilterExpression}: {indexUtilizationData.FilterExpression}", indentLevel: 2); QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexExpression}: {indexUtilizationData.IndexDocumentExpression}", indentLevel: 2); QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.FilterExpressionPrecision}: {indexUtilizationData.FilterExpressionPrecision}", indentLevel: 2); //QueryMetricsTextWriter.AppendHeaderToStringBuilder(stringBuilder, $"{QueryMetricsTextWriter.IndexPlanFullFidelity}: {indexUtilizationData.IndexPlanFullFidelity}", indentLevel: 2); //currently not exposed to the users QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, IndexUtilizationSeparator, indentLevel: 2); } }
public Accumulator Accumulate(IndexUtilizationInfo indexUtilizationInfo) { return(new Accumulator( utilizedSingleIndexes: (this.UtilizedSingleIndexes ?? Enumerable.Empty <SingleIndexUtilizationEntity>()).Concat(indexUtilizationInfo.UtilizedSingleIndexes), potentialSingleIndexes: (this.PotentialSingleIndexes ?? Enumerable.Empty <SingleIndexUtilizationEntity>()).Concat(indexUtilizationInfo.PotentialSingleIndexes), utilizedCompositeIndexes: (this.UtilizedCompositeIndexes ?? Enumerable.Empty <CompositeIndexUtilizationEntity>()).Concat(indexUtilizationInfo.UtilizedCompositeIndexes), potentialCompositeIndexes: (this.PotentialCompositeIndexes ?? Enumerable.Empty <CompositeIndexUtilizationEntity>()).Concat(indexUtilizationInfo.PotentialCompositeIndexes))); }
public QueryMetrics( BackendMetrics backendMetrics, IndexUtilizationInfo indexUtilizationInfo, ClientSideMetrics clientSideMetrics) { this.BackendMetrics = backendMetrics ?? throw new ArgumentNullException(nameof(backendMetrics)); this.IndexUtilizationInfo = indexUtilizationInfo ?? throw new ArgumentNullException(nameof(indexUtilizationInfo)); this.ClientSideMetrics = clientSideMetrics ?? throw new ArgumentNullException(nameof(clientSideMetrics)); }
public void WriteIndexMetrics(IndexUtilizationInfo indexUtilizationInfo) { // IndexUtilizationInfo this.WriteBeforeIndexUtilizationInfo(); this.WriteIndexUtilizationInfo(indexUtilizationInfo); this.WriteAfterIndexUtilizationInfo(); }
public QueryMetrics( string deliminatedString, IndexUtilizationInfo indexUtilizationInfo, ClientSideMetrics clientSideMetrics) : this(!String.IsNullOrWhiteSpace(deliminatedString) && BackendMetricsParser.TryParse(deliminatedString, out BackendMetrics backendMetrics) ? backendMetrics : BackendMetrics.Empty, indexUtilizationInfo, clientSideMetrics) { }
protected override void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo) { QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.UtilizedSingleIndexes, indentLevel: 1); foreach (SingleIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.UtilizedSingleIndexes) { WriteSingleIndexUtilizationEntity(indexUtilizationEntity); } QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.PotentialSingleIndexes, indentLevel: 1); foreach (SingleIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.PotentialSingleIndexes) { WriteSingleIndexUtilizationEntity(indexUtilizationEntity); } QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.UtilizedCompositeIndexes, indentLevel: 1); foreach (CompositeIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.UtilizedCompositeIndexes) { WriteCompositeIndexUtilizationEntity(indexUtilizationEntity); } QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.PotentialCompositeIndexes, indentLevel: 1); foreach (CompositeIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.PotentialCompositeIndexes) { WriteCompositeIndexUtilizationEntity(indexUtilizationEntity); } void WriteSingleIndexUtilizationEntity(SingleIndexUtilizationEntity indexUtilizationEntity) { QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.FilterExpression}: {indexUtilizationEntity.FilterExpression}", indentLevel: 2); QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexExpression}: {indexUtilizationEntity.IndexDocumentExpression}", indentLevel: 2); QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexImpactScore}: {indexUtilizationEntity.IndexImpactScore}", indentLevel: 2); QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, IndexUtilizationSeparator, indentLevel: 2); } void WriteCompositeIndexUtilizationEntity(CompositeIndexUtilizationEntity indexUtilizationEntity) { QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexExpression}: {String.Join(", ", indexUtilizationEntity.IndexDocumentExpressions)}", indentLevel: 2); QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexImpactScore}: {indexUtilizationEntity.IndexImpactScore}", indentLevel: 2); QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, IndexUtilizationSeparator, indentLevel: 2); } }
protected override void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo) { StringBuilder strBuilder = new StringBuilder(); foreach (SingleIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.UtilizedSingleIndexes) { WriteSingleIndexUtilizationEntity(strBuilder, indexUtilizationEntity); } this.AppendKeyValuePair(QueryMetricsDelimitedStringWriter.UtilizedSingleIndexes, $"[{strBuilder}]"); strBuilder.Clear(); foreach (SingleIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.PotentialSingleIndexes) { WriteSingleIndexUtilizationEntity(strBuilder, indexUtilizationEntity); } this.AppendKeyValuePair(QueryMetricsDelimitedStringWriter.PotentialSingleIndexes, $"[{strBuilder}]"); strBuilder.Clear(); foreach (CompositeIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.UtilizedCompositeIndexes) { WriteCompositeIndexUtilizationEntity(strBuilder, indexUtilizationEntity); } this.AppendKeyValuePair(QueryMetricsDelimitedStringWriter.UtilizedCompositeIndexes, $"[{strBuilder}]"); strBuilder.Clear(); foreach (CompositeIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.PotentialCompositeIndexes) { WriteCompositeIndexUtilizationEntity(strBuilder, indexUtilizationEntity); } this.AppendKeyValuePair(QueryMetricsDelimitedStringWriter.PotentialCompositeIndexes, $"[{strBuilder}]");
/// <summary> /// Creates a new IndexUtilizationInfo from the backend delimited string. /// </summary> /// <param name="delimitedString">The backend delimited string to deserialize from.</param> /// <param name="result">The parsed index utilization info</param> /// <returns>A new IndexUtilizationInfo from the backend delimited string.</returns> internal static bool TryCreateFromDelimitedString(string delimitedString, out IndexUtilizationInfo result) { if (delimitedString == null) { result = IndexUtilizationInfo.Empty; return(true); } try { string indexString = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(delimitedString)); result = JsonConvert.DeserializeObject <IndexUtilizationInfo>(indexString); if (result == null) { result = IndexUtilizationInfo.Empty; } return(true); } catch { result = IndexUtilizationInfo.Empty; return(false); } }
public Accumulator Accumulate(IndexUtilizationInfo indexUtilizationInfo) { return(new Accumulator( utilizedIndexes: (this.UtilizedIndexes ?? Enumerable.Empty <IndexUtilizationData>()).Concat(indexUtilizationInfo.UtilizedIndexes), potentialIndexes: (this.PotentialIndexes ?? Enumerable.Empty <IndexUtilizationData>()).Concat(indexUtilizationInfo.PotentialIndexes))); }
protected abstract void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo);
protected override void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo) { // Do nothing }