Categoria

Pagina 2 di 3

Performance: prestazioni misurate, con i numeri

Ottimizzare senza misurare è tirare a indovinare. Prima di toccare una riga bisogna sapere dove sta davvero il collo di bottiglia: quasi mai è dove il team pensa che sia, e quasi sempre costa molto meno di un rewrite o di un server più grande. In questa categoria la performance è un metodo.

Gran parte degli articoli riguarda la performance applicativa, che quasi sempre significa accesso ai dati: query lente ed Eloquent N+1, caching a più livelli con Redis usato dove serve, code e worker per togliere il lavoro pesante dal percorso della richiesta, e le leve del runtime come OPcache, PHP-FPM e i fibers. In ogni caso si misura il traffico reale, si trova il punto lento e si interviene lì.

Altri trattano la performance di sistema, spesso ignorata finché non esplode: RAM e swap su VPS modesti, cron che si pestano i piedi a vicenda, spazio disco che si satura e ferma il servizio, sessioni PHP che affondano un portale nelle ore di punta. Sono problemi invisibili nel codice che però fermano l'azienda, e si risolvono con una diagnosi prima di comprare hardware d'impulso.

Se un'applicazione o un server rallentano, vedi la consulenza IT e DevOps o scrivimi.

Prima di ottimizzare si misura, e dopo ogni modifica si misura di nuovo.

Database sharding in MySQL per applicazioni Laravel con milioni di record

Database sharding in MySQL per applicazioni Laravel con milioni di record Una piattaforma SaaS con 8 milioni di record nella tabella principale aveva query a 4 secondi nonostante tutti gli indici corretti. L'analisi ha mostrato che il problema non era l'indicizzazione ma il volume. Vi racconto l'approccio di sharding che abbiamo implementato con Laravel e come abbiamo gestito la migrazione live. Continua a leggere
Ultima modifica:

Configurare swap file per risolvere saturazioni RAM su VPS gestite senza supporto tecnico: guida pratica per Debian e Ubuntu

Configurare swap file per risolvere saturazioni RAM su VPS gestite senza supporto tecnico: guida pratica per Debian e Ubuntu Un VPS con 4 GB di RAM e zero swap: MySQL killato dall'OOM killer ogni notte durante l'import listini, con perdita di transazioni InnoDB. Come ho configurato uno swap file da 2 GB con swappiness a 10, perché ZRAM è spesso l'alternativa migliore su NVMe, e come proteggere i processi critici in modo permanente con systemd. Continua a leggere
Ultima modifica:

Ottimizzare sessioni PHP su VPS gestite senza supporto tecnico: guida avanzata per Debian e Ubuntu

Ottimizzare sessioni PHP su VPS gestite senza supporto tecnico: guida avanzata per Debian e Ubuntu Un portale Laravel con 200 utenti simultanei che diventava inutilizzabile nelle ore di punta: AJAX bloccati per 8-12 secondi, logout casuali, errori CSRF. La causa era il session locking su file. Migrazione a Redis con locking esplicito, TTL calibrato e garbage collection zero. Response time da 8s a 90ms. Continua a leggere
Ultima modifica:

Diagnosi e risoluzione di connessioni lente al database MySQL su VPS senza supporto tecnico: guida operativa per Debian e Ubuntu

Diagnosi e risoluzione di connessioni lente al database MySQL su VPS senza supporto tecnico: guida operativa per Debian e Ubuntu Un gestionale Laravel su Hetzner con MySQL che impiegava 3-4 secondi per ogni query di ricerca prodotti. La causa: InnoDB buffer pool a 128MB su un database da 6GB, reverse DNS lookup attivo e 47 query senza indice per ogni pagina catalogo. Diagnosi con slow query log, EXPLAIN e MySQLTuner, fix in due ore. Continua a leggere
Ultima modifica:

Ottimizzare cron job su VPS unmanaged: tecniche avanzate per prevenire colli di bottiglia e downtime

Ottimizzare cron job su VPS unmanaged: tecniche avanzate per prevenire colli di bottiglia e downtime Un VPS Hetzner con Laravel e 23 cron job tutti schedulati alle 02:00: load average a 47, MySQL in lock wait, import listini che si sovrappongono a sé stessi per tre ore. Ho ristrutturato l'intero scheduling con flock, nice/ionice, staggering e systemd timer. Il protocollo che applico a ogni VPS con più di 5 cron job. Continua a leggere
Ultima modifica:

Quando i microservizi sono la scelta sbagliata per il tuo monolite Laravel: il caso di una PMI lombarda

Quando i microservizi sono la scelta sbagliata per il tuo monolite Laravel: il caso di una PMI lombarda Una PMI lombarda con 8 sviluppatori e un monolite Laravel 10 lento aveva speso quattro mesi e 120.000 euro per migrare a microservizi. Risultato: tre servizi parzialmente funzionanti, zero in produzione, latenza raddoppiata e metà del team impegnato in infrastruttura Docker anziché in feature. La mia raccomandazione: fermare la migrazione, modularizzare il monolite con bounded context, e risolvere i veri problemi di performance. In due settimane il team era tornato produttivo. Continua a leggere
Ultima modifica:

Refactoring database MySQL su Laravel: report da 47 minuti a 11 secondi senza upgrade hardware

Refactoring database MySQL su Laravel: report da 47 minuti a 11 secondi senza upgrade hardware Un database MySQL da 12 GB su un VPS Contabo, un report mensile che impiegava 47 minuti, 38 indici su una tabella di cui 12 mai utilizzati, e una codebase Laravel 9 cresciuta per cinque anni senza che nessuno aprisse mai un EXPLAIN. Il caso reale di una PMI emiliana del marzo 2025: diagnosi con slow query log e EXPLAIN ANALYZE, invisible indexes per eliminare indici fantasma, tuning InnoDB, schema refactoring con migration sicure su tabelle da milioni di righe. Continua a leggere
Ultima modifica:

Performance PHP su Hetzner, OVH e Digital Ocean: come ho ridotto un checkout da 4,2 secondi a 280 millisecondi senza upgrade hardware

Performance PHP su Hetzner, OVH e Digital Ocean: come ho ridotto un checkout da 4,2 secondi a 280 millisecondi senza upgrade hardware Quando un'applicazione PHP rallenta sotto carico, il primo riflesso del cliente è "compriamo un server più grosso". È quasi sempre la mossa sbagliata e la più costosa. Il caso di un B2B veronese del gennaio 2025 in cui ho portato il checkout da 4,2 secondi a 280 millisecondi con otto ore di lavoro: fix del pattern N+1, un indice composito mancante, cache Redis usata male, tuning di OPcache e delle code asincrone. Continua a leggere
Ultima modifica:

Strumenti utili per la performance

Tool gratuiti a supporto del tuo lavoro:

Minifier HTML/CSS/JS, SQL formatter.