2013-01-03 11 views
6

Sto avendo un momento difficile ottenere prestazioni decenti con Google Cloud SQL, sto facendo alcune operazioni CRUD piuttosto di base, per esempio:Poor prestazioni di Google Cloud SQL

public BaseUser getUser(String token) throws SQLException{ 
    Connection conn = DriverManager.getConnection(JDBC_CON_STRING); 
    PreparedStatement ps = conn.prepareStatement(GET_USER_BY_TOKEN_QUERY); 
    ps.setString(1, token); 
    ResultSet rs = ps.executeQuery(); 
    List<BaseUser> users = inflateUser(rs); 
    if(users.size() == 0){ 
     return null; 
    } 
    if(users.size() > 1){ 
     logger.info("DATABASE MAY BE CORRUPTED, THERE'S MORE THAN 1 USER WITH THE SAME TOKEN"); 
    } 
    ps.close(); 
    rs.close(); 
    conn.close(); 
    return users.get(0); 
} 

E ottenere una media di 450ms reponse tempo per ogni query. + = 150 per openConnection, 150 per operazione, 150 per chiusura. Vedi la img. sotto.

enter image description here

Ho letto la documentazione di Google, forum e blog multipli e ancora non riesco a vedere quello che sto facendo male (io devo fare qualcosa di sbagliato, 450ms/query è wayyy a molto .. .)

uPDATE 1: I'ts definitivamente un problema di Google cloud SQL, ho installato il mio server MySQL locale e sto avendo modo migliore performance (80ms per un "inserire o aggiornare", quindi selezionare finalmente impegnarsi .), spero di poter ottenere alcuni suggerimenti da Google dev. squadra, mi piace molto l'intera piattaforma cloud di Google, ma è semplicemente impossibile lavorare con quel livello di latenza = (

UPDATE 2: 2014/05/06 Il problema di latenza è lo stesso con un D0 o un D16 .Il tentativo di inserire 10000 righe (3 varchar e un blob da ~ 100 byte) richiede 32 secondi da una VM di Google ComputeEngine a causa della latenza.La durata è la stessa con 10000 inserti e un singolo batch inserto.Se io uso 64 thread, quindi la durata è giù per 3s. ho provato con il driver JDBC mysql nativo.

Qualche suggerimento? Grazie!

+0

Sei sicuro lo schema è indicizzato correttamente? – jon

+0

È una tabella di prova con + - 15 colonne e un indice secondario. Si credo che vada bene. Inoltre, tieni presente che le operazioni di connessione e chiusura richiedono più di 100 ms, il che non è normale ... –

+0

Hai concesso l'accesso all'istanza di Cloud SQL a più di un'applicazione del motore di app? –

risposta

0

ho avuto problema con GAE + Cloud SQL utilizzato con php e la presa.

Il problema era la mia query che utilizzava effettivamente 3 query e leggeva migliaia di righe anche solo coppia di outputtet difficili.

L'ho trovato con HeidiSQL e mettendo EXPLAIN davanti alla query di selezione.

ha dovuto fare il join in parte php in modo che il tempo di caricamento (ispezionato in devtools cromo, non mysql tempo di esecuzione) di quella query-set è sceso da 600 ms a 151 ms