2. 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 !!
3. 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
4. Performance et Montée En
Charge avec SQL Azure
Hervé Roggero
MVP SQL Azure
Blue Syntax Consulting
5. 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…
6.
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
9. 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]
11. 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)
12. 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…)
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 codes de raison
131075 modulo 4 = 3
http://msdn.microsoft.com/fr-fr/library/4cff491e-9359-4454-bd7c-fb72c4c452ca#bkmk_throt_errors
15. 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
16. 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
17. Traiter Les Erreurs Temporaires
Transient Condition Handling Framework
http://windowsazurecat.com/2010/10/best-practices-for-handling-transient-conditions-in-sql-azure-client-applications/
18. 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
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
27. Accéder au Root
USE FEDERATION ROOT WITH RESET
SELECT * FROM configuration_table
28. Accéder a un Membre
USE FEDERATION customers (cid=10) WITH RESET, FILTERING=OFF
SELECT * FROM customers
29. Accéder a un Enregistrement
USE FEDERATION customers (cid=10) WITH RESET, FILTERING=ON
SELECT * FROM customers
30. 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)
32. 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");
33. 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);
34. 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);
35. 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";