MySQL InnoDB数据文件直接在磁盘切片(固定大小)上?
-
16-10-2019 - |
题
Ibdata1似乎就像磁盘切片。在Solaris(UNIX)UFS文件系统(ZFS之前的常见)中,将其磁盘C0T0D0分为切片,例如将10GB驱动器切成三个部分,分为4GB,1GB,1GB和5GB。这些将是固定大小的文件系统。 4GB,例如OS。 1GB用于交换,软件和数据的5GB。
交换可以存储在文件系统上的文件上,但是对于性能,它通常存储在其自己的磁盘部分上。
可以将IBDATA1与自己的切片链接以提高性能吗?当然,在决定理想的固定尺寸之前,人们必须仔细考虑,他们还必须知道如何检查使用水平。
可以从中放置符号链接 .../mysql/data/ibdata1
至 /dev/rdsk/c0t0d0s3
. 。然后,MySQL将其视为文件,但可以更好地表现,因为它不必通过文件系统层,它将直接写入磁盘的指定部分。
- 有人尝试过吗?
- 有人认为这是个坏主意吗? (请记住,这个想法是针对仅InnoDB仅数据库服务器的。而不是多用途服务器。)
- 它会起作用(InnoDB需要检查文件长度吗?如果没有,则应起作用。)
- 可以检查使用情况吗?
解决方案
首先,IBDATA1中存在什么输入类型?四(4)个条目类型:
- 表元数据
- 表数据页
- 索引数据页
- MVCC 数据
每当InnoDB表都经历DDL,DML或在交易中使用的DDL,所有这四种类型的条目都会读取或编写。同时,如果 innodb_file_per_table 被禁用,所有这些输入类型都活在IBDATA1中。如果启用了它,则只有表元数据和MVCC数据将位于IBDATA1中,而表数据页和索引数据页面将驻留在数据库子文件夹中作为.ibd文件。
考虑到这一点,如果将ibdata1放在另一卷中并与之相关,该怎么办?
对于初学者,无论存储引擎如何,MySQL如何表示表?作为.frm文件。 .frm文件在哪里居住?在datadir中。那怎么了?
这是一个示例:
使用/var/lib/mysql的默认datadir,让我们使用一个名为mydb.mytable的InnoDB表。
借助Innodb_file_per_table禁用,所有内容都将位于IBDATA1中(您建议您进行符号链接并发送到另一个数据卷)。对于表mydb.mytable,这就是您所拥有的:
- /var/lib/mysql/mydb/mytable.frm
- 关于桌子的其他所有内容都生活在ibdata1中
现在想象一下:您访问表格,MySQL将首先点击/var/lib/mysql/mydb/mytable.frm,然后在ibdata1中点击ibdata1中的数据和索引页,以获取mydb.mytable。 MyDB.MyTable的每一个访问都会不断发生。这种来回的级联会以某种方式使事情变慢一些,并且您可能无法通过将IBDATA1移至其他一些数据量来获得您期望的性能。实际上,级联效应现在将是InnoDB表数量乘以两个(2)的因素。
想象一下启用Innodb_file_per_table。现在,您的设置略有不同:
- /var/lib/mysql/mydb/mytable.frm
- /var/lib/mysql/mydb/mytable.ibd
- MVCC数据和表元数据将位于Ibdata1中
这种级联的级联会更糟,因为现在将在三个文件中而不是两个文件之间发生级联访问的级联。
这是一些有些人想到的情况:如何将IBDATA1移至不同的卷,而是启用Innodb_file_per_table并将.IBD文件移至一个或多个不同的数据量怎么样?现在的级联效应将是InnoDB表数量乘以三(3)的因素。 Percona表达了很好的理由不这样做,您会发现有用.