Quando concentrarsi veramente sulle prestazioni?

1

Abbiamo appena terminato la prima versione di un'applicazione web basata su database, che ora è in fase di test di regressione. L'applicazione ha una ricerca avanzata con molti diversi criteri di filtraggio. Quando la ricerca viene utilizzata per la prima volta con solo i 3 (di 28) criteri di ricerca minimi richiesti, impiega 15-20 secondi per calcolare e recuperare i dati per caricare la pagina.

Questo accade solo la prima volta che viene eseguita la ricerca (utilizza un proc memorizzato). La ricerca successiva richiede 2-6 secondi.

La stored procedure ha una complessità media attorno alle 1500 - 2000 linee. Mi piacerebbe farlo funzionare per la prima volta a 6 secondi e successivamente come 1-2 secondi ma non riesco a trovare il tempo per renderlo più veloce.

La mia domanda è, è accettabile per gli utenti se è lento solo la prima volta che viene eseguita la ricerca? Qualcun altro ha avuto un'esperienza simile con la creazione di ricerche avanzate? Qual è stata la tua soluzione?

    
posta Rayshawn 05.07.2013 - 05:50
fonte

2 risposte

11

"È accettabile" non è una domanda tecnica; è una domanda sul prodotto. In alcuni prodotti, 2-6 secondi potrebbero essere considerati orribilmente lenti mentre in altri, 15-20 secondi potrebbero essere abbastanza veloci. Quanto sono veloci i prodotti concorrenti? Quanto sono veloci i prodotti simili? Quale percentuale di clienti vedrà la lunga query originale rispetto alla query memorizzata nella cache più veloce? Se ti aspetti dieci milioni di query, una lenta sarà banale. Se ti aspetti dieci, allora non così tanto. Le risposte a queste domande ti diranno se è necessario ottimizzare.

Una soluzione tecnica che potresti provare sarebbe quella di preriscaldare queste query. Non mi è chiaro esattamente quante possibili query ci sono, ma se hai un numero abbastanza basso di queste query "lente", esegui immediatamente le azioni dopo la distribuzione, in modo che nessun cliente lo veda. Se esiste un numero estremamente elevato di query possibili, allora forse esegui quelle che trovi più comuni.

    
risposta data 05.07.2013 - 06:08
fonte
2

Puoi fare diverse cose:

Crea viste per il rendimento. Una vista è un contratto di intenzioni che indica all'RDBMS "Farò questa query molto spesso". Quando lo fai, l'RDBMS ottimizza l'accesso a questi dati.

Crea visualizzazioni per semplicità e ottimizzazione. Crea viste per suddividere la soluzione più grande in soluzioni più piccole. In questo modo puoi misurare esattamente dove si trova il collo di bottiglia e cercare di migliorare le aree problematiche.

Crea tabelle denormalizzate (viste materializzate). A volte ti ripaga per creare tabelle riepilogative al fine di rendere certi rapporti più veloci, specialmente di dati che non sono transazionali.

Crea un database non transazionale o datawarehouse per le query. La maggior parte degli RDBMS ha modi per ottimizzare un database speciale per le query quando questo database non è transazionale, cioè non viene colpito continuamente con inserti o aggiornamenti . L'intera serie di configurazioni di ottimizzazione se diverse quando il database ha questo scopo. È più efficiente di un database generico.

Metti la maggior parte delle tabelle interrogate nei dischi più veloci. sposta la maggior parte delle tabelle interrogate in tablespace situati in dischi migliori, più veloci e connessioni migliori (SAN). Spostare le tabelle non così importanti su dischi più lenti, meno costosi e connessioni meno veloci.

Utilizza le tecniche di programmazione della struttura per suddividere le tue stored procedure in quelle più piccole, in modo da tenere a bada la complessità. In questo modo puoi concentrarti meglio sul miglioramento delle prestazioni una volta che non hai tutta la compiacenza in faccia per tutto il tempo.

Utilizza le query con le variabili di associazione evitando quelle concatenate. In questo modo l'RDBMS è in grado di incassarle nell'area di query e vengono eseguite più rapidamente perché si risparmiano tempo di analisi e tempo di pianificazione.

Ricorda che il tuo DBA è tuo amico e lui / lei può fare molto per migliorare le prestazioni del database. Non fare affidamento esclusivamente sulle tue capacità di programmazione. Non sei solo.

    
risposta data 05.07.2013 - 06:15
fonte