====磁盘IO问题====
磁盘IO是不可避免的,除去减少或延缓磁盘操作,也需要尽量的增强磁盘IO性能和吞吐量。
1.磁盘阵列 redundant array of indexpensive disks 廉价磁盘冗余阵列。常见的磁盘阵列有 raid0、 raid1、 raid01 、raid10 、raid5、 raid6。
RAID 0 条带化设计,无冗余,可靠性差;对可靠性无要求,读写很频繁的话,选RAID0
RAID 1 镜像,至少n块磁盘(n>1),n倍容量,冗余保护,提高并发性能;
RAID 10 先镜像再条带,可靠性比较好,并且并发比较好,数据库较优的选择。简图如下:
RAID 10 / 1 3 2 4 | | 1 1 2 4 3 3 2 4
RAID 5 在条带化的基础上增加了校验数据块,用来将条带的数据写到各个盘,而不是特定的磁盘。读取频繁,写需求较少,可靠性比较好,可以选择RAID5。简图如下:用*来表示校验位
RAID 5 ____2__4___*__7___*_____ ____*__3___4__*___9_____ ____4__*___6__0___1_____
2.虚拟文件卷
raid是硬件实现的,但linux操作系统中有一些软件包,能模拟实现raid,性能高于单个磁盘,弱于raid。
例如:逻辑卷,由硬盘->pvcreate物理卷->vgcreate 卷组->lvcreate逻辑卷
3.symbolic links软链接
举个例子:在创建mysql时,数据库和表都默认存放在datadir目录下,可以采用软链接的将不同db、table、index指向不同的物理磁盘。
参考网址:
硬链接:同一个文件,有不同的别名,他们使用的是共同节点。
有以下特性:
1>文件具有相同的inode和data block
2>只能对已经存在的文件进行创建硬链接
3>不能交叉文件系统进行硬链接的创建
4>不能对目录创建,只能对文件进行创建
5>删除一个硬链接的文件并不会影响具有相同inode的文件
$ link old.file hard.link | ls -il $ ls -i hard.link 12468253 hard.link $ ls -i old.file 12468253 old.file
软链接:数据块内容有点特殊的文件。软链接有自己的inode和数据块。
特性:
1>软链接有自己的文件属性和权限;
2>可对不存在的文件或者目录创建软链接;
3>软链接可以交叉文件系统;
4>可以对文件或者目录创建;
5>创建软链接的时候,链接i_nlink不会增加;
6>删除软链接并不影响被指向的原文件,但是原文件被删除,则相关软链接被称为死链接,若被指向的路径文件被重新创建,死链接则可以恢复。
$ ln -s old.flie soft.link
================== 补充前提:=======================
linux的文件数据和文件属性是分别存放于data block和metadata(元数据);inode是元数据中的一部分,只记录索引节点号,是文件的唯一标识。
通过文件名来找到文件数据:filename-->inode(metadata)-->data blocks;
可以通过ls -i stat查看文件节点号,可以发现mv前后的文件inode没有变化
===================================================
4.裸设备 raw device
由于innodb的存储引擎是采用类似oracle的数据缓存机智来cache索引和数据,可以考虑使用raw device 来存放innodb共享表空间。
1》需要修改配置文件[mysqld]修改参数innodb_data_file_path
2》启动MySQL,使其完成分区初始化工作,然后关闭。再将innodb_data_filw_path中的newraw改成raw。再重启即可。