[Python] Automysqlbackup e py
Manlio Perillo
manlio.perillo a gmail.com
Gio 24 Ott 2013 12:45:50 CEST
On 24/10/2013 12:33, Fabrizio Soppelsa wrote:
> [...]
>> Su sistema UNIX puoi provare a ridurre la priorità del tuo programma
>> con nice. In aggiunta puoi mettere il processo in pausa dopo aver
>> letto/scritto un chunk di dati da/verso il disco.
>
> Grazie. Ho già provato con renice, ma da Munin vedo che non riesco a
> diminuire i picchi di I/O. Mentre non ho provato con il mettere il
> processo in pausa ogni tot di scritture, potrebbe essere un'idea.
> Perdona l'ignoranza mi dai un hint su come provare? :)
>
Se il problema è causato dall'utility di backup di MySQL, su cui non hai
controllo, temo ci sia poco da fare, a meno di non fare cose strane a
livello di librerie dinamiche.
Una soluzione possibile, su sistemi UNIX, è quello di fare scrivere il
file di backup su una FIFO (mkfifo), e avere un processo Python che
legga dall'altro lato della FIFO in modo da regolare l'I/O con la
procedura che indico in seguito.
>> Ma il problema di prestazioni lo hai quando viene generato il file di
>> backup su file su disco dall'utility di backup di MySQL, oppure
>> durante l'esecuzione del tuo trigger scritto in Python?
>
> Soprattutto in generazione dei file di backup. Ma anche in fase
> "trigger" (sono banali .py che creano dei pid, chiamano utility di
> sistema ecc.) se i file sono pesanti. Per esempio cifro i file con gpg,
> oppure importo da remoto altri file...
>
Per codice sotto il tuo controllo hai più spazio di manovra.
Ad esempio per cifrare i file di backup puoi fare qualcosa dipo:
while True:
buf = os.read(fdin, 8196)
os.sleep(nice_pause)
cbuf = do_crypt(buf)
Se il file criptato deve essere salvato sulla stessa macchina virtuale,
allora puoi fare:
zbuf = do_compress(cbuf)
os.write(fdout, zbuf, len(zbuf)
os.sleep(nice_pause)
altrimenti puoi inviare i dati tramite socket.
Nota la compressione: è molto importante per ridurre l'I/O.
Se chiami utility di sistema, devi fare attenzione che non facciano I/O
eccessivo.
Nel caso in cui fai scrivere il file di backup su una FIFO, ed il file
di backup originale (non criptato) non ti serve, risparmi molto I/O e
sicuramente la procedura di backup avrà un impatto molto minore sul
sistema; probabilmente anche se non fai os.sleep ad oggi lettura/scrittura.
Il tutto da verificare.
Ciao Manlio
Maggiori informazioni sulla lista
Python