• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Améliorer les performances SQL
 

Améliorer les performances SQL

on

  • 1,087 views

Présentation à la nAcademy (Avril 2014) : Améliorer les performances SQL par Christophe Villeneuve

Présentation à la nAcademy (Avril 2014) : Améliorer les performances SQL par Christophe Villeneuve

Statistics

Views

Total Views
1,087
Views on SlideShare
1,068
Embed Views
19

Actions

Likes
1
Downloads
10
Comments
0

2 Embeds 19

http://neuros.fr 18
http://www.neuros.fr 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Améliorer les performances SQL Améliorer les performances SQL Presentation Transcript

    • nAcademy Le 2 avril 2014 – Neuros Améliorer les performances SQL Christophe Villeneuve
    • nAcademy Le 2 avril 2014 – Neuros Sommaire • Comment tuer SQL ? • Améliorés les idées mal reçues • Des pistes
    • Tuons SQL
    • nAcademy Le 2 avril 2014 – Neuros Tuons SQL : Sans connaissance • Base de données – PostgreSQL ? SQL Server ? Oracle ? … • Version  – 4.x / 5.1 / 5.5 / 5.6 / 5.7 • Storage – MyISAM ? InnoDB ? Falcon ? PBXT ?... • Qui gère la Base de données – Developer ? DBA ? Mix ?
    • nAcademy Le 2 avril 2014 – Neuros Tuons SQL : 3 raisons • Code • Design • Schema
    • nAcademy Le 2 avril 2014 – Neuros Mauvaise configuration • Architecture – Choisir le plus petit type de données possibles (BigInt?) – Champs indexés
    • nAcademy Le 2 avril 2014 – Neuros Mauvaise utilisation • Déplacer de nombreuses données à grandes échelles – Cache ? – Réplication – Conserver les données de session pour les transitions – Absence Clef primaire – Index Merge
    • nAcademy Le 2 avril 2014 – Neuros Mauvaise programmation • Configuration Mémoire • Absence de clef Primaire • Les jointures • Sous requêtes • Alias • Select *...
    • nAcademy Le 2 avril 2014 – Neuros En résumé Performance != Scalability (Evolution)
    • Les pistes aux idées mals reçues
    • nAcademy Le 2 avril 2014 – Neuros Les pistes • Hardware / Systemes • Configuration... SQL • Design BDD • Monitoring • Maintenance
    • Hardware / Systèmes
    • nAcademy Le 2 avril 2014 – Neuros Carte mère • Benchmark • Monitoring
    • nAcademy Le 2 avril 2014 – Neuros CPU • Processeur multi-coeur – 32 à 80 cœurs – Fast CPU • Utile pour du stockage et fiable
    • nAcademy Le 2 avril 2014 – Neuros Mémoire • Liés au volume de données • Liés aux nombres de connexions à la BDD • Extra RAM • FS Cache • Ram disk • ECC
    • nAcademy Le 2 avril 2014 – Neuros Choix du Systeme • OS – Linux / windows / Solaris/... – CPU associé avec l'OS • Vérifier la performance – L pour Lamp • Alternative à Malloc – Jemalloc – Tcmalloc [mysqld_safe] malloc-lib=tcmalloc
    • nAcademy Le 2 avril 2014 – Neuros Stockage • Matériels – Disque dur – SSD • Formatage – Ext4 – XFS – innodb_flush_method • Vitesse Lecture / Ecriture
    • nAcademy Le 2 avril 2014 – Neuros Et plus • Si 1 disque – Cache disque batterie de secours • Log InnoDB • Log Binaires – Sécurité crash – Vérifié durée de vie • Plusieurs disques – Equilibrer la charge – 1 disk pour la lecture et 1 disk pour l'écriture • Datadir • innodb_data_file_path • innodb_undo_directory • innodb_log_group_home_dir • log-bin • tmpdir Random, SSD Sequential, spinning Random, SSD, tmpfs
    • Configuration... SQL
    • nAcademy Le 2 avril 2014 – Neuros Fonction EXPLAIN • Obtenir des informations sur les SELECT > EXPLAIN SELECT * FROM nom_de_table WHERE... •
    • nAcademy Le 2 avril 2014 – Neuros Fonction EXPLAIN : code mysql> EXPLAIN SELECT f.film_id, f.title, c.name > FROM film f INNER JOIN film_category fc > ON f.film_id=fc.film_id INNER JOIN category c > ON fc.category_id=c.category_id WHERE f.title LIKE 'T%' G *************************** 1. row *************************** select_type: SIMPLE table: c type: ALL possible_keys: PRIMARY key: NULL key_len: NULL ref: NULL rows: 16 Extra: *************************** 2. row *************************** select_type: SIMPLE table: fc type: ref possible_keys: PRIMARY,fk_film_category_category key: fk_film_category_category key_len: 1 ref: sakila.c.category_id rows: 1 Extra: Using temporary; Using index *************************** 3. row *************************** select_type: SIMPLE table: f type: eq_ref possible_keys: PRIMARY,idx_title key: PRIMARY key_len: 2 ref: sakila.fc.film_id rows: 1 Extra: Using where Une estimation de rangées dans cette série Table temporaire avec 1 index Attention Une estimation de rangées dans cette série
    • nAcademy Le 2 avril 2014 – Neuros Repérer une colonne indexée SELECT * FROM Orders WHERE TO_DAYS(CURRENT_DATE()) – TO_DAYS(order_created) <= 7; Mauvaise idée... Risque de nombreux problèmes... SELECT * FROM Orders WHERE order_created >= CURRENT_DATE() INTERVAL 7 DAY; Mieux... sauf pour order_created SELECT order_id, order_created, customer FROM Orders WHERE order_created >= '20140402' INTERVAL 7 DAY; ok... La requête peut être mise en cache
    • nAcademy Le 2 avril 2014 – Neuros Optimisation colonne indexée CURRENT_DATE()... en PHP $sql= « SELECT order_id, order_created, customer FROM Orders WHERE order_created >= ' » . date('Y-m-d') . « ' - INTERVAL 7 DAY »;
    • nAcademy Le 2 avril 2014 – Neuros Jointure vs subqueries • Garder les choses simples • Manipuler les jeux de données • Penser aux boucles • Les jointures... une solution
    • nAcademy Le 2 avril 2014 – Neuros Exemple : Jointure vs subqueries
    • nAcademy Le 2 avril 2014 – Neuros Valeur des champs • Définir le plus petit type de données – Vraiment utile d'utiliser BigINT ? • Définition Petit – 1 seul bloc mémoire utilisé • Champs indexés ? • Int / Char ?
    • nAcademy Le 2 avril 2014 – Neuros Connexion persistante dans PHP • Couche Abstraction DB lourde –ADODB –MDB2 –PearDB –ORM • Couche Abstraction légère –PDO –MySQLND –Bibliothèque / Librairie
    • nAcademy Le 2 avril 2014 – Neuros Requête cache • threads_running... MySQL<=4 • Depuis il y a Query Cache – query_cache_type = 0 – query_cache_size =0 thread_cache = 200 query_cache_type = 0 query_cache_size =64M
    • nAcademy Le 2 avril 2014 – Neuros Requête Cache • Le problème – qcache_free_blocks > 5-10k – stage/sql/Waiting for query cache lock
    • nAcademy Le 2 avril 2014 – Neuros Configurer la table de cache • Définir le nombre de table ouverte –table_open_cache –table_definition_cache –opened_table_definitions / sec –table_cache_instances = 8 or 16 –innodb_open_files –mdl_hash_instances = 256 table_cache = 5000 key_buffer = 320M
    • nAcademy Le 2 avril 2014 – Neuros Configurer la table de cache
    • nAcademy Le 2 avril 2014 – Neuros Réduire la consommation de la mémoire max_used_connections * ( read_buffer_size + read_rnd_buffer_size + join_buffer_size + sort_buffer_size + binlog_cache_size + thread_stack + 2 * net_buffer_length … ) Augmentation possible
    • nAcademy Le 2 avril 2014 – Neuros Choix du moteur • Moteur Moderne... – InnoDB vs MyISAM • InnoDB – Scalable – Moteur de texte integral – API Memcache (Haute performance)
    • nAcademy Le 2 avril 2014 – Neuros Optimisation dans my.cnf • Utiliser la mémoire tampon – innodb_buffer_pool_size – Active data <= innodb_buffer_pool_size <= 0.8 * RAM • Reduire the buffer pool contention – innodb_buffer_pool_instances >= 8 – innodb_spin_wait_delay = 96 on high concurrency • Lecture/Ecriture les transactions (ex : logs) – innodb_log_file_size = 2047M … Avant 5.6 – innodb_log_file_size >= 2047M … Apres 5.6
    • Design BDD
    • nAcademy Le 2 avril 2014 – Neuros Architectures des tables • Intégrer les clefs primaires • UTF-8 par rapport latin 1 • Compression des champs – Blob – Varchar – Text
    • Monitoring
    • nAcademy Le 2 avril 2014 – Neuros Monitoring • Outils – MySQL entreprise Monitor – Perconat Monitoring – Galeria – Query Analyzer
    • Maintenance
    • nAcademy Le 2 avril 2014 – Neuros Maintenance • Au niveau du code – Fermer les connexions inactives – Penser aux requêtes préparées • Backup de la base de données • Optimiser les tables et les données • Mise à jour régulière BDD • Faire des tests de performances
    • nAcademy Le 2 avril 2014 – Neuros Questions... ? @hellosct1 @neuro_paris Sources originales : - Arnaud Adant - Jay Pipes