Conoscete un "proxy" per avere MySQL in ram?

7 views
Skip to first unread message

RedFoxy

unread,
May 16, 2014, 9:18:58 AM5/16/14
to zb-p...@googlegroups.com
Ciao a tutti!
Sto cercando una soluzione per accelerare gli accessi in lettura/scrittura su mysql, potendo fare poco sul codice (non sono sorgenti miei e qualsiasi mio cambio viene annullato dagli aggiornamenti della ditta, oltre a perdere supporto e garanzia), pensavo di mettere un proxy trasparente tra php e mysql, un sistema simile a una cache del db, dove, pre-caricato o viene creato man mano che viene interrogato il database, si ricrea la struttura del database in ram con i dati, in modo da utilizzare sempre meno il database reale presente sui dischi, naturalmente ogni modifica effettuata al DB in ram deve essere riportata (anche non in tempo reale) sul DB fisico.
Quindi alla fine si avrà qualcosa simile a: PHP <-> DB in ram <-> DB MySQL

Qualche idea o qualche alternativa?

Grazie e ciao


RedFoxy Darrest
http://www.redfoxy.it


Gollum1

unread,
May 16, 2014, 10:09:34 AM5/16/14
to zb-p...@googlegroups.com
prova a cercare su google:

php cache mysql query

tre i vari risultati potrebbe esserci quello che fa per te... certo,
non fai il cache di tutto il DB, ma almeno delle query più usate.



--
Gollum1 - http://www.gollumone.it
Tesssssoro, dov'é il mio tessssoro...

Giovanni Cappellini

unread,
May 16, 2014, 10:14:25 AM5/16/14
to zb-p...@googlegroups.com
Non hai la possibilità di gestire i parametri di caching di MySQL?
--
Giovanni Cappellini
Consulente informatico

via Falcone e Borsellino 10/A
frazione Ca' Gallo
61020 Montecalvo in Foglia (PU)
Cell. +39 328 58 90 458
www.quacos.com

RedFoxy

unread,
May 16, 2014, 10:22:32 AM5/16/14
to zb-p...@googlegroups.com

Il giorno 16/mag/2014, alle ore 16:14, Giovanni Cappellini <giovanni....@gmail.com> ha scritto:

Non hai la possibilità di gestire i parametri di caching di MySQL?

Si ma anche con i seguenti parametri sono riuscito a migliorare ma non di molto… http://pastebin.com/MJNHYC0x

Mentre questo è il risultato di mysql http://pastebin.com/2pCfX03z


RedFoxy Darrest

RedFoxy

unread,
May 16, 2014, 10:23:11 AM5/16/14
to zb-p...@googlegroups.com

Il giorno 16/mag/2014, alle ore 16:09, Gollum1 <gollum1....@gmail.com> ha scritto:

> prova a cercare su google:
>
> php cache mysql query
>
> tre i vari risultati potrebbe esserci quello che fa per te... certo,
> non fai il cache di tutto il DB, ma almeno delle query più usate.

grazie ma speravo di poterne discutere con qualcuno che usa una soluzione simile ed essere certo di cosa andavo a usare :)


RedFoxy Darrest
http://www.redfoxy.it


Matteo Tinazzi

unread,
May 16, 2014, 10:30:47 AM5/16/14
to zb-p...@googlegroups.com
non so io proverei ad abbassare il key-buffer-size e ad alzare il query-cache-limit e query-cache-size

il mio cnf di produzione è impostato così

key_buffer                      = 64M
max_allowed_packet              = 16M
thread_stack                    = 192K
thread_cache_size               = 8
thread_concurrency        = 4

table_definition_cache        = 8000
table_cache                     = 8000
max_heap_table_size             = 364M
tmp_table_size                  = 768M
open_files_limit                = 20000

max_connections                 = 150

query_cache_limit               = 368M
query_cache_size                = 1G
query_cache_min_res_unit        = 1

 con risultato

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 654M (Tables: 4509)
[--] Data in InnoDB tables: 114M (Tables: 1115)
[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
[--] Data in MEMORY tables: 509K (Tables: 1)
[!!] Total fragmented tables: 1551

-------- Security Recommendations  -------------------------------------------
[OK] All database users have passwords assigned

-------- Performance Metrics -------------------------------------------------
[--] Up for: 461d 20h 28m 59s (17B q [442.152 qps], 78M conn, TX: 17673B, RX: 2331B)
[--] Reads / Writes: 68% / 32%
[--] Total buffers: 1.6G global + 11.2M per thread (150 max threads)
[OK] Maximum possible memory usage: 3.2G (20% of installed RAM)
[OK] Slow queries: 2% (470M/17B)
[!!] Highest connection usage: 100%  (151/150)
[OK] Key buffer size / total MyISAM indexes: 64.0M/338.5M
[OK] Key buffer hit rate: 99.9% (215B cached / 176M reads)
[OK] Query cache efficiency: 81.7% (11B cached / 13B selects)
[!!] Query cache prunes per day: 3310
[OK] Sorts requiring temporary tables: 0% (1K temp sorts / 2B sorts)
[!!] Joins performed without indexes: 2950523
[OK] Temporary tables created on disk: 13% (21M on disk / 160M total)
[OK] Thread cache hit rate: 99% (95K created / 78M connections)
[!!] Table cache hit rate: 0% (5K open / 42M opened)
[OK] Open file limit used: 56% (9K/16K)
[OK] Table locks acquired immediately: 99% (4B immediate / 4B locks)
[OK] InnoDB data size / buffer pool: 115.0M/128.0M

mi sembra strano che il query cache hit rate sia 0.00%
--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "zb-php-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a zb-php-it+...@googlegroups.com.
Per postare in questo gruppo, invia un'email a zb-p...@googlegroups.com.
Visita questo gruppo all'indirizzo http://groups.google.com/group/zb-php-it.
Per altre opzioni visita https://groups.google.com/d/optout.

Giovanni Cappellini

unread,
May 16, 2014, 10:35:07 AM5/16/14
to zb-p...@googlegroups.com
(Scusate per le mail in HTML, è da tanto che non scrivevo in mailing list.)

In questa quoterò come si deve.


Il 16/05/2014 16:22, RedFoxy ha scritto:

Il giorno 16/mag/2014, alle ore 16:14, Giovanni Cappellini <giovanni....@gmail.com> ha scritto:

Non hai la possibilità di gestire i parametri di caching di MySQL?

Si ma anche con i seguenti parametri sono riuscito a migliorare ma non di molto… http://pastebin.com/MJNHYC0x

Non sapevo che i parametri MySQL potessero essere spaziati anche da un trattino alto, io li ho sempre visti con l'underscore. Sei sicuro che quei parametri vengano letti?



Mentre questo è il risultato di mysql http://pastebin.com/2pCfX03z

Intendevi MySQLTuner.

342841 join senza indici? Hai provato ad abilitare log-queries-not-using-indexes e a fare l'EXPLAIN di quelle query?

Fammi un piacere, eseguimi anche MySQL Tuning Primer e postami l'output.

https://launchpad.net/mysql-tuning-primer/trunk/1.6-r1/+download/tuning-primer.sh




RedFoxy Darrest

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "zb-php-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a zb-php-it+...@googlegroups.com.
Per postare in questo gruppo, invia un'email a zb-p...@googlegroups.com.
Visita questo gruppo all'indirizzo http://groups.google.com/group/zb-php-it.
Per altre opzioni visita https://groups.google.com/d/optout.


Cristiano Verondini

unread,
May 16, 2014, 10:37:34 AM5/16/14
to zb-p...@googlegroups.com

On 16 May 2014, at 16:22, RedFoxy <redfo...@redfoxy.it> wrote:

Mentre questo è il risultato di mysql http://pastebin.com/2pCfX03z

Io verificherei gli indici sulle tabelle e le query che vengono fatte, mi pare che il numero di join senza indici sia a dir poco *allarmante*.

Inoltre devi capire se il problema è effettivamente sul DB. Se ad esempio vengono fatte query sbagliate, che prevedono in trasferimento di eg. 3GB di dati, puoi ottimizzare quanto vuoi, ma non risolvi il problema ...


RedFoxy

unread,
May 16, 2014, 10:47:52 AM5/16/14
to zb-p...@googlegroups.com
Il giorno 16/mag/2014, alle ore 16:35, Giovanni Cappellini <giovanni....@gmail.com> ha scritto:

Non sapevo che i parametri MySQL potessero essere spaziati anche da un trattino alto, io li ho sempre visti con l'underscore. Sei sicuro che quei parametri vengano letti?

si ho dovuto cambiare da underscore al meno quando sono passato da debian a freebsd



Mentre questo è il risultato di mysql http://pastebin.com/2pCfX03z

Intendevi MySQLTuner.

Si refuso nello scrivere


342841 join senza indici? Hai provato ad abilitare log-queries-not-using-indexes e a fare l'EXPLAIN di quelle query?


Si ma non potendo cambiare il codice posso fare poco

Fammi un piacere, eseguimi anche MySQL Tuning Primer e postami l'output.

https://launchpad.net/mysql-tuning-primer/trunk/1.6-r1/+download/tuning-primer.sh

RedFoxy

unread,
May 16, 2014, 10:48:09 AM5/16/14
to zb-p...@googlegroups.com

Il giorno 16/mag/2014, alle ore 16:35, Giovanni Cappellini <giovanni....@gmail.com> ha scritto:

Fammi un piacere, eseguimi anche MySQL Tuning Primer e postami l'output.

https://launchpad.net/mysql-tuning-primer/trunk/1.6-r1/+download/tuning-primer.sh

Ho appena riavviato il server perché sto facendo delle prove


RedFoxy Darrest

RedFoxy

unread,
May 16, 2014, 10:49:25 AM5/16/14
to zb-p...@googlegroups.com
Il giorno 16/mag/2014, alle ore 16:37, Cristiano Verondini <cris...@verondini.it> ha scritto:

Io verificherei gli indici sulle tabelle e le query che vengono fatte, mi pare che il numero di join senza indici sia a dir poco *allarmante*.

Si infatti, ma il codice non è mio posso farci poco

Inoltre devi capire se il problema è effettivamente sul DB. Se ad esempio vengono fatte query sbagliate, che prevedono in trasferimento di eg. 3GB di dati, puoi ottimizzare quanto vuoi, ma non risolvi il problema ...

Verissimo



RedFoxy Darrest

Matteo Tinazzi

unread,
May 16, 2014, 10:52:05 AM5/16/14
to zb-p...@googlegroups.com
sicuro che legga il .cnf?

  1. QUERY CACHE
  2. Query cache is enabled
  3. Current query_cache_size = 1 M
  4. Current query_cache_used = 16 K
  5. Current query_cache_limit = 1 M
  6. Current Query cache Memory fill ratio = 1.63 %
  7. Current query_cache_min_res_unit = 4 K
  8. Your query_cache_size seems to be too high.
  9. Perhaps you can use these resources elsewhere
  10. MySQL won't cache query results that are larger than query_cache_limit in size


non mi sembrano i valori che hai messo tu

  1. query-cache-size                = 256M
  2. query-cache-limit               = 16M

Giovanni Cappellini

unread,
May 16, 2014, 11:00:10 AM5/16/14
to zb-p...@googlegroups.com
Il 16/05/2014 16:47, RedFoxy ha scritto:


342841 join senza indici? Hai provato ad abilitare log-queries-not-using-indexes e a fare l'EXPLAIN di quelle query?


Si ma non potendo cambiare il codice posso fare poco

Che c'entra il codice? Si tratta di aggiungere indici a tabelle MySQL. E' un livello che sta sotto il codice.



Fammi un piacere, eseguimi anche MySQL Tuning Primer e postami l'output.

https://launchpad.net/mysql-tuning-primer/trunk/1.6-r1/+download/tuning-primer.sh

http://pastebin.com/k2cryCR6

Come vedi MySQL se ne sbatte altamente di quei parametri. Non capisco perché FreeBSD debba infischiarsi di un file di configurazione di un database.

RedFoxy

unread,
May 16, 2014, 11:02:40 AM5/16/14
to zb-p...@googlegroups.com
Il giorno 16/mag/2014, alle ore 16:37, Cristiano Verondini <cris...@verondini.it> ha scritto:

Io verificherei gli indici sulle tabelle e le query che vengono fatte, mi pare che il numero di join senza indici sia a dir poco *allarmante*.

Si infatti, ma il codice non è mio posso farci poco

Inoltre devi capire se il problema è effettivamente sul DB. Se ad esempio vengono fatte query sbagliate, che prevedono in trasferimento di eg. 3GB di dati, puoi ottimizzare quanto vuoi, ma non risolvi il problema ...

RedFoxy

unread,
May 16, 2014, 12:04:15 PM5/16/14
to zb-p...@googlegroups.com

Il giorno 16/mag/2014, alle ore 16:52, Matteo Tinazzi <matteo....@gmail.com> ha scritto:

sicuro che legga il .cnf?

Mi stai facendo venire grossi dubbi anche se nel rc.conf ho:
mysql_enable="YES"
mysql_dbdir="/home/mysql”

e in esecuzione ho:
root@:/root# ps auxwwwwwwwww | grep mysqld
mysql      5391  8,9  3,8 893728 633644 ??  S     5:52pm      1:11,15 /usr/local/libexec/mysqld --defaults-extra-file=/home/mysql/my.cnf --basedir=/usr/local --datadir=/home/mysql --plugin-dir=/usr/local/lib/mysql/plugin --log-error=/home/mysql/.err --pid-file=/home/mysql/web1.redfoxy.it.pid
mysql      5284  0,0  0,0  14536   1944 ??  Is    5:52pm      0:00,01 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/home/mysql/my.cnf --user=mysql --datadir=/home/mysql --pid-file=/home/mysql/web1.redfoxy.it.pid

quindi dovrebbe usare il mio my.cnf anche se il dubbio rimane...


RedFoxy Darrest

Matteo Tinazzi

unread,
May 16, 2014, 12:06:44 PM5/16/14
to zb-p...@googlegroups.com
prova a mettere

query-cache-size                = 256M
query_cache_size                = 368M

restarti e vedi quale dei due ti legge ... se li legge

RedFoxy

unread,
May 18, 2014, 8:53:05 AM5/18/14
to zb-p...@googlegroups.com

Il giorno 16/mag/2014, alle ore 18:06, Matteo Tinazzi <matteo....@gmail.com> ha scritto:

prova a mettere

query-cache-size                = 256M
query_cache_size                = 368M

restarti e vedi quale dei due ti legge ... se li legge

Ok, ho praticamente ricreato il file my.cnf (e poi gli ho incollato la mia conf) e ora funziona correttamente, che cosa strana che non mi prendesse i valori!
COMUNQUE ora che legge il file di configurazione ho i seguenti valori:

mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 135      |
| Qcache_free_memory      | 51409112 |
| Qcache_hits             | 7154     |
| Qcache_inserts          | 4202     |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 128      |
| Qcache_queries_in_cache | 1775     |
| Qcache_total_blocks     | 4057     |
+-------------------------+—————+

mysql> SHOW VARIABLES LIKE 'query%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_alloc_block_size       | 8192     |
| query_cache_limit            | 33554432 |
| query_cache_min_res_unit     | 1024     |
| query_cache_size             | 67108864 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
| query_prealloc_size          | 8192     |
+------------------------------+—————+

Ho attivato lo slow query log e ho impostato il long query time a 2 per loggare tutte le query che mi rallentano il caricamento delle pagine, volevo anche il log_queries_not_using_indexes ma la descrizione dice che è facile avere falsi positivi



RedFoxy Darrest

Reply all
Reply to author
Forward
0 new messages