Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    65

    [PHP] Esecuzione php multiprocessore.

    E' una domanda credo abbastanza tosta, ma provo a porla ugualmente.

    Lavoro con aziende che gestiscono diversi milioni di recond dentro mysql, hanno server dedicati, con anche una ram pazzesca. Il problema è che effettuare query su così tanti dati porta via anche 10 secondi ogni volta (chiave primaria definita, come anche gli indici pertinenti).

    Ho lanciato in parallelo un test una versione del software che ricrea la tabella principale e la clona facendola Memory sulla ram, per una piu veloce lettura dei dati (e la aggiorna ogni notte alle 3, prima del reboot). Questa soluzione mi porta ad arrivare già a circa 5 secondi (non memory sono quasi 10, dischi raid 1+0). E' purtroppo ancora troppo, le procedure più toste (estrapolazioni delle statistiche) devono essere effettuate piu velocemente.

    Ho proposto all'azienda di effettuare i controlli prima del riavvio del server, salvarli da qualche parte e far vedere loro i dati del giorno precedente, ma vogliono poter monitorizzare in tempo reale.

    Inutile dire anche, che tale tabella viene ogni notte "sfoltita", prendo le righe non più necessarie e le sposto su un backup.

    //

    Poichè, solo 4 script sembrano essere "lenti" per una questione di processore a questo punto, volevo sapere se è possibile su un 4core, dedicare 3 processori a queste operazioni "toste" lasciando tutti gli altri script solo sul quarto processore. Rallenterebbe gli utenti che non fanno statistiche, ma risolverei il mio problema facendo qualche test per bilanciare il tutto.

    E' possibile far in modo che determinati processori siano dedicati solo a determinati script?
    (attualmente siamo su un server 2003, ma posso tranquillamente passare su linux)

  2. #2
    Non so aiutarti sulla faccenda dei processori, non ho esperienza in merito.
    Ma hai provato a partizionare le tabelle?

    http://dev.mysql.com/tech-resources/...titioning.html

    Eventualmente potresti rivedere anche la struttura delle tabelle e dividerle per avere meno dati (cosa che farebbe il partizionamento, ma se non sbaglio è supportato solo da mysql 5.1, e quando l'ho usato io per una specie di motore di ricerca, scopo didattico, non mi convinceva molto).

    Oppure ancora spostare le tabelle mysql di statistiche su un unico server che fa solo ed esclusivamente da database (magari mono-core a Ghz elevati).

    Oppure ancora cambiare database =)
    Insomma, a naso e IMHO, la possibile soluzione dei processori è come un cerotto messo su una colonna portante sovraccarica. Dovresti intervenire su altro per distribuire meglio il carico.

    Facci sapere, il quesito è interessante =)

  3. #3
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    ciao,

    non credo tu possa fare questo tipo di scelte/configurazioni runtime tramite php.

    hi provato piuttosto a vedere se la configurazione di mysql ti può venire d'aiuto?

    tanto per intenderci il file my.conf
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    65
    Sono già 78 tabelle, non ci sono dati doppi se non la chiave primaria della tabella generale che viene duplicata per fare i join.

    Avevo pensato anche io a una seconda macchina, ma tu intendi 2 database distinti o una macchina per il motore php e una per il database?

    Ora guardo il file my.conf

  5. #5
    Il partizionamento comunque è solo logico, le tabelle rimarrebbero sempre dello stesso numero, ma gestite nell'intimo di mysql come se fossero divise. (ed in ogni caso non preoccuparti, io sono arrivato a 350 tabelle circa e non avevo problemi)

    Per l'altra questione...
    Intendo un server esclusivamente dedicato a fare il database. Apache&PHP si troverebbero su un altro server in lan. In questo modo avresti un server dedicato per il DB a cui affidare piena potenza di calcolo (non avrebbe nemmeno apache).

    Potresti anche mettere su questo nuovo server un nuovo database con sole le tabelle più pesanti... in modo che l'uso normale e quotidiano è affidato al server solito e principale, mentre l'uso più pesante è affidato a questa nuova macchina: il sovraccarico dell'uno non intacca l'altro.

    Con php puoi tranquillamente gestire più connessioni a più database diversi... ed in extremis potresti non fare direttamente le query di inserimento al db pesante (inserimento log per le statistiche presumo), ma cachare le query in un file e spedirle in cron (ogni minuto anche) al DB delle statistiche. In questo modo non occorrerebbe nemmeno aspettare il feedback del database "pesante" e il tuo sistema base diventerebbe completamente indipendente dalle statistiche.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.