query-performance-optimizer
Analyze SAP OData query execution patterns to identify bottlenecks and recommend performance improvements. Optimizes query speed, bandwidth usage, and caching strategies based on execution statistics.
Instructions
Optimize SAP OData query performance by analyzing execution patterns and suggesting improvements. Automatically identifies bottlenecks and recommends index strategies.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Original OData query URL to optimize | |
| entityType | Yes | Target entity type | |
| executionStats | No | Query execution statistics | |
| optimizationGoals | No | Primary optimization objectives |
Implementation Reference
- src/tools/ai-enhanced-tools.ts:245-345 (handler)Core handler implementation of the 'query-performance-optimizer' tool. Includes name, description, inputSchema for validation, execute method for optimization logic using AI, and helper methods for analyzing improvements and estimating gains.export class QueryPerformanceOptimizerTool implements Tool { [key: string]: unknown; name = 'query-performance-optimizer'; description = 'Analyze and optimize SAP OData queries for better performance using AI recommendations.'; inputSchema = { type: 'object' as const, properties: { query: { type: 'string' as const, description: 'Original OData query URL to optimize', }, entityType: { type: 'string' as const, description: 'Target entity type', }, executionStats: { type: 'object' as const, properties: { executionTime: { type: 'number' as const }, recordCount: { type: 'number' as const }, dataSize: { type: 'number' as const }, }, }, optimizationGoals: { type: 'array' as const, items: { type: 'string' as const, enum: ['speed', 'bandwidth', 'accuracy', 'caching'] as const, }, description: 'Primary optimization objectives', }, }, required: ['query', 'entityType'], }; async execute(params: any): Promise<any> { try { logger.info('Optimizing query performance', { originalQuery: params.query, entityType: params.entityType, goals: params.optimizationGoals, }); // Create mock entity for optimization const tool = new NaturalQueryBuilderTool(); const mockEntityType = tool.createMockEntityType(params.entityType); const optimizationResult = await aiIntegration.optimizeQuery( `Optimize this query for performance: ${params.query}`, mockEntityType, { optimizationGoals: params.optimizationGoals } ); const improvements = this.analyzeImprovements(params.query, optimizationResult.url); const performanceGain = this.estimatePerformanceGain(improvements); return { success: true, originalQuery: params.query, optimizedQuery: optimizationResult.url, improvements, performanceGain, explanation: optimizationResult.explanation, }; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; logger.error('Query optimization failed', { error: errorMessage }); return { success: false, originalQuery: params.query, error: errorMessage, }; } } private analyzeImprovements(original: string, optimized: string): string[] { const improvements: string[] = []; if (optimized.includes('$select') && !original.includes('$select')) { improvements.push('Added field selection to reduce data transfer'); } if (optimized.includes('$top') && !original.includes('$top')) { improvements.push('Added result limit to improve response time'); } if (improvements.length === 0) { improvements.push('Query structure optimized for better SAP backend processing'); } return improvements; } private estimatePerformanceGain(improvements: string[]): string { const totalGain = Math.min(improvements.length * 15, 80); return `Estimated ${totalGain}% performance improvement`; } }
- src/tools/ai-enhanced-tools.ts:462-467 (registration)The tool is instantiated and added to the aiEnhancedTools export array, serving as the registry for AI-enhanced tools.export const aiEnhancedTools = [ new NaturalQueryBuilderTool(), new SmartDataAnalysisTool(), new QueryPerformanceOptimizerTool(), new BusinessProcessInsightsTool(), ];
- Input schema definition for the tool, specifying parameters like query, entityType (required), executionStats, and optimizationGoals.inputSchema = { type: 'object' as const, properties: { query: { type: 'string' as const, description: 'Original OData query URL to optimize', }, entityType: { type: 'string' as const, description: 'Target entity type', }, executionStats: { type: 'object' as const, properties: { executionTime: { type: 'number' as const }, recordCount: { type: 'number' as const }, dataSize: { type: 'number' as const }, }, }, optimizationGoals: { type: 'array' as const, items: { type: 'string' as const, enum: ['speed', 'bandwidth', 'accuracy', 'caching'] as const, }, description: 'Primary optimization objectives', }, }, required: ['query', 'entityType'], };