MySQL管理与优化(18):磁盘I/O问题

磁盘I/O问题:

使用磁盘阵列:

  • RAID(磁盘阵列)就是按照一定策略将数据分布到若干物理磁盘上,这样就增强了数据存储的可靠性,而且可以提高数据读写的整体性能。

常见RAID级别及其特性:

  • 按数据分布和冗余方式,可将RAID分为几种级别:

    MySQL管理与优化(18):磁盘I/O问题_第1张图片

如何选择RAID级别:

  • 根据应用的读写特性,可靠性要求,预算可以从以下几个方面考虑选择RAID级别:

       1. 数据读写都很频繁,可靠性要求也很高,最好选择RAID10;

       2. 数据读写频繁,写相对较少,对可靠性有一定要求,可选择RAID5;

       3. 数据读写都很频繁,但可靠性要求不高,可以选择RAID0。

虚拟文件卷或软RAID:

  • 在不具备硬件条件下,可以使用一个软RAID技术,如Linux下的lvm2。

使用Symbolic Links分布I/O:

  • 我们可以利用操作系统的符号连接(Symbolic Links)将不同的数据库或表,索引指向不同的屋里磁盘,从而达到分布磁盘I/O的目的。
  • 将一个数据库指向其他物理磁盘,如:
mkdir /otherdisk/databases/test
ln -s /otherdisk/database/test /path/to/datadir/test
  • 对于MyISAM存储类型的表,可以使用DATA DIRECTORY和INDEX DIRECTORY指定目录:
-- 对于新建表
CREATE TABLE test(
id INT PRIMARY KEY,
name VARCHAR(20)) TYPE = MyISAM DATA DIRECTORY = '/disk2/data' INDEX DIRECTORY = '/disk3/index'

-- 对于已存在的表
可将表的数据文件(.MYD)和索引文件(.MYI)移动到目标目录,再建立符号连接,但表的定义文件(.frm)必须位于MySQL的数据文件目录下。
  • 在Windows下使用符号链接。

       1. 创建目录D:\data\foo;

       2. 创建文件C:\mysql\data\foo.sym,在其中输入D:\data\foo。

NOTE:Symbolic Links存在一定的安全风险,如果不使用Symbolic Links,应通过启动参数skip-symbolic-links禁用这一功能。

禁止操作系统更新文件的atime属性:

# 可修改/etc/fstab, 如
/dev/sda3              /home         ext4      defaults,noatime      0      2
# 重新mount分区
sudo mount -a

用裸设备(Raw Device)存在InnoDB的共享表空间:

  • 修改MySQL配置文件,在innodb_data_file_path添加裸设备名称,并指定newraw属性:
......
[mysqld]
innodb_data_home_dir=
innodb_data_file_path=/dev/hdd1:3Gnewraw;/dev/hdd2:3Gnewraw
......
  • 启动MySQL,使其完成分区初始化工作,然后关闭MySQL。此时还不能创建或修改InnoDB表。
  • 将innodb_data_file_path中的newraw改成raw:
......
class=programlisting[mysqld]
innodb_data_home_dir=
innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw
  • 重新启动MySQL即可。

不吝指正。

你可能感兴趣的:(mysql,I/O磁盘问题)