mysql怎么设置空间 mysql设置表空间

mysql如何建表空间

在mysql中,也出现了类似oracle中的表空间概念。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站建设、成都网站制作、盐津网络推广、小程序制作、盐津网络营销、盐津企业策划、盐津品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供盐津建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

不过二者好像不同?具体不太清楚oracle是怎么回事。

mysql表空间是什么概念呢?

开启了Innodb的innodb_file_per_table这个参数之后【innodb_file_per_table = 1】,也就是启用InnoDB的独立表空间模式,便于管理。此时,在新建的innodb表的数据库目录下会多出来一个.ibd这个文件。这个就是此时的数据文件了。mysql会把这个innodb表的数据存放在这个文件中。并且每个innodb表此时都会对应这么一个ibd文件。

看官方文档:

If innodb_file_per_table is disabled (the default), InnoDB creates tables in the system tablespace. Ifinnodb_file_per_table is enabled, InnoDB creates each new table using its own .ibd file for storing data and indexes, rather than in the system tablespace.

那么这样做有什么好处呢?

可以实现单表在不同的数据库之间移动。具体怎么移动呢?假设有两个数据库,一个test,一个tt。

InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整一 下innodb_open_files 的值。

-------------------------------------------------------------------------------

需要说明的是:

1、设置了独立表空间之后,如果改成了共享表空间,那么,此时如果执行表的插入操作,数据会存放在哪里呢?

对于之前已经存在了的表,还是存放在独立表空间。对于新建的表,就会存放在共享表空间了。

2、如果一开始用了独立表空间,后来改了innodb_file_per_table变量的值,改成独立表空间了,那么数据如何存储?

对于已经存在了的innodb引擎的表来说,数据还是存放在共享表空间的,而此时如果创建了新的表,那么就会在数据库的目录中多出一个.ibd的文件用于存储这个新表的数据。

总结上面的1、2,就是:原来的还是按照原来的方式存储。新的表按照新的规则来存储。

怎么设置Mysql的内存表大小

内存表有大小限制,内存文件超过 my.ini 中设置以后,会自动转换部分到硬盘。内存表所占内存以固定的大小分配空间,即使一个表中只有一条记录,也可能占几M空间。内存表是有大小限制的,在 my.ini 中可以设置,当内存大小达到限制时,可能会报错:#1114: The table ‘XXX’ is full 。上面是我实际遭遇到的,但是 my.ini 中有下面这段:

# Maximum size for internal (in-memory) temporary tables. If a table

# grows larger than this value, it is automatically converted to disk

# based table This limitation is for a single table. There can be many

# of them.

tmp_table_size=13M

MySQL中如何修改日志空间大小?

有些mysql版本(比如5.6.2)限制了重做日志大小为4GB。所以在你设置innodb_log_file_size为2G或者更多时,请先检查一下MySQL的版本这方面的限制。

具体操作可以参考如下:

1.在my点吸烟 f更改innodb_log_file_size

2.停止mysql服务器

3.删除旧的日志,通过执行命令rm -f /var/lib/mysql/ib_logfile*

4.启动mysql服务器 – 应该需要比之前长点的时间,因为需要创建新的事务日志。

mysql 如何分配内存

我们仍然使用两个会话,一个会话 run,用于运行主 SQL;另一个会话 ps,用于进行 performance_schema 的观察:

主会话线程号为 29,

将 performance_schema 中的统计量重置,

临时表的表大小限制取决于参数  tmp_table_size 和 max_heap_table_size 中较小者,我们实验中以设置 max_heap_table_size 为例。

我们将会话级别的临时表大小设置为 2M(小于上次实验中临时表使用的空间),执行使用临时表的 SQL:

查看内存的分配记录:

会发现内存分配略大于 2M,我们猜测临时表会比配置略多一点消耗,可以忽略。

查看语句的特征值:

可以看到语句使用了一次需要落磁盘的临时表。

那么这张临时表用了多少的磁盘呢?

我们开启 performance_schema 中 waits 相关的统计项:

重做实验,略过。

再查看 performance_schema 的统计值:

可以看到几个现象:

1. 临时表空间被写入了 7.92MiB 的数据。

2. 这些数据是语句写入后,慢慢逐渐写入的。

来看看这些写入操作的特征,该方法我们在 实验 03 使用过:

可以看到写入的线程是 page_clean_thread,是一个刷脏操作,这样就能理解数据为什么是慢慢写入的。

也可以看到每个 IO 操作的大小是 16K,也就是刷数据页的操作。

结论:

我们可以看到,

1. MySQL 会基本遵守 max_heap_table_size 的设定,在内存不够用时,直接将表转到磁盘上存储。

2. 由于引擎不同(内存中表引擎为 heap,磁盘中表引擎则跟随 internal_tmp_disk_storage_engine 的配置),本次实验写磁盘的数据量和 实验 05 中使用内存的数据量不同。

3. 如果临时表要使用磁盘,表引擎配置为 InnoDB,那么即使临时表在一个时间很短的 SQL 中使用,且使用后即释放,释放后也会刷脏页到磁盘中,消耗部分 IO。


分享标题:mysql怎么设置空间 mysql设置表空间
文章起源:http://scyanting.com/article/ddiohhe.html