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表达了很好的理由不这样做,您会发现有用.

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top