Maison >base de données >tutoriel mysql >Mysql innodb configure raw pour contourner le tampon du noyau et réaliser des E/S directes sous Linux
(republié depuis la communauté Linux)
Le moteur de stockage InnoDB de MySQL peut non seulement mettre en cache les index, mais également mettre en cache les données si ses tables et index sont stockés sur des périphériques bruts (Raw Device), ils peuvent contourner le cache et le tampon du système de fichiers et y accéder directement. , cela réduira considérablement la charge sur le système de fichiers Linux et améliorera considérablement les performances du système.
De plus, à partir des principes d'optimisation des appareils nus dans les applications de base de données, nous pouvons également voir une direction fondamentale de l'optimisation de la base de données, qui consiste à réduire la lourde charge sur le système de fichiers causée par l'unique consommation intensive d'E/S. accès à la base de données. Par conséquent, même sur les moteurs de stockage de bases de données basés sur un système de fichiers existant, des méthodes spéciales de montage du système de fichiers peuvent être envisagées.
Par exemple, utiliser noatime comme paramètre de montage pour une partition qui stocke les fichiers de base de données peut améliorer les performances du système dans une certaine mesure car les temps d'accès ne sont plus enregistrés.
────────────────────────────────────── ───── ──── ──────────────────────────
Le dernier environnement système configuré dans cette note :
───── ── ── ──────────────────────────────────────── ─── ─────── ─────────────────
OS : CentOS6
HDD : /dev/sdc /dev/sdd
RAW : /dev/ raw/raw1 /dev/ raw/raw2
MySQL : 5.1.61
UTILISATEUR : mysql:mysql
Référez-vous au guide de configuration du site officiel :
────────────────────────────────────── ───── ──── ─────────────────────────
(1) Préparez l'appareil brut
─ ───── ─── ─────────────────────────────────────── ─ ────────── ───────────────────—
Avant d'utiliser des appareils nus, le périphérique de disque doit être lié au périphérique nu :
-------------------------- -- ------------------------------------------------ --
/dev/raw/raw1 : lié au majeur 8, mineur 32
------------------------------ - ------------------------------------------------- - ---
# /bin/raw /dev/raw/raw2 /dev/sdd;
# chown root:mysql /dev/raw/raw1 /dev/raw/raw2;
# chmod 0660 /dev/raw /raw1 /dev/raw/raw2;
# /bin/raw -qa;
# /bin/raw -q /dev/raw/raw1;
# /bin/ls -l /dev/raw/raw1;
# blockdev --report /dev/raw/raw1;
# blockdev --report /dev/sdc;
vi /etc/udev/rules.d/60-raw.rules;
------------------------- -------------------------------------------------- -----
ACTION=="add", KERNEL=="sdc", GROUP=="mysql", MODE=="0660", RUN+="/bin/raw /dev/raw/raw1 % N"
ACTION=="add", KERNEL=="sdd", GROUP=="mysql", MODE=="0660", RUN+="/bin/raw /dev/raw/raw2 %N"
------------------------------------------------ --------------------------------
Remarque : assurez-vous que le périphérique /dev/sdc et /dev/sdd se liera automatiquement au redémarrage du serveur.
────────────────────────────────────── ───── ──── ────────────────────────────
(2) Si nécessaire, sauvegardez d'abord l'ancienne table de données InnoDB
── ──────────────────────────────────────── ── ──────── ───────────────────────
Si votre base de données est déjà en cours d'exécution et que les données existantes sont stockées dans l'ancien moteur InnoDB Parmi eux, si vous avez besoin de migrez,
veuillez utiliser la commande mysqldump pour exporter vos données avant de fermer la base de données, puis importez-les une fois le nouveau moteur configuré.
mysql> SELECT table_schema,table_name,engine FROM INFORMATION_SCHEMA.TABLES;
mysql> SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE moteur='InnoDB';
mysqldump -u root -p -h localhost [base de données].[table] >
Remarque : Vous devez exporter l'ancienne table de données par table.
────────────────────────────────────── ───────── ───────────────────────────────
(3) 初始化阶段MySQL的配置
───── ──────────────────────────────────────── ────────── ───────────────────────
Lorsque vous créez un nouveau fichier de données, placez le mot-clé newraw
immédiatement après la taille du fichier de données dans innodb_data_file_path :
#vi /etc/my.cnf;
------------------------------------------------- ---------------------------------------------
[mysqld ]
innodb_buffer_pool_size=128M
innodb_data_home_dir=
innodb_data_file_path=/dev/raw/raw1:64Mnewraw;/dev/raw/raw2:64Mnewraw
------------- -------------------------------------------------- -----------------
后记 :
mysql 还提供了另一种实现方式,配置 my.ini et innodb_flush_method
innodb_flush_method = O_DIRECT
这样也可以实现直接I/O
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!