SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Ähnlich wie Améliorer les performances SQL

SQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASSQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASGUSS
 
MariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeursMariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeursChristophe Villeneuve
 
Datit207 scénarios hybrides entre sql server et windows azure
Datit207   scénarios hybrides entre sql server et windows azureDatit207   scénarios hybrides entre sql server et windows azure
Datit207 scénarios hybrides entre sql server et windows azureChristophe Laporte
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.xDr Hajji Hicham
 
Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017Christophe Villeneuve
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08Loïc Descotte
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
Les Frameworks CSS, par Raphaël Goetter & Nicolas Hoffmann
Les Frameworks CSS, par Raphaël Goetter & Nicolas HoffmannLes Frameworks CSS, par Raphaël Goetter & Nicolas Hoffmann
Les Frameworks CSS, par Raphaël Goetter & Nicolas HoffmannNicolas Hoffmann
 
JSS2014 – Performances et DMV
JSS2014 – Performances et DMVJSS2014 – Performances et DMV
JSS2014 – Performances et DMVGUSS
 
Jss2014 performance counters and dmvs
Jss2014   performance counters and dmvsJss2014   performance counters and dmvs
Jss2014 performance counters and dmvsChristophe Laporte
 
Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011OSInet
 
MYSQLDUMP & ZRM COMMUNITY (FR)
MYSQLDUMP & ZRM COMMUNITY (FR)MYSQLDUMP & ZRM COMMUNITY (FR)
MYSQLDUMP & ZRM COMMUNITY (FR)Cédric P
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeMustapha Tachouct
 

Ähnlich wie Améliorer les performances SQL (20)

SQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASSQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
 
MariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeursMariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeurs
 
Datit207 scénarios hybrides entre sql server et windows azure
Datit207   scénarios hybrides entre sql server et windows azureDatit207   scénarios hybrides entre sql server et windows azure
Datit207 scénarios hybrides entre sql server et windows azure
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.x
 
Optimisation de MySQL
Optimisation de MySQLOptimisation de MySQL
Optimisation de MySQL
 
OpenNMS
OpenNMSOpenNMS
OpenNMS
 
Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08
 
Exchange 2013 Bonnes pratiques
Exchange 2013 Bonnes pratiques Exchange 2013 Bonnes pratiques
Exchange 2013 Bonnes pratiques
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Formation NoSQL
Formation NoSQLFormation NoSQL
Formation NoSQL
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Les Frameworks CSS, par Raphaël Goetter & Nicolas Hoffmann
Les Frameworks CSS, par Raphaël Goetter & Nicolas HoffmannLes Frameworks CSS, par Raphaël Goetter & Nicolas Hoffmann
Les Frameworks CSS, par Raphaël Goetter & Nicolas Hoffmann
 
spark_intro_1208
spark_intro_1208spark_intro_1208
spark_intro_1208
 
JSS2014 – Performances et DMV
JSS2014 – Performances et DMVJSS2014 – Performances et DMV
JSS2014 – Performances et DMV
 
Jss2014 performance counters and dmvs
Jss2014   performance counters and dmvsJss2014   performance counters and dmvs
Jss2014 performance counters and dmvs
 
Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011
 
MYSQLDUMP & ZRM COMMUNITY (FR)
MYSQLDUMP & ZRM COMMUNITY (FR)MYSQLDUMP & ZRM COMMUNITY (FR)
MYSQLDUMP & ZRM COMMUNITY (FR)
 
47750479 cours-c
47750479 cours-c47750479 cours-c
47750479 cours-c
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
 

Mehr von neuros

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)neuros
 
Le service workers
Le service workersLe service workers
Le service workersneuros
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internetneuros
 
Le pouvoir d'être Visible ou Invisible sur Internet
Le pouvoir d'être Visible ou Invisible  sur InternetLe pouvoir d'être Visible ou Invisible  sur Internet
Le pouvoir d'être Visible ou Invisible sur Internetneuros
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesneuros
 
Livre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursLivre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursneuros
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le webneuros
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessibleneuros
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamonneuros
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et phpneuros
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réelsneuros
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)neuros
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5neuros
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continuneuros
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalneuros
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informationsneuros
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internetneuros
 
La mémoire et PHP
La mémoire et PHPLa mémoire et PHP
La mémoire et PHPneuros
 
Pourquoi Firefox OS
Pourquoi Firefox OSPourquoi Firefox OS
Pourquoi Firefox OSneuros
 

Mehr von neuros (20)

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)
 
Le service workers
Le service workersLe service workers
Le service workers
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internet
 
Le pouvoir d'être Visible ou Invisible sur Internet
Le pouvoir d'être Visible ou Invisible  sur InternetLe pouvoir d'être Visible ou Invisible  sur Internet
Le pouvoir d'être Visible ou Invisible sur Internet
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertes
 
Livre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursLivre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeurs
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le web
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessible
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamon
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et php
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réels
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continu
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informations
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internet
 
La mémoire et PHP
La mémoire et PHPLa mémoire et PHP
La mémoire et PHP
 
Pourquoi Firefox OS
Pourquoi Firefox OSPourquoi Firefox OS
Pourquoi Firefox OS
 

Améliorer les performances SQL

  • 1. nAcademy Le 2 avril 2014 – Neuros Améliorer les performances SQL Christophe Villeneuve
  • 2. nAcademy Le 2 avril 2014 – Neuros Sommaire • Comment tuer SQL ? • Améliorés les idées mal reçues • Des pistes
  • 4. 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 ?
  • 5. nAcademy Le 2 avril 2014 – Neuros Tuons SQL : 3 raisons • Code • Design • Schema
  • 6. nAcademy Le 2 avril 2014 – Neuros Mauvaise configuration • Architecture – Choisir le plus petit type de données possibles (BigInt?) – Champs indexés
  • 7. 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
  • 8. nAcademy Le 2 avril 2014 – Neuros Mauvaise programmation • Configuration Mémoire • Absence de clef Primaire • Les jointures • Sous requêtes • Alias • Select *...
  • 9. nAcademy Le 2 avril 2014 – Neuros En résumé Performance != Scalability (Evolution)
  • 10. Les pistes aux idées mals reçues
  • 11. nAcademy Le 2 avril 2014 – Neuros Les pistes • Hardware / Systemes • Configuration... SQL • Design BDD • Monitoring • Maintenance
  • 13. nAcademy Le 2 avril 2014 – Neuros Carte mère • Benchmark • Monitoring
  • 14. nAcademy Le 2 avril 2014 – Neuros CPU • Processeur multi-coeur – 32 à 80 cœurs – Fast CPU • Utile pour du stockage et fiable
  • 15. 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
  • 16. 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
  • 17. nAcademy Le 2 avril 2014 – Neuros Stockage • Matériels – Disque dur – SSD • Formatage – Ext4 – XFS – innodb_flush_method • Vitesse Lecture / Ecriture
  • 18. 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
  • 20. nAcademy Le 2 avril 2014 – Neuros Fonction EXPLAIN • Obtenir des informations sur les SELECT > EXPLAIN SELECT * FROM nom_de_table WHERE... •
  • 21. 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
  • 22. 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
  • 23. 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 »;
  • 24. 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
  • 25. nAcademy Le 2 avril 2014 – Neuros Exemple : Jointure vs subqueries
  • 26. 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 ?
  • 27. 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
  • 28. 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
  • 29. nAcademy Le 2 avril 2014 – Neuros Requête Cache • Le problème – qcache_free_blocks > 5-10k – stage/sql/Waiting for query cache lock
  • 30. 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
  • 31. nAcademy Le 2 avril 2014 – Neuros Configurer la table de cache
  • 32. 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
  • 33. nAcademy Le 2 avril 2014 – Neuros Choix du moteur • Moteur Moderne... – InnoDB vs MyISAM • InnoDB – Scalable – Moteur de texte integral – API Memcache (Haute performance)
  • 34. 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
  • 36. 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
  • 38. nAcademy Le 2 avril 2014 – Neuros Monitoring • Outils – MySQL entreprise Monitor – Perconat Monitoring – Galeria – Query Analyzer
  • 40. 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
  • 41. nAcademy Le 2 avril 2014 – Neuros Questions... ? @hellosct1 @neuro_paris Sources originales : - Arnaud Adant - Jay Pipes