InnoDB建表时设定初始大小 (Setting InnoDB table datafile ini
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/setting_innodb_table_initial_size.html InnoDB在写密集的压力时,由于B-Tree扩展,因而也会带来数据文件的
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/setting_innodb_table_initial_size.html
InnoDB在写密集的压力时,由于B-Tree扩展,因而也会带来数据文件的扩展,然而,InnoDB数据文件扩展需要使用mutex保护数据文件,这就会导致波动。 丁奇的博客说明了这个问题:http://dinglin.iteye.com/blog/1317874
When InnoDB under heavy write workload, datafiles will extend quickly, because of B-Tree allocate new pages. But InnoDB need to use mutex to protect datafile, so it will cause performance jitter. Xiaobin Lin said this in his blog: http://dinglin.iteye.com/blog/1317874
解决的方法也很简单,只要知道数据文件可能会增长到多大,预先扩展即可。阅读代码可以知道,InnoDB建表后自动初始化大小是FIL_IBD_FILE_INITIAL_SIZE这个常量控制的,而初始化数据文件是由fil_create_new_single_table_tablespace()函数控制的。所以要改变数据文件初始化大小,只要修改fil_create_new_single_table_tablespace的传入值即可,默认是FIL_IBD_FILE_INITIAL_SIZE。
How to solve it? That’s easy. If we know the datafile will extend to which size at most, we can pre-extend it. After reading source code, we can know InnoDB initial datafile size by FIL_IBD_FILE_INITIAL_SIZE, and fil_create_new_single_table_tablespace() function to do it. So if we want to change datafile initial size, we only need to change the initial size parameter in fil_create_new_single_table_tablespace(), the default value is FIL_IBD_FILE_INITIAL_SIZE.
因此,我在建表语法中加上了datafile_initial_size这个参数,例如:
CREATE TABLE test (
…
) ENGINE = InnoDB DATAFILE_INITIAL_SIZE=100000;
如果设定的值比FIL_IBD_FILE_INITIAL_SIZE还小,就依然传入FIL_IBD_FILE_INITIAL_SIZE给fil_create_new_single_table_tablespace,否则传入datafile_initial_size进行初始化。
So, I add a new parameter for CREATE TABLE, named ‘datafile_initial_size’. For example:
CREATE TABLE test (
…
) ENGINE = InnoDB DATAFILE_INITIAL_SIZE=100000;
If DATAFILE_INITIAL_SIZE value less than FIL_IBD_FILE_INITIAL_SIZE, I will still pass FIL_IBD_FILE_INITIAL_SIZE to fil_create_new_single_table_tablespace(), otherwise, I pass DATAFILE_INITIAL_SIZE value to fil_create_new_single_table_tablespace() function for initialization.
因此,这个简单安全的patch就有了,可以看 http://bugs.mysql.com/bug.php?id=67792 关注官方的进展:
So, I wrote this simple patch, see http://bugs.mysql.com/bug.php?id=67792:
Index: storage/innobase/dict/dict0crea.c =================================================================== --- storage/innobase/dict/dict0crea.c (revision 3063) +++ storage/innobase/dict/dict0crea.c (working copy) @@ -294,7 +294,8 @@ error = fil_create_new_single_table_tablespace( space, path_or_name, is_path, flags == DICT_TF_COMPACT ? 0 : flags, - FIL_IBD_FILE_INITIAL_SIZE); + table->datafile_initial_size datafile_initial_size); table->space = (unsigned int) space; ? if (error != DB_SUCCESS) { Index: storage/innobase/handler/ha_innodb.cc =================================================================== --- storage/innobase/handler/ha_innodb.cc (revision 3063) +++ storage/innobase/handler/ha_innodb.cc (working copy) @@ -7155,6 +7155,7 @@ col_len); } ? + table->datafile_initial_size= form->datafile_initial_size; error = row_create_table_for_mysql(table, trx); ? if (error == DB_DUPLICATE_KEY) { @@ -7760,6 +7761,7 @@ ? row_mysql_lock_data_dictionary(trx); ? + form->datafile_initial_size= create_info->datafile_initial_size; error = create_table_def(trx, form, norm_name, create_info->options & HA_LEX_CREATE_TMP_TABLE ? name2 : NULL, flags); Index: storage/innobase/include/dict0mem.h =================================================================== --- storage/innobase/include/dict0mem.h (revision 3063) +++ storage/innobase/include/dict0mem.h (working copy) @@ -678,6 +678,7 @@ /** Value of dict_table_struct::magic_n */ # define DICT_TABLE_MAGIC_N 76333786 #endif /* UNIV_DEBUG */ + uint datafile_initial_size; /* the initial size of the datafile */ }; ? #ifndef UNIV_NONINL Index: support-files/mysql.5.5.18.spec =================================================================== --- support-files/mysql.5.5.18.spec (revision 3063) +++ support-files/mysql.5.5.18.spec (working copy) @@ -244,7 +244,7 @@ Version: 5.5.18 Release: %{release}%{?distro_releasetag:.%{distro_releasetag}} Distribution: %{distro_description} -License: Copyright (c) 2000, 2011, %{mysql_vendor}. All rights reserved. Under %{license_type} license as shown in the Description field. +License: Copyright (c) 2000, 2012, %{mysql_vendor}. All rights reserved. Under %{license_type} license as shown in the Description field. Source: http://www.mysql.com/Downloads/MySQL-5.5/%{src_dir}.tar.gz URL: http://www.mysql.com/ Packager: MySQL Release Engineering Index: sql/table.h =================================================================== --- sql/table.h (revision 3063) +++ sql/table.h (working copy) @@ -596,6 +596,7 @@ */ key_map keys_in_use; key_map keys_for_keyread; + uint datafile_initial_size; /* the initial size of the datafile */ ha_rows min_rows, max_rows; /* create information */ ulong avg_row_length; /* create information */ ulong version, mysql_version; @@ -1094,6 +1095,8 @@ #endif MDL_ticket *mdl_ticket; ? + uint datafile_initial_size; + void init(THD *thd, TABLE_LIST *tl); bool fill_item_list(List *item_list) const; void reset_item_list(List *item_list) const; Index: sql/sql_yacc.yy =================================================================== --- sql/sql_yacc.yy (revision 3063) +++ sql/sql_yacc.yy (working copy) @@ -906,6 +906,7 @@ %token DATABASE %token DATABASES %token DATAFILE_SYM +%token DATAFILE_INITIAL_SIZE_SYM %token DATA_SYM /* SQL-2003-N */ %token DATETIME %token DATE_ADD_INTERVAL /* MYSQL-FUNC */ @@ -5046,6 +5047,18 @@ Lex->create_info.db_type= $3; Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE; } + | DATAFILE_INITIAL_SIZE_SYM opt_equal ulonglong_num + { + if ($3 > UINT_MAX32) + { + Lex->create_info.datafile_initial_size= UINT_MAX32; + } + else + { + Lex->create_info.datafile_initial_size= $3; + } + Lex->create_info.used_fields|= HA_CREATE_USED_DATAFILE_INITIAL_SIZE; + } | MAX_ROWS opt_equal ulonglong_num { Lex->create_info.max_rows= $3; @@ -12585,6 +12598,7 @@ | CURSOR_NAME_SYM {} | DATA_SYM {} | DATAFILE_SYM {} + | DATAFILE_INITIAL_SIZE_SYM{} | DATETIME {} | DATE_SYM {} | DAY_SYM {} Index: sql/handler.h =================================================================== --- sql/handler.h (revision 3063) +++ sql/handler.h (working copy) @@ -387,6 +387,8 @@ #define HA_CREATE_USED_TRANSACTIONAL (1L <img src="/static/imghw/default1.png" data-src="http://www1.feedsky.com/t1/727603630/plinux/feedsky/s.gif?r=http://www.penglixun.com/tech/database/setting_innodb_table_initial_size.html" class="lazy" border="0" style="max-width:90%" style="position:absolute" style="max-width:90%" alt="InnoDB建表时设定初始大小 (Setting InnoDB table datafile ini" > 本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: ht […...<img src="/static/imghw/default1.png" data-src="http://www1.feedsky.com/t1/727603630/plinux/feedsky/s.gif?r=http://www.penglixun.com/tech/database/setting_innodb_table_initial_size.html" class="lazy" border="0" style="max-width:90%" style="position:absolute" style="max-width:90%" alt="InnoDB建表时设定初始大小 (Setting InnoDB table datafile ini" >

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)
![Comment augmenter la taille du disque dans VirtualBox [Guide]](https://img.php.cn/upload/article/000/887/227/171064142025068.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Nous rencontrons souvent des situations où la taille de disque prédéfinie n'a pas de place pour plus de données ? Si vous avez besoin de plus d'espace disque sur la machine virtuelle ultérieurement, vous devez étendre le disque dur virtuel et les partitions. Dans cet article, nous verrons comment augmenter la taille du disque dans VirtualBox. Augmenter la taille du disque dans VirtualBox Il est important de noter que vous souhaiterez peut-être sauvegarder les fichiers de votre disque dur virtuel avant d'effectuer ces opérations, car il y a toujours la possibilité que quelque chose se passe mal. C'est toujours une bonne pratique d'avoir des sauvegardes. Cependant, le processus fonctionne généralement correctement, assurez-vous simplement d'éteindre votre ordinateur avant de continuer. Il existe deux façons d'augmenter la taille du disque dans VirtualBox. Augmentez la taille du disque VirtualBox à l'aide de l'interface graphique à l'aide de CL

Explication détaillée et guide d'installation pour les nœuds de pignon Cet article introduira l'écosystème de pignon en détail - nœuds PI, un rôle clé dans l'écosystème de pignon et fournir des étapes complètes pour l'installation et la configuration. Après le lancement du réseau de test de la blockchain pèse, les nœuds PI sont devenus une partie importante de nombreux pionniers participant activement aux tests, se préparant à la prochaine version du réseau principal. Si vous ne connaissez pas encore Pinetwork, veuillez vous référer à ce qu'est Picoin? Quel est le prix de l'inscription? PI Utilisation, exploitation minière et sécurité. Qu'est-ce que Pinetwork? Le projet Pinetwork a commencé en 2019 et possède sa pièce exclusive de crypto-monnaie PI. Le projet vise à en créer un que tout le monde peut participer

InnoDB est l'un des moteurs de base de données de MySQL. C'est désormais le moteur de stockage par défaut de MySQL et l'une des normes pour les versions binaires de MySQL AB adopte un système d'autorisation à double voie, l'une est une autorisation GPL et l'autre est un logiciel propriétaire. autorisation. InnoDB est le moteur préféré pour les bases de données transactionnelles et prend en charge les tables de sécurité des transactions (ACID) ; InnoDB prend en charge les verrous au niveau des lignes, qui peuvent prendre en charge dans la plus grande mesure la concurrence. Les verrous au niveau des lignes sont implémentés par la couche moteur de stockage.

InnoDB est un moteur de stockage qui stocke les données dans des tables sur disque, de sorte que nos données existeront toujours même après l'arrêt et le redémarrage. Le processus réel de traitement des données se produit en mémoire, de sorte que les données du disque doivent être chargées dans la mémoire. S'il traite une demande d'écriture ou de modification, le contenu de la mémoire doit également être actualisé sur le disque. Et nous savons que la vitesse de lecture et d'écriture sur le disque est très lente, ce qui est plusieurs ordres de grandeur différents de la lecture et de l'écriture en mémoire. Ainsi, lorsque nous voulons obtenir certains enregistrements de la table, le moteur de stockage InnoDB doit-il lire. les enregistrements du disque un par un ? La méthode adoptée par InnoDB consiste à diviser les données en plusieurs pages et à utiliser les pages comme unité de base d'interaction entre le disque et la mémoire. La taille d'une page dans InnoDB est généralement de 16.

1. Restaurez et réinstallez MySQL Afin d'éviter d'avoir à importer ces données depuis d'autres endroits, effectuez d'abord une sauvegarde du fichier de base de données de la bibliothèque actuelle (/var/lib/mysql/location). Ensuite, j'ai désinstallé le package Perconaserver5.7, réinstallé l'ancien package 5.1.71 d'origine, démarré le service mysql, et il a demandé Unknown/unsupportedtabletype:innodb et n'a pas pu démarrer normalement. 11050912:04:27InnoDB : initialisation du pool de tampons, taille = 384,0 M11050912:04:27InnoDB : terminé

1. Niveau d'isolement des transactions Mysql Ces quatre niveaux d'isolement, lorsqu'il y a plusieurs conflits de concurrence de transactions, certains problèmes de lecture sale, de lecture non répétable et de lecture fantôme peuvent survenir, et innoDB les résout en mode niveau d'isolement de lecture répétable. de la lecture fantôme, 2. Qu'est-ce que la lecture fantôme ? La lecture fantôme signifie que dans la même transaction, les résultats obtenus en interrogeant la même plage deux fois avant et après sont incohérents, comme le montre la figure. Dans la première transaction, nous exécutons une requête de plage. À l'heure actuelle, il n'y a qu'une seule donnée qui remplit les conditions. Dans la deuxième transaction, il insère une ligne de données et la soumet. Ensuite, lorsque la première transaction est à nouveau interrogée, le résultat obtenu est un de plus que le résultat de. la première requête Data, notez que les première et deuxième requêtes de la première transaction sont toutes deux identiques.

Comparaison de sélection du moteur de stockage MySQL : évaluation de l'indice de performance InnoDB, MyISAM et mémoire Introduction : Dans la base de données MySQL, le choix du moteur de stockage joue un rôle essentiel dans les performances du système et l'intégrité des données. MySQL fournit une variété de moteurs de stockage, les moteurs les plus couramment utilisés incluent InnoDB, MyISAM et Memory. Cet article évaluera les indicateurs de performances de ces trois moteurs de stockage et les comparera à travers des exemples de code. 1. Moteur InnoDB InnoDB est mon

Il est très simple pour les utilisateurs de définir la taille de l'icône Apple 15. Recherchez l'affichage et la luminosité dans les paramètres du téléphone et effectuez des réglages détaillés. Les utilisateurs peuvent personnaliser de manière flexible la taille de l'icône. Comment définir la taille de l'icône Apple 15 A : Effectuer des réglages détaillés dans les paramètres d'affichage et de luminosité 1. Veuillez d'abord démarrer votre appareil iPhone ou iPad et accéder à l'interface de l'écran d'accueil. 2. Ensuite, l'utilisateur doit sélectionner l'icône de l'application « Paramètres » en bas de l'écran et cliquer pour entrer. 3. Dans le menu « Paramètres », sélectionnez l'option « Affichage et luminosité » et recherchez-y l'option « Affichage » ou « Échelle d'affichage ». 4. Les utilisateurs peuvent choisir parmi plusieurs options, telles que les paramètres « Par défaut », « Moyen » ou « Grand ». 5. Après avoir sélectionné la taille d'icône appropriée, appuyez sur le coin supérieur droit de l'écran.
