La chiave per rintracciare i problemi di prestazioni è:
- Scopri quando esistono.
- Avere un contesto sufficiente per capire cosa stava andando storto quando erano lenti.
La chiave per entrambi è la registrazione. L'ideale è avere la registrazione con livelli di registrazione opzionali che consentiranno di visualizzare più dettagli che possono essere attivati selettivamente.
Per un ottimo esempio di ciò che funziona, dai un'occhiata a Oracle. In ogni momento, come parte delle funzionalità di base del sistema, tiene traccia di quali query sono state eseguite e per quanto tempo hanno impiegato. I DBA possono andare e guardare la situazione per capire dove vanno le prestazioni. (Non limitarti a guardare cose lente, in un sistema sotto carico una query veloce molto comune può essere un problema più grande di una occasionale lente.) Inoltre hai la possibilità di prendere una query, eseguirla e fare uscire Oracle una traccia dettagliata di esattamente quello che è successo e dove è andato il tempo. Sulla base di tali discariche è possibile per un DBA esperto capire esattamente cosa è successo e dove si trova il collo di bottiglia.
Sì, c'è un sovraccarico costante dovuto alla presenza di questo monitoraggio. Cercano di minimizzarlo, ma è ancora lì. Tuttavia, la prima volta che ti aiuta a individuare un collo di bottiglia per le prestazioni che non avevi realizzato era lì, si ripaga da solo. Senza monitoraggio, stai pregando che non crei problemi sciocchi. La preghiera non è semplicemente un modo affidabile per raggiungere la scalabilità.
Se hai un sistema complesso con molti RPC, la vita diventa più complicata. La sfortunata realtà è che rintracciare una richiesta front-end apparentemente casuale a un RPC con diversi livelli di profondità che possono o non possono sparare possono trasformarsi in un incubo. La soluzione, che praticamente nessuno fa, è quella di avere il meccanismo RPC in grado di etichettare una piccola parte delle richieste come "proiettili traccianti". Quelle richieste e tutti gli RPC in modo ricorsivo attraverso il tuo sistema verranno registrati nei dettagli e quei log raccolti insieme per fornire un'immagine accurata di tali richieste. Certo, c'è un sovraccarico nel farlo. Ecco perché qualcosa come lo 0,1% delle richieste viene registrato in quel dettaglio. Ma quando il sistema ha dei problemi, ora puoi entrare e cercare una richiesta di tracciamento lenta, aprirla e vedere immediatamente dove si trova il problema delle prestazioni.
Sì, questo è un sacco di lavoro. Sì, è invasivo. Ma non posso sottolineare abbastanza quanto sia importante avere questo in un sistema complesso e di grandi dimensioni. Come dice il vecchio proverbio, la mancata pianificazione ha intenzione di fallire. Se non hai un piano per capire i problemi di prestazioni, quando succedono non hai un modo per capirli.