首页 > 数据库 >mysql InnoDB建表时设定初始大小的方法

mysql InnoDB建表时设定初始大小的方法

时间:2022-10-24 18:03:09浏览次数:46  
标签:建表时 INITIAL InnoDB FILE mysql table FIL SIZE

InnoDB在写密集的压力时,由于B-Tree扩展,因而也会带来数据文件的扩展,然而,InnoDB数据文件扩展需要使用mutex保护数据文件,这就会导致波动。 丁奇的博客说明了这个问题:
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:
解决的方法也很简单,只要知道数据文件可能会增长到多大,预先扩展即可。阅读代码可以知道,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 < FIL_IBD_FILE_INITIAL_SIZE ?
+        FIL_IBD_FILE_INITIAL_SIZE : table->datafile_initial_size);
   table->space = (unsigned int) space;
以上就是关于对mysql InnoDB建表时设定初始大小的方法的详细介绍。欢迎大家对mysql InnoDB建表时设定初始大小的方法内容提出宝贵意见

标签:建表时,INITIAL,InnoDB,FILE,mysql,table,FIL,SIZE
From: https://www.cnblogs.com/chinasoft/p/16822280.html

相关文章

  • MySQL 中 不等于 会过滤掉 Null 的问题
    1.原因: 在写SQL条件语句时经常用到不等于!=的筛选条件。  此时要注意此条件会将字段为Null的数据也当做满足不等于的条件而将数据筛选掉。 2.实例:表A ......
  • Mac下安装MySQL详细图文步骤
    1.安装包下载下载链接:https://downloads.mysql.com/archives/community/为了安装更方便,建议下载和mac电脑版本匹配的mysql的dmg安装包,我的电脑Mac版本是12.5的,所以下载......
  • WGCLOUD无法连接到mysql数据库的原因
    WGCLOUD有时候连不上mysql数据库,我们按照以下几点来排查下:1.我们首先检查server/config/application.yml中mysql连接配置是否正确,比如用户名密码这些2.再检查mysql是否已......
  • Mysql优化学习38-备库延迟太大,怎么办
    我们使用之前用的命令:showslavestatus\G;查看一下有个参数:##1.复制原理##2.备库延迟原因##3.处理方法##4.依然存在的问题......
  • mysql数据库指定ip远程访问(设置远程连接),赋权操作
    mysql数据库指定ip远程访问(设置远程连接)远程访问mysql报错,ip不允许链接的情况:错误号码1045Accessdeniedforuser'用户名'@'数据库地址'(usingpassword:YES) 查......
  • 云服务器中Centos安装MySQL方法
    一、Centos安装MySQL方法1、下载并安装mysqlyum-yinstallmysql57-community-release-el7-10.noarch.rpm2、安装mysql服务器yum-yinstallmysql-community-s......
  • 华为云数据库 GaussDB(for MySQL),让企业无忧数据恢复
    可能很多网络运营单位在数字化转型过程中都遇见过因为停电导致信息数据丢失,进而致使整个网络运营单位的云上业务被迫中断这样的问题?这时候网络运营单位需要探索到业务中断......
  • MySQL存储过程
    MySQL存储过程 MySQL储存过程_long-way-to-go的博客-CSDN博客_mysql存储过程 与sql存储过程区别1、输入参数写法不同createprocedure存储过程名称(in/out/inou......
  • mysql 忘记root密码
    忘记root密码1、关闭正在运行的MySQL服务。(任务管理器,结束进程mysqld.exe)2、打开DOS窗口,转到mysql\bin目录。3、输入mysqld--skip-grant-tables回车。--skip-grant-t......
  • Mysql索引原理揭秘之——MyISAM和InnoDB
    MyISAM引擎的索引实现在MyISAM里面,另外有两个文件,一个是.MYD文件,D代表Data,是MyISAM的数据文件,存放数据记录,比如我们的user_myisam表的所有的表数据;一个是.MYI文件,I代表Inde......