Rumah pangkalan data tutorial mysql InnoDB建表时设定初始大小 (Setting InnoDB table datafile ini

InnoDB建表时设定初始大小 (Setting InnoDB table datafile ini

Jun 07, 2016 pm 04:34 PM
innodb saiz sediakan

本文内容遵从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" >
    


Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk meningkatkan saiz cakera dalam VirtualBox [Panduan] Bagaimana untuk meningkatkan saiz cakera dalam VirtualBox [Panduan] Mar 17, 2024 am 10:10 AM

Kami sering menghadapi situasi di mana saiz cakera yang telah ditetapkan tidak mempunyai ruang untuk lebih banyak data? Jika anda memerlukan lebih banyak ruang cakera keras mesin maya pada peringkat seterusnya, anda mesti mengembangkan cakera keras maya dan sekatan. Dalam siaran ini, kita akan melihat bagaimana untuk meningkatkan saiz cakera dalam VirtualBox. Meningkatkan saiz cakera dalam VirtualBox Adalah penting untuk ambil perhatian bahawa anda mungkin ingin menyandarkan fail cakera keras maya anda sebelum melakukan operasi ini, kerana sentiasa ada kemungkinan berlaku masalah. Ia sentiasa menjadi amalan yang baik untuk mempunyai sandaran. Walau bagaimanapun, proses ini biasanya berfungsi dengan baik, cuma pastikan untuk mematikan mesin anda sebelum meneruskan. Terdapat dua cara untuk meningkatkan saiz cakera dalam VirtualBox. Kembangkan saiz cakera VirtualBox menggunakan GUI menggunakan CL

PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? Mar 05, 2025 pm 05:57 PM

Penjelasan dan Panduan Pemasangan Terperinci untuk Pinetwork Nodes Artikel ini akan memperkenalkan ekosistem pinetwork secara terperinci - nod pi, peranan utama dalam ekosistem pinetwork, dan menyediakan langkah -langkah lengkap untuk pemasangan dan konfigurasi. Selepas pelancaran Rangkaian Ujian Blockchain Pinetwork, nod PI telah menjadi bahagian penting dari banyak perintis yang aktif mengambil bahagian dalam ujian, bersiap sedia untuk pelepasan rangkaian utama yang akan datang. Jika anda tidak tahu kerja pinet, sila rujuk apa itu picoin? Berapakah harga untuk penyenaraian? Penggunaan PI, perlombongan dan analisis keselamatan. Apa itu Pinetwork? Projek Pinetwork bermula pada tahun 2019 dan memiliki syiling pi cryptocurrency eksklusifnya. Projek ini bertujuan untuk mewujudkan satu yang semua orang boleh mengambil bahagian

apa itu mysql innodb apa itu mysql innodb Apr 14, 2023 am 10:19 AM

InnoDB ialah salah satu enjin pangkalan data MySQL Ia kini merupakan enjin storan lalai MySQL dan salah satu piawaian untuk keluaran binari oleh MySQL AB InnoDB menggunakan sistem kebenaran dwi-trek, satu adalah keizinan GPL dan satu lagi adalah perisian proprietari kebenaran. InnoDB ialah enjin pilihan untuk pangkalan data transaksi dan menyokong jadual keselamatan transaksi (ACID);

Bagaimana MySQL melihat format baris InnoDB daripada kandungan binari Bagaimana MySQL melihat format baris InnoDB daripada kandungan binari Jun 03, 2023 am 09:55 AM

InnoDB ialah enjin storan yang menyimpan data dalam jadual pada cakera, jadi data kami akan tetap wujud walaupun selepas ditutup dan dimulakan semula. Proses sebenar pemprosesan data berlaku dalam ingatan, jadi data dalam cakera perlu dimuatkan ke dalam memori Jika ia memproses permintaan tulis atau pengubahsuaian, kandungan dalam memori juga perlu dimuat semula ke cakera. Dan kita tahu bahawa kelajuan membaca dan menulis ke cakera adalah sangat perlahan, iaitu beberapa urutan magnitud yang berbeza daripada membaca dan menulis dalam ingatan Jadi apabila kita ingin mendapatkan rekod tertentu dari jadual, adakah enjin storan InnoDB perlu membaca rekod dari cakera satu demi satu? Kaedah yang digunakan oleh InnoDB adalah untuk membahagikan data kepada beberapa halaman, dan menggunakan halaman sebagai unit asas interaksi antara cakera dan memori Saiz halaman dalam InnoDB secara amnya 16

Bagaimana untuk mengendalikan pengecualian mysql innodb Bagaimana untuk mengendalikan pengecualian mysql innodb Apr 17, 2023 pm 09:01 PM

1. Gulung semula dan pasang semula mysql Untuk mengelakkan masalah mengimport data ini dari tempat lain, mula-mula buat sandaran fail pangkalan data perpustakaan semasa (/var/lib/mysql/location). Seterusnya, saya menyahpasang pakej Perconaserver5.7, memasang semula pakej 5.1.71 lama yang asal, memulakan perkhidmatan mysql, dan ia mendorong Unknown/unsupportedtabletype:innodb dan tidak boleh bermula seperti biasa. 11050912:04:27InnoDB:Initializingbufferpool,saiz=384.0M11050912:04:27InnoDB:Lengkap

Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql Bagaimana untuk menyelesaikan bacaan hantu dalam innoDB dalam Mysql May 27, 2023 pm 03:34 PM

1. Tahap pengasingan transaksi Mysql Empat tahap pengasingan ini, apabila terdapat konflik serentak transaksi, beberapa masalah bacaan kotor, bacaan tidak boleh berulang dan bacaan hantu mungkin berlaku, dan innoDB menyelesaikannya dalam mod tahap pengasingan berulang Masalah dengan bacaan hantu, 2. Apakah bacaan hantu bermaksud bahawa dalam transaksi yang sama, hasil yang diperoleh apabila menanya julat yang sama dua kali sebelum dan selepas adalah tidak konsisten seperti yang ditunjukkan dalam rajah, kami melaksanakan pertanyaan julat Pada masa ini, hanya terdapat satu data yang memenuhi syarat Dalam transaksi kedua, ia memasukkan baris data dan menyerahkannya Apabila pertanyaan transaksi pertama, hasil yang diperoleh adalah lebih daripada hasil pertanyaan pertama. Data, ambil perhatian bahawa pertanyaan pertama dan kedua bagi transaksi pertama adalah sama

Perbandingan pemilihan enjin storan MySQL: Penilaian indeks prestasi InnoDB, MyISAM dan Memori Perbandingan pemilihan enjin storan MySQL: Penilaian indeks prestasi InnoDB, MyISAM dan Memori Jul 26, 2023 am 11:25 AM

Perbandingan pemilihan enjin storan MySQL: Penilaian indeks prestasi InnoDB, MyISAM dan Memori Pengenalan: Dalam pangkalan data MySQL, pilihan enjin storan memainkan peranan penting dalam prestasi sistem dan integriti data. MySQL menyediakan pelbagai enjin storan, enjin yang paling biasa digunakan termasuk InnoDB, MyISAM dan Memory. Artikel ini akan menilai penunjuk prestasi ketiga-tiga enjin storan ini dan membandingkannya melalui contoh kod. 1. Enjin InnoDB InnoDB adalah Saya

Bagaimana untuk menetapkan saiz ikon Apple 15 Bagaimana untuk menetapkan saiz ikon Apple 15 Mar 08, 2024 pm 05:22 PM

Sangat mudah untuk pengguna menetapkan saiz ikon Apple 15 Cari paparan dan kecerahan dalam tetapan telefon dan membuat tetapan terperinci Pengguna boleh menyesuaikan saiz ikon secara fleksibel. Cara menetapkan saiz ikon Apple 15 A: Buat tetapan terperinci dalam tetapan paparan dan kecerahan 1. Sila mulakan peranti iPhone atau iPad anda dahulu dan masukkan antara muka skrin utama. 2. Kemudian pengguna perlu memilih ikon aplikasi "Tetapan" di bahagian bawah skrin dan klik untuk masuk. 3. Dalam menu "Tetapan", pilih pilihan "Paparan & Kecerahan", dan cari pilihan "Paparan" atau "Zum Paparan" di sana. 4. Pengguna boleh mempunyai berbilang pilihan untuk dipilih, seperti tetapan "Lalai", "Sederhana" atau "Besar". 5. Selepas memilih saiz ikon yang sesuai, ketik penjuru kanan sebelah atas skrin

See all articles