J'ai une instance Cloud SQL de taille D0. Quand je lance un simple
select * from table
qui a environ 500 lignes, il faut en moyenne 100 ms pour être exécuté (comme indiqué par l’invite SQL). Alors que sur mon instance locale de MySQL 5.5, cela ne prend que 1 ms. Ma machine de développement dispose d'une mémoire Intel Core i7 à double cœur de 2,9 GHz et d'une mémoire de 8 Go à 1 600 MHz. J'ai lu dans un FAQ que les performances de la base de données dépendent de la taille - les instances plus grandes ont plus de RAM et de la CPU.
Est-il raisonnable de s'attendre à ce que les problèmes de performances soient résolus avec une taille d'instance plus grande? Ou est-ce que je manque quelque chose d'autre ici?
Les vues étaient la cause de mauvaises performances. Google utilise son propre moteur MySQL, optimisé de manière à gêner l'affichage. Si vous avez plusieurs jointures ou/et les syndicats s'attendent à ce que les vues soient lentes.
Cependant, cela fait presque un an que j'ai posté cette question et les choses ont peut-être changé. Je n'ai pas revu les points de vue depuis que nous avons cessé de les utiliser.
EDIT: 10 avril 2016
GAE propose désormais MySQL Cloud de deuxième génération, où même un niveau de base tel que «db-g1-small» fonctionne aussi rapidement qu'un niveau D8 de l'ancienne offre Cloud SQL. C'est aussi beaucoup moins cher. Cela semble être une étape importante et il n'y a plus aucune raison de recourir aux piratages et aux solutions de contournement.
Vous pouvez consulter les tarifs Cloud SQL, mais le coût minimum approximatif est d'environ 20 USD par mois.
ORIGINAL POST
Google installe simplement le VM sur une boîte lente du niveau D0. Vous pouvez choisir D4 mais RAM n'est pas le problème principal autant que le processeur (ils ne mentionnent pas le GHz).
La latence du réseau n'est pas le problème. Par exemple les 0.05s ci-dessous correspondent au temps d'exécution de la requête sur le serveur uniquement. Par la suite, vous pourriez consacrer tout votre temps à la transmission de données.
mysql> select * from tracking limit 5;
+--------------------------------+-----------+-----------+
| id | scan_date | status |
+--------------------------------+-----------+-----------+
| 420006929400111899561510697350 | NULL | Delivered |
| 420010859400111899561989496058 | NULL | Delivered |
| 420019849400111899561989496331 | NULL | Delivered |
| 420100109400111899561903290311 | NULL | Delivered |
| 420100319400111899561944407020 | NULL | Delivered |
+--------------------------------+-----------+-----------+
5 rows in set (0.05 sec)
Edit: Mars 2016
Pour plusieurs applications, je n'utilise plus Cloud SQL, mais plutôt un cluster MySql de base hébergé à distance depuis que GAE a ouvert des connexions de socket sortantes. Cela semble fou? Pas selon les chiffres - envoyer une requête et récupérer des données via cette connexion de socket est plus rapide qu'un D3 co-localisé.
Nous avons également eu le même problème. Avec une instance D16, une page de forum de site Web simple prendrait plus de 10 secondes à charger. Je viens de parler à un ingénieur du support technique GoogleCloud, qui a confirmé que CloudSQL n'est pas vraiment prêt pour la "performance" (à partir de l'été 2015), et il a recommandé de tout réécrire pour utiliser DataStore ...
Donc, si vous avez des pages qui font des dizaines de petites requêtes SQL et un jeu de données trop volumineux pour tenir entièrement dans le cache, alors CloudSQL n'est pas une solution viable pour le moment.
Voici notre mise à jour en janvier/2019.
Utilisation de Google Cloud SQL SECOND GENERATION avec une base de données de 46 Go dans une instance de 4vcpu + 15 Go RAM, elle peut être ridiculement lente même par rapport à un macbook pro dev exécutant l'installation par défaut de MySQL avec seulement 125 Mo de mémoire allouée à cela: