| 12345678910111213141516171819202122232425262728293031323334353637 |
- import { hasIndexRecommendations } from '../../QueryPerformance/IndexAdvisor/index-advisor.utils'
- import type { QueryPerformanceRow } from '../../QueryPerformance/QueryPerformance.types'
- import { SLOW_QUERY_THRESHOLD_MS } from '../QueryInsightsHealth/QueryInsightsHealth.constants'
- import type { IssueType } from '../QueryInsightsHealth/QueryInsightsHealth.types'
- export function classifyQuery(row: QueryPerformanceRow): { issueType: IssueType; hint: string } {
- // undefined means index advisor is still loading — defer index classification only to avoid
- // flickering between 'slow' and 'index' as results arrive, but still classify slow queries
- if (row.index_advisor_result === undefined) {
- if (row.mean_time > SLOW_QUERY_THRESHOLD_MS) {
- return { issueType: 'slow', hint: 'Abnormally slow query detected' }
- }
- return { issueType: null, hint: '' }
- }
- const advisorErrors = row.index_advisor_result?.errors
- if (advisorErrors && advisorErrors.length > 0) {
- return { issueType: 'error', hint: advisorErrors[0] }
- }
- if (hasIndexRecommendations(row.index_advisor_result, true)) {
- const statements = row.index_advisor_result?.index_statements ?? []
- return {
- issueType: 'index',
- hint: `Missing index: ${statements[0] ?? 'Index suggestion available'}`,
- }
- }
- if (row.mean_time > SLOW_QUERY_THRESHOLD_MS) {
- return {
- issueType: 'slow',
- hint: `Abnormally slow query detected`,
- }
- }
- return { issueType: null, hint: '' }
- }
|