J'exécute actuellement une instance de MS SQL Server 2014 (12.1.4100.1) sur une machine dédiée que je loue pour 270 $/mois avec les spécifications suivantes:
Je joue avec Azure SQL Database depuis un petit moment maintenant, et j'ai eu l'idée de passer à leur plate-forme. J'ai lancé une base de données Azure SQL en utilisant leur niveau de tarification P2 Premium sur un serveur V12 (juste pour tester les choses) et j'ai chargé une copie de ma base de données existante (à partir de la machine dédiée).
J'ai exécuté plusieurs ensembles de requêtes côte à côte, un contre la base de données sur la machine dédiée et un contre la base de données P2 Azure SQL. Les résultats ont été quelque peu choquants: ma machine dédiée a surperformé (en termes de temps d'exécution) la base de données Azure d'une énorme marge à chaque fois. En règle générale, l'instance de base de données dédiée se terminait en moins de 1/2 à 1/3 du temps nécessaire à l'exécution de la base de données Azure.
Maintenant, je comprends les nombreux avantages de la plateforme Azure. Il est géré par rapport à ma configuration non gérée sur la machine dédiée, ils ont une restauration ponctuelle meilleure que la mienne, le pare-feu est facilement configuré, il y a de la géoréplication, etc., etc. Mais j'ai une base de données avec des centaines de tables avec des dizaines à des centaines de millions d'enregistrements dans chaque table, et ont parfois besoin d'interroger sur plusieurs jointures, etc., donc les performances en termes de temps d'exécution sont vraiment importantes. Je trouve juste choquant qu'un service de ~ 930 $/mois fonctionne mal à côté d'une location de machine dédiée de 270 $/mois. Je suis encore assez nouveau pour SQL dans son ensemble, et très nouveau pour les serveurs/etc., Mais cela ne s'ajoute-t-il à personne d'autre? Quelqu'un a-t-il peut-être un aperçu de quelque chose qui me manque ici, ou les autres fonctionnalités "gérées" d'Azure SQL Database sont-elles censées compenser la différence de prix?
En bout de ligne, je commence à dépasser même les capacités de ma machine dédiée, et j'espérais vraiment que la base de données SQL d'Azure serait un bon tremplin, mais à moins que je manque quelque chose, ce n'est pas le cas. Je suis encore une petite entreprise pour sortir et dépenser des centaines de milliers sur une autre plate-forme.
Quelqu'un a-t-il des conseils sur si je manque quelque chose, ou les performances que je vois correspondent-elles à ce que vous attendez? Ai-je d'autres options qui peuvent produire de meilleures performances que la machine dédiée que j'utilise actuellement, mais ne coûtent pas des dizaines de milliers/mois? Puis-je faire quelque chose (configuration/paramètre) pour ma base de données SQL Azure qui augmenterait le temps d'exécution? Encore une fois, toute aide est appréciée.
EDIT: Permettez-moi de réviser ma question pour peut-être la rendre un peu plus claire: c'est ce que je vois en termes de performances de temps d'exécution à prévoir, où un serveur dédié @ 270 $/mois surpasse bien le niveau Azure SQL DB P2 P2 de Microsoft @ 930 $/mois? Ignorez les autres "avantages" comme géré vs non géré, ignorez l'utilisation prévue comme Azure étant destiné à la production, etc. J'ai juste besoin de savoir si je manque quelque chose avec Azure SQL DB, ou si je suis vraiment censé améliorer BEAUCOUP mieux performances sur une seule machine dédiée.
Il existe une alternative de Microsoft à Azure SQL DB:
"Provisionner une machine virtuelle SQL Server dans Azure"
https://Azure.Microsoft.com/en-us/documentation/articles/virtual-machines-provision-sql-server/
Une explication détaillée des différences entre les deux offres: "Comprendre Azure SQL Database et SQL Server dans les machines virtuelles Azure"
Une différence significative entre votre SQL Server autonome et Azure SQL DB est qu'avec SQL DB, vous payez pour des niveaux de disponibilité élevés, ce qui est obtenu en exécutant plusieurs instances sur différentes machines. Ce serait comme louer 4 de vos machines dédiées et les exécuter dans un groupe de disponibilité AlwaysOn, ce qui changerait à la fois vos coûts et vos performances. Cependant, comme vous n'avez jamais mentionné la disponibilité, je suppose que ce n'est pas un problème dans votre scénario. SQL Server dans un VM peut mieux correspondre à vos besoins.
Perf et disponibilité mis à part, il y a plusieurs autres facteurs importants à considérer:
(Avertissement: je travaille pour Microsoft, mais pas sur Azure ou SQL Server).
"Azure SQL" n'est pas équivalent à "SQL Server" - et je souhaite personnellement que nous proposions une sorte de "SQL Server hébergé" au lieu d'Azure SQL.
En apparence, les deux sont les mêmes: ce sont tous deux des systèmes de bases de données relationnelles avec la puissance de T-SQL pour les interroger (enfin, ils utilisent tous deux le même SGBD sous le capot).
Azure SQL est différent en ce que idée est que vous avez deux bases de données: une base de données de développement utilisant un serveur SQL local (idéalement 2012 ou version ultérieure) et une base de données de production sur Azure SQL. Vous (ne devez) jamais modifier directement la base de données Azure SQL, et vous constaterez en effet que SSMS n'offre pas d'outils de conception (Table Designer, View Designer, etc.) pour Azure SQL. Au lieu de cela, vous concevez et travaillez avec votre base de données SQL Server locale et créez des fichiers "DACPAC" (ou des fichiers XML spéciaux "change", qui peuvent être générés par SSDT) qui modifient ensuite votre base de données Azure de telle sorte qu'elle copie votre base de données de développement, une sorte du système de "réplication de conception".
Sinon, comme vous l'avez remarqué, Azure SQL offre une résilience intégrée, des sauvegardes, une administration simplifiée, etc.
En ce qui concerne les performances, est-il possible que vous manquiez des index ou d'autres optimisations? Vous pouvez également remarquer une latence légèrement plus élevée avec Azure SQL par rapport à un serveur SQL local, j'ai vu des temps de ping (d'un Azure VM à un hôte Azure SQL) autour de 5-10 ms, ce qui signifie vous devez concevoir votre application pour qu'elle soit moins bavarde ou pour paralléliser les opérations de récupération de données afin de réduire les temps de chargement des pages (en supposant qu'il s'agit d'une application Web que vous créez).
SQL DB a une disponibilité intégrée (qui peut avoir un impact sur les performances), une capacité de restauration ponctuelle et des fonctionnalités DR. Vous avez la possibilité d'augmenter/réduire votre base de données en fonction de votre utilisation pour réduire le coût. Vous pouvez améliorer les performances de votre requête à l'aide de la requête globale (données de partition). SQl DB gère les mises à niveau automatiques et les correctifs et améliore considérablement la facilité de gestion. Vous devrez peut-être payer une petite prime pour cela. La mise en cache au niveau de l'application/la répartition uniforme de la charge, la rétrogradation à froid, etc. peuvent aider à améliorer les performances de votre base de données et à optimiser le coût.