fabrizio ha scritto:
pure ben fatto. Ci sono però poi delle funzioni quali "Conta numero oggetti
presenti" che altro non fa che fare una count(idoggetto) e quindi si deve
scorrere una tabella intera per contare tutti li oggetti presenti. Alcune
avendone anche 100 milioni fanno piantare il sistema. Dato che in alcuni
call center non hanno nulla da fare che fare ripetutamente questa funzione
lo credo che il sistema poi è lento!!!! qui però poi vado ad agire con
meccanismi di profilazione degli utenti, cioè gli taglio le mani!! ;-)
ma puoi fare più semplicemente una modifica e far si che ogni X minuti
giri una query che aggiorni una tabella contenenti solo tali totali (con
la data in cui sono stati calcolati) e gli utenti vedono solo i totali
già calcolati (magari gli mostri anche la data in cui sono stati
calcolati). Così tutti possono usare la funzione quante volte vogliono e
il sistema non ne risente.
Poi bisogna stare attenti anche al fatto che la stessa query lanciata da
utenti diversi potrebbe avere comportamenti totalmente differenti,
questo perché il db potrebbe scegliere strategie di esecuzione
differenti a seconda dell'utente ... questo può accadere se gli utenti
sono differenziati e sulle varie tabelle messe in join alcuni dati sono
differenti a seconda dell'utente.
quello che mi preoccupa sono le performance del db che tiene in pancia
qualche centinaio di milioni di record. Puoi quindi capire che qualche
query possa andare lenta!!!
Non conta molto la dimensione della tabella, ma conta come è strutturata
(chiave, indici, trigger, ...) e come avviene l'accesso su di essa.
Mettere anche un solo indice "sbagliato" può rallentare l'esecuzione di
alcune query che accedono a tale tabella, se ci sono alcuni indici
sbagliati sulle tabelle più importanti puoi avere un sistema che non è
in grado di funzionare decentemente neanche monoutente.
Se il db è ben strutturato, è su una macchina con buone prestazioni, ha
sufficiente RAM (quindi non fa swap su disco durante le esecuzioni delle
query), l'accesso al disco è ottimale (non è il collo di bottiglia del
sistema) e le query vanno tutte per indici non dovrebbero esserci
problemi di velocità (poi dipende da quanti sono, in media, gli utenti
contemporanei e da che db stai usando, la strategia di esecuzione di
default, ...).
Per quelle query che devono per forza scorrere tabelle grosse bisogna
trovare delle soluzioni alternative, come quella che ti ho riportato qui
sopra.
Ciao
Davide
--
Dizionari: http://sourceforge.net/projects/linguistico
Conoscere il TC: http://www.no1984.org
Strumenti per l'ufficio: http://it.openoffice.org
Sistema operativo: http://www.it.debian.org
Browser: http://www.mozilla.org/products/firefox
Client di posta: http://www.mozilla.org/products/thunderbird
Linux User: 302090: http://counter.li.org
--
Non autorizzo la memorizzazione del mio indirizzo di posta a chi usa
outlook: non voglio essere invaso da spam