Azure Camp spécial SQL Azure
         14/12/2011
La communauté Azure

Le site www.zecloud.fr
Les Azure Camps
http://Zecloud.codeplex.com Tout le code source produit lors
des Azure Camps en licence MS-PL
L’azure user group :
www.azureusergroup.com/group/frenchusergroup
Twitter ZeCloud twitter.com/zecloud
Et page Facebook ZeCloud Devenez Fan !!
Programme


- Présentation de la communauté Azure
- Introduction
- Pattern d'implémentation
- Performance & Throttling
- Montée en Charge & Fédération
- Questions Réponses
- Code
Performance et Montée En
  Charge avec SQL Azure
          Hervé Roggero
          MVP SQL Azure
       Blue Syntax Consulting
A mon sujet


Comment me contacter
  Twitter: @hroggero
  E-mail: hroggero@bluesyntax.net
  Website: www.bluesyntax.net
Contributions
  Blue Syntax Consulting
  PRO SQL Azure (APress)
  Trainings Azure (Wednesday)
  Consulting Azure
  President du Azure Florida Association (linked-in)
Floride…
Agenda


Performance
  Considérations
  Pertes de connexion et mécanismes de limitation

Montée en Charge
  Sharding
  Fédération
  Projet open source: Enzo
Performance
Considérations


Regroupement de Connexions
Logique de perte de connexion
Cache
Entity Framework (lazy loading)
Chatty vs. Chunky (bavard vs massif) [mais je laisserais
les termes technique en anglais]
Topologie
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)
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…)
Mécanisme de Limitation
          (throttling)


Erreurs de connexion
  40501 : le service est actuellement occupé. Réessayez la demande
  après 10 secondes. ID de l'incident : %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
  l'incident : %ls. Code : %d.

  40545 : le service rencontre un problème actuellement en cours
  d'analyse. ID de l'incident : %ls. Code : %d
Décodage des codes de raison




                                                                                                 131075 modulo 4 = 3




http://msdn.microsoft.com/fr-fr/library/4cff491e-9359-4454-bd7c-fb72c4c452ca#bkmk_throt_errors
Modes de Limitation


Code du      Description           Types d’instructions   Instructions qui peuvent
mode de                            rejetees               etre traitees
limitation
0            Aucune limitation     Aucune                 Toutes
1            Rejeter les mises a   INSERT, UPDATE,        DELETE, DROP TABLE &
             jour (insert)         CREATE TABLE &         INDEX, TRUNCATE
                                   INDEX
2            Rejeter toutes les    INSERT, UPDATE,        SELECT
             ecritures             DELETE, CREATE,
                                   DROP
3            Rejeter tout          Toutes                 Aucune
Traiter les Pertes de Connexion

           Réduction Exponentielle; peut s’appliquer aux
           charges




http://geekswithblogs.net/hroggero/archive/2011/05/26/cloud-lesson-learned-exponential-backoff.aspx
Traiter Les Erreurs Temporaires


           Transient Condition Handling Framework




http://windowsazurecat.com/2010/10/best-practices-for-handling-transient-conditions-in-sql-azure-client-applications/
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
Exemple: Copier des donnees


X: Size du batch; Y: Temps d’Execution
Montée en charge
Sharding


Distribution des données
  Horizontalement
  Verticalement
Ressources non-partagées
Différent modèles
Objectif de la montée en charge:

   Expérience du client #1 est la même que celle du client #1000
Shard Linéaire
                       (linear)


Une base de donnée par client
Embarquement simple
Investissement linéaire
Shard Compressé
                (compressed)



Optimisation de stockage & réduction de couts
Implémentée avec:
  database schemas
  data fédération
Shard étendu
                 (expanded)



Traite les bases comme une unité de stockage logique
Pas de relations entre les bases et les clients
Utilise les INSERTs round-robin
Revue des Modèles
Fédération avec SQL Azure
Accéder au Root


USE FEDERATION ROOT WITH RESET
SELECT * FROM configuration_table
Accéder a un Membre


USE FEDERATION customers (cid=10) WITH RESET, FILTERING=OFF

SELECT * FROM customers
Accéder a un Enregistrement


USE FEDERATION customers (cid=10) WITH RESET, FILTERING=ON

SELECT * FROM customers
Difficultés


Changer le contexte avec USE FEDERATION
Difficile 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)
Projet Open-Source: Enzo


Platforme sharding unifiee
  Compressee, étendue, lineaire
  SQL Azure Federation
Enzo: Mode API


RootDatabase root_db = new RootDatabase(“connectionstring");

root_db["customers"].DefaultExecutionContext.Mode =
ShardCore.ShardOperationMode.FAN_OUT;

root_db["customers"].ExecuteDataTable("select * from customer");
Enzo: Mode SQL Distribuée


RootDatabase root_db = new RootDatabase(“connectionstring");

string sql = @“SELECT * USING
    (select * from customer)
     FEDERATED ON (customers)";

root_db.ExecuteDataTable(sql);
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);
Enzo: Cache


 Cache les résultats localement
 Utilisé avec les commandes SQL distribuées

string sql = @“SELECT * USING
    (select * from customer)
     FEDERATED ON (customers)
     CACHED FOR 30";
Demo / Questions

Sql azure performance et montee en charge (1)

  • 1.
    Azure Camp spécialSQL Azure 14/12/2011
  • 2.
    La communauté Azure Lesite www.zecloud.fr Les Azure Camps http://Zecloud.codeplex.com Tout le code source produit lors des Azure Camps en licence MS-PL L’azure user group : www.azureusergroup.com/group/frenchusergroup Twitter ZeCloud twitter.com/zecloud Et page Facebook ZeCloud Devenez Fan !!
  • 3.
    Programme - Présentation dela communauté Azure - Introduction - Pattern d'implémentation - Performance & Throttling - Montée en Charge & Fédération - Questions Réponses - Code
  • 4.
    Performance et MontéeEn Charge avec SQL Azure Hervé Roggero MVP SQL Azure Blue Syntax Consulting
  • 5.
    A mon sujet Commentme contacter Twitter: @hroggero E-mail: hroggero@bluesyntax.net Website: www.bluesyntax.net Contributions Blue Syntax Consulting PRO SQL Azure (APress) Trainings Azure (Wednesday) Consulting Azure President du Azure Florida Association (linked-in) Floride…
  • 7.
    Agenda Performance Considérations Pertes de connexion et mécanismes de limitation Montée en Charge Sharding Fédération Projet open source: Enzo
  • 8.
  • 9.
    Considérations Regroupement de Connexions Logiquede perte de connexion Cache Entity Framework (lazy loading) Chatty vs. Chunky (bavard vs massif) [mais je laisserais les termes technique en anglais]
  • 10.
  • 11.
    Raisons de pertede 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)
  • 12.
    Raisons de pertede 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…)
  • 13.
    Mécanisme de Limitation (throttling) Erreurs de connexion 40501 : le service est actuellement occupé. Réessayez la demande après 10 secondes. ID de l'incident : %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 l'incident : %ls. Code : %d. 40545 : le service rencontre un problème actuellement en cours d'analyse. ID de l'incident : %ls. Code : %d
  • 14.
    Décodage des codesde raison 131075 modulo 4 = 3 http://msdn.microsoft.com/fr-fr/library/4cff491e-9359-4454-bd7c-fb72c4c452ca#bkmk_throt_errors
  • 15.
    Modes de Limitation Codedu Description Types d’instructions Instructions qui peuvent mode de rejetees etre traitees limitation 0 Aucune limitation Aucune Toutes 1 Rejeter les mises a INSERT, UPDATE, DELETE, DROP TABLE & jour (insert) CREATE TABLE & INDEX, TRUNCATE INDEX 2 Rejeter toutes les INSERT, UPDATE, SELECT ecritures DELETE, CREATE, DROP 3 Rejeter tout Toutes Aucune
  • 16.
    Traiter les Pertesde Connexion Réduction Exponentielle; peut s’appliquer aux charges http://geekswithblogs.net/hroggero/archive/2011/05/26/cloud-lesson-learned-exponential-backoff.aspx
  • 17.
    Traiter Les ErreursTemporaires Transient Condition Handling Framework http://windowsazurecat.com/2010/10/best-practices-for-handling-transient-conditions-in-sql-azure-client-applications/
  • 18.
    Exemple: Backup pourSQL 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
  • 19.
    Exemple: Copier desdonnees X: Size du batch; Y: Temps d’Execution
  • 20.
  • 21.
    Sharding Distribution des données Horizontalement Verticalement Ressources non-partagées Différent modèles Objectif de la montée en charge: Expérience du client #1 est la même que celle du client #1000
  • 22.
    Shard Linéaire (linear) Une base de donnée par client Embarquement simple Investissement linéaire
  • 23.
    Shard Compressé (compressed) Optimisation de stockage & réduction de couts Implémentée avec: database schemas data fédération
  • 24.
    Shard étendu (expanded) Traite les bases comme une unité de stockage logique Pas de relations entre les bases et les clients Utilise les INSERTs round-robin
  • 25.
  • 26.
  • 27.
    Accéder au Root USEFEDERATION ROOT WITH RESET SELECT * FROM configuration_table
  • 28.
    Accéder a unMembre USE FEDERATION customers (cid=10) WITH RESET, FILTERING=OFF SELECT * FROM customers
  • 29.
    Accéder a unEnregistrement USE FEDERATION customers (cid=10) WITH RESET, FILTERING=ON SELECT * FROM customers
  • 30.
    Difficultés Changer le contexteavec USE FEDERATION Difficile 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)
  • 31.
    Projet Open-Source: Enzo Platformesharding unifiee Compressee, étendue, lineaire SQL Azure Federation
  • 32.
    Enzo: Mode API RootDatabaseroot_db = new RootDatabase(“connectionstring"); root_db["customers"].DefaultExecutionContext.Mode = ShardCore.ShardOperationMode.FAN_OUT; root_db["customers"].ExecuteDataTable("select * from customer");
  • 33.
    Enzo: Mode SQLDistribuée RootDatabase root_db = new RootDatabase(“connectionstring"); string sql = @“SELECT * USING (select * from customer) FEDERATED ON (customers)"; root_db.ExecuteDataTable(sql);
  • 34.
    Enzo: Mode SQLDistribué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);
  • 35.
    Enzo: Cache Cacheles résultats localement Utilisé avec les commandes SQL distribuées string sql = @“SELECT * USING (select * from customer) FEDERATED ON (customers) CACHED FOR 30";
  • 36.