Sql azure performance et montee en charge (1)

2 461 vues

Publié le

Slides de l'azure camp du 14 décembre sur la montée en charge avec Sql Azure

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 461
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 405
Actions
Partages
0
Téléchargements
3
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Sql azure performance et montee en charge (1)

  1. 1. Azure Camp spécial SQL Azure 14/12/2011
  2. 2. La communauté AzureLe site www.zecloud.frLes Azure Campshttp://Zecloud.codeplex.com Tout le code source produit lorsdes Azure Camps en licence MS-PLL’azure user group :www.azureusergroup.com/group/frenchusergroupTwitter ZeCloud twitter.com/zecloudEt page Facebook ZeCloud Devenez Fan !!
  3. 3. Programme- Présentation de la communauté Azure- Introduction- Pattern dimplémentation- Performance & Throttling- Montée en Charge & Fédération- Questions Réponses- Code
  4. 4. Performance et Montée En Charge avec SQL Azure Hervé Roggero MVP SQL Azure Blue Syntax Consulting
  5. 5. A mon sujetComment me contacter Twitter: @hroggero E-mail: hroggero@bluesyntax.net Website: www.bluesyntax.netContributions Blue Syntax Consulting PRO SQL Azure (APress) Trainings Azure (Wednesday) Consulting Azure President du Azure Florida Association (linked-in)Floride…
  6. 6. AgendaPerformance Considérations Pertes de connexion et mécanismes de limitationMontée en Charge Sharding Fédération Projet open source: Enzo
  7. 7. Performance
  8. 8. ConsidérationsRegroupement de ConnexionsLogique de perte de connexionCacheEntity Framework (lazy loading)Chatty vs. Chunky (bavard vs massif) [mais je laisseraisles termes technique en anglais]
  9. 9. Topologie
  10. 10. Raisons de perte de connexion Serrures excessives (1 million de serrures) Transactions non commises (<20% du log file) Transactions bloquant le système (max: 20 secondes) Taille du log file (1Go par transaction) Utilisation de TempDB (5Go par session) Utilisation mémoire (>16Mb pendant 20+ secondes) Taille de la base de donnée Connexions inactives (30 minutes)
  11. 11. Raisons de perte de connexion (2) Durée d’une transaction (24 heures) DoS (éviter les attaques avec le pare-feu) Problèmes avec le réseau Problèmes avec la répartition des charges Autres raisons (CPU, I/O…)
  12. 12. Mécanisme de Limitation (throttling)Erreurs de connexion 40501 : le service est actuellement occupé. Réessayez la demande après 10 secondes. ID de lincident : %ls. Code : %d. 40544 : la base de données a atteint son quota de taille. Partitionnez ou supprimez des données, supprimez des index ou consultez la documentation afin de rechercher des solutions possibles. ID de lincident : %ls. Code : %d. 40545 : le service rencontre un problème actuellement en cours danalyse. ID de lincident : %ls. Code : %d
  13. 13. Décodage des codes de raison 131075 modulo 4 = 3http://msdn.microsoft.com/fr-fr/library/4cff491e-9359-4454-bd7c-fb72c4c452ca#bkmk_throt_errors
  14. 14. Modes de LimitationCode du Description Types d’instructions Instructions qui peuventmode de rejetees etre traiteeslimitation0 Aucune limitation Aucune Toutes1 Rejeter les mises a INSERT, UPDATE, DELETE, DROP TABLE & jour (insert) CREATE TABLE & INDEX, TRUNCATE INDEX2 Rejeter toutes les INSERT, UPDATE, SELECT ecritures DELETE, CREATE, DROP3 Rejeter tout Toutes Aucune
  15. 15. Traiter les Pertes de Connexion Réduction Exponentielle; peut s’appliquer aux chargeshttp://geekswithblogs.net/hroggero/archive/2011/05/26/cloud-lesson-learned-exponential-backoff.aspx
  16. 16. Traiter Les Erreurs Temporaires Transient Condition Handling Frameworkhttp://windowsazurecat.com/2010/10/best-practices-for-handling-transient-conditions-in-sql-azure-client-applications/
  17. 17. Exemple: Backup pour SQL Azure Algorithme adapte pour rester sous la Connexion courbe de En parallele Prepare les limitation de SQL commandes SQL Azure Connexion Code d’adaptation Ouvre connexion represente 30% du code backup En parallele Execute une Charges commande SQL Connexion Sauve donnees dans fichier
  18. 18. Exemple: Copier des donneesX: Size du batch; Y: Temps d’Execution
  19. 19. Montée en charge
  20. 20. ShardingDistribution des données Horizontalement VerticalementRessources non-partagéesDifférent modèlesObjectif de la montée en charge: Expérience du client #1 est la même que celle du client #1000
  21. 21. Shard Linéaire (linear)Une base de donnée par clientEmbarquement simpleInvestissement linéaire
  22. 22. Shard Compressé (compressed)Optimisation de stockage & réduction de coutsImplémentée avec: database schemas data fédération
  23. 23. Shard étendu (expanded)Traite les bases comme une unité de stockage logiquePas de relations entre les bases et les clientsUtilise les INSERTs round-robin
  24. 24. Revue des Modèles
  25. 25. Fédération avec SQL Azure
  26. 26. Accéder au RootUSE FEDERATION ROOT WITH RESETSELECT * FROM configuration_table
  27. 27. Accéder a un MembreUSE FEDERATION customers (cid=10) WITH RESET, FILTERING=OFFSELECT * FROM customers
  28. 28. Accéder a un EnregistrementUSE FEDERATION customers (cid=10) WITH RESET, FILTERING=ONSELECT * FROM customers
  29. 29. DifficultésChanger le contexte avec USE FEDERATIONDifficile d’accéder aux données reparties (FAN OUT) Sur plusieurs membres d’une fédération Sur plusieurs fédérations SELECT * FROM customers SELECT * FROM customers WHERE cid NOT IN (select cid FROM sales)
  30. 30. Projet Open-Source: EnzoPlatforme sharding unifiee Compressee, étendue, lineaire SQL Azure Federation
  31. 31. Enzo: Mode APIRootDatabase root_db = new RootDatabase(“connectionstring");root_db["customers"].DefaultExecutionContext.Mode =ShardCore.ShardOperationMode.FAN_OUT;root_db["customers"].ExecuteDataTable("select * from customer");
  32. 32. Enzo: Mode SQL DistribuéeRootDatabase root_db = new RootDatabase(“connectionstring");string sql = @“SELECT * USING (select * from customer) FEDERATED ON (customers)";root_db.ExecuteDataTable(sql);
  33. 33. Enzo: Mode SQL Distribuée (2)RootDatabase root_db = new RootDatabase(“connectionstring");string sql = @“SELECT * USING (select * from customer) FEDERATED ON (customers) WHERE cid NOT IN (select cid from sales where storeid = 2) FEDERATED ON (sales)";root_db.ExecuteDataTable(sql);
  34. 34. Enzo: Cache Cache les résultats localement Utilisé avec les commandes SQL distribuéesstring sql = @“SELECT * USING (select * from customer) FEDERATED ON (customers) CACHED FOR 30";
  35. 35. Demo / Questions

×