最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql InnoDB建表時(shí)設(shè)定初始大小的方法

 更新時(shí)間:2013年11月15日 16:27:41   投稿:zxhpj  
這篇文章主要介紹了mysql InnoDB建表時(shí)設(shè)定初始大小的方法,需要大家到MYSQL后臺(tái)實(shí)際操作方可以看到效果

InnoDB在寫(xiě)密集的壓力時(shí),由于B-Tree擴(kuò)展,因而也會(huì)帶來(lái)數(shù)據(jù)文件的擴(kuò)展,然而,InnoDB數(shù)據(jù)文件擴(kuò)展需要使用mutex保護(hù)數(shù)據(jù)文件,這就會(huì)導(dǎo)致波動(dòng)。 丁奇的博客說(shuō)明了這個(gè)問(wèn)題:
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:
解決的方法也很簡(jiǎn)單,只要知道數(shù)據(jù)文件可能會(huì)增長(zhǎng)到多大,預(yù)先擴(kuò)展即可。閱讀代碼可以知道,InnoDB建表后自動(dòng)初始化大小是FIL_IBD_FILE_INITIAL_SIZE這個(gè)常量控制的,而初始化數(shù)據(jù)文件是由fil_create_new_single_table_tablespace()函數(shù)控制的。所以要改變數(shù)據(jù)文件初始化大小,只要修改fil_create_new_single_table_tablespace的傳入值即可,默認(rèn)是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.
因此,我在建表語(yǔ)法中加上了datafile_initial_size這個(gè)參數(shù),例如:
CREATE TABLE test (

) ENGINE = InnoDB DATAFILE_INITIAL_SIZE=100000;
如果設(shè)定的值比FIL_IBD_FILE_INITIAL_SIZE還小,就依然傳入FIL_IBD_FILE_INITIAL_SIZE給fil_create_new_single_table_tablespace,否則傳入datafile_initial_size進(jìn)行初始化。
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.
因此,這個(gè)簡(jiǎn)單安全的patch就有了,可以看 http://bugs.mysql.com/bug.php?id=67792 關(guān)注官方的進(jìn)展:
So, I wrote this simple patch, see http://bugs.mysql.com/bug.php?id=67792:

復(fù)制代碼 代碼如下:

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 < FIL_IBD_FILE_INITIAL_SIZE ?
+        FIL_IBD_FILE_INITIAL_SIZE : table->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 <mysql-build@oss.oracle.com>
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> *item_list) const;
   void reset_item_list(List<Item> *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 << 20)
 /** Unused. Reserved for future versions. */
 #define HA_CREATE_USED_PAGE_CHECKSUM    (1L << 21)
+/** Used for InnoDB initial table size. */
+#define HA_CREATE_USED_DATAFILE_INITIAL_SIZE (1L << 22)
 
 typedef ulonglong my_xid; // this line is the same as in log_event.h
 #define MYSQL_XID_PREFIX "MySQLXid"
@@ -1053,6 +1055,7 @@
   LEX_STRING comment;
   const char *data_file_name, *index_file_name;
   const char *alias;
+  uint datafile_initial_size; /* the initial size of the datafile */
   ulonglong max_rows,min_rows;
   ulonglong auto_increment_value;
   ulong table_options;
Index: sql/lex.h
===================================================================
--- sql/lex.h (revision 3063)
+++ sql/lex.h (working copy)
@@ -153,6 +153,7 @@
   { "DATABASE",  SYM(DATABASE)},
   { "DATABASES", SYM(DATABASES)},
   { "DATAFILE",  SYM(DATAFILE_SYM)},
+  { "DATAFILE_INITIAL_SIZE",   SYM(DATAFILE_INITIAL_SIZE_SYM)},
   { "DATE",  SYM(DATE_SYM)},
   { "DATETIME",  SYM(DATETIME)},
   { "DAY",  SYM(DAY_SYM)},

相關(guān)文章

  • MySQL中的性別字段到底加不加索引

    MySQL中的性別字段到底加不加索引

    這篇文章主要介紹了MySQL中的性別字段到底加不加索引問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • MySql模糊查詢json關(guān)鍵字檢索方案示例

    MySql模糊查詢json關(guān)鍵字檢索方案示例

    大家好,本篇文章主要講的是MySql模糊查詢json關(guān)鍵字檢索方案示例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下哦,方便下次瀏覽
    2021-12-12
  • Windows系統(tǒng)下MySQL添加到系統(tǒng)服務(wù)方法(mysql解壓版)

    Windows系統(tǒng)下MySQL添加到系統(tǒng)服務(wù)方法(mysql解壓版)

    這篇文章主要介紹了Windows系統(tǒng)下MySQL添加到系統(tǒng)服務(wù)方法,主要針對(duì)mysql解壓版,感興趣的朋友參考下吧
    2016-05-05
  • php連接MySQL的兩種方式對(duì)比

    php連接MySQL的兩種方式對(duì)比

    這篇文章主要介紹了php連接MySQL的兩種方式對(duì)比,一種是原生的鏈接方式另外一種是PDO方式,附上示例,推薦給大家,有需要的小伙伴可以參考下
    2015-04-04
  • 深度解析MySQL 5.7之中文全文檢索

    深度解析MySQL 5.7之中文全文檢索

    InnoDB默認(rèn)的全文索引parser非常合適于Latin,因?yàn)長(zhǎng)atin是通過(guò)空格來(lái)分詞的。但對(duì)于像中文,日文和韓文來(lái)說(shuō),沒(méi)有這樣的分隔符。一個(gè)詞可以由多個(gè)字來(lái)組成,所以我們需要用不同的方式來(lái)處理。在MySQL 5.7.6中我們能使用一個(gè)新的全文索引插件來(lái)處理它們:n-gram parser。
    2016-12-12
  • 在mac上如何使用終端打開(kāi)XAMPP自帶的MySQL

    在mac上如何使用終端打開(kāi)XAMPP自帶的MySQL

    本文給大家介紹在mac上如何使用終端打開(kāi)XAMPP自帶的MySQL,解決方法非常簡(jiǎn)單,需要的朋友參考下吧
    2016-12-12
  • 理解MySQL存儲(chǔ)過(guò)程和函數(shù)

    理解MySQL存儲(chǔ)過(guò)程和函數(shù)

    這篇文章主要幫助大家學(xué)習(xí)理解MySQL存儲(chǔ)過(guò)程和函數(shù),感興趣的小伙伴們可以參考一下
    2016-03-03
  • MySQL修改表結(jié)構(gòu)操作命令總結(jié)

    MySQL修改表結(jié)構(gòu)操作命令總結(jié)

    這篇文章主要介紹了MySQL修改表結(jié)構(gòu)操作命令總結(jié),包含如刪除列、添加列、修改列、添加主鍵、刪除主鍵、添加唯一索引、添加普通索引等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • Windows服務(wù)器MySQL中文亂碼的解決方法

    Windows服務(wù)器MySQL中文亂碼的解決方法

    這篇文章主要介紹了MySQL中文亂碼的一些解決方案,本文同時(shí)分解了MySQL中文亂碼的原因分析,需要的朋友可以參考下
    2015-01-01
  • mysql重置root密碼的完整步驟(適用于5.7和8.0)

    mysql重置root密碼的完整步驟(適用于5.7和8.0)

    這篇文章主要介紹了mysql重置root密碼的完整步驟,文中描述了如何停止MySQL服務(wù)、以管理員身份打開(kāi)命令行、替換配置文件路徑、修改密碼以及重新啟動(dòng)MySQL服務(wù)的過(guò)程,需要的朋友可以參考下
    2025-01-01

最新評(píng)論

建昌县| 岳普湖县| 无极县| 铜川市| 霍城县| 西和县| 永春县| 嵩明县| 南通市| 万源市| 白沙| 巴东县| 伊宁县| 康保县| 开化县| 栾川县| 通山县| 襄城县| 崇阳县| 项城市| 新蔡县| 渝中区| 特克斯县| 广昌县| 绥滨县| 岢岚县| 恭城| 孟连| 水城县| 三明市| 江源县| 类乌齐县| 定州市| 梓潼县| 天长市| 永宁县| 越西县| 隆尧县| 九寨沟县| 新建县| 铜梁县|