您当前的位置:首页 > 学海无涯 > 心得笔记网站首页心得笔记
Mysql优化
发布时间:2015-11-09作者:佚名
I/O问题
磁盘搜索是巨大的性能瓶颈。当数据量变得非常大以致于缓存性能变得不可能有效
时,该问题变得更加明显。对于大数据库,其中你或多或少地随机访问数据,你可以确信
对读取操作需要至少一次硬盘搜索,写操作需要多次硬盘搜索。要想使该问题最小化,应
使用搜索次数较少的磁盘。
使用磁盘阵列或虚拟文件卷分布I/O
分条意味着你有许多磁盘,将第1个块放到第1个硬盘,第2个块放到第2个磁盘,
并且第N块在 (N mod number_of_disks)磁盘上等等。这意味着如果正常数据大小小于
分条大小 (或完全匹配),能够得到最佳性能。分条完全取决于操作系统和分条大小,因
此用不同的条纹大小对应用程序进行基准测试。
分条的不同速度完全依赖于参数。依赖于怎样设置条纹参数和硬盘数量,可以根据
不同数量级别得到不同的标准。你必须进行选择以便优化随机或顺序存取。
1. 为了高可靠性你可能想使用RAID 0+1(条纹加镜像),但在这种情况下,需要2*N块磁
盘来保持N个磁盘的数据。如果你肯为它花钱,这可能是最好的选项。然而,你可能还
必须投资一部分资金到卷管理软件中以便有效地管理它。
2. 一个较好的选择是根据数据类型的重要性程度改变RAID级别。例如,保存可以在RAID
0硬盘上重新生成的不太重要的数据,但保存 真正重要数据 (例如主机信息和日志)
到RAID 0+1或RAID N硬盘。如果你有许多写操作,RAID N可能会存在问题,因为需
要时间来更新校验位。
使用Symbolic Links分布I/O
可以将表和数据库从数据库目录移动到其它的位置并且用指向新位置的符号链接进
行替换。推荐的方法只需要将数据库通过符号链接指到不同的磁盘。符号链接表仅作为是最
后的办法。
符号链接一个数据库的方法是,首先在一些有空闲空间的硬盘上创建一个目录,然
后从MySQL数据目录中创建它的一个符号链接。
shell> mkdir /dr1/databases/test
shell> ln -s /dr1/databases/test /path/to/datadir
注意:只有MyISAM表完全支持符号链接。对于其它表类型,如果试图在操作系统中
的文件上用前面的任何语句使用符号链接,可能会出现奇怪的问题。
对于MyISAM表的符号链接的处理如下:
1. 在数据目录指,一定会有表定义文件、数据文件和索引文件。数据文件和索引文件可以
移到别处和在数据目录中符号链接替代。表定义文件不能进行符号链接替换。
2. 可以分别通过符号链接将数据文件和索引文件指到不同的目录。
3. 如果mysqld没有运行,符号链接可以从服务器命令行使用ln -s手动完成。同样,通
过使用DATA DIRECTORY和INDEX DIRECTORY选项创建表,你可以指示运行的MySQL服
务器执行符号链接。
4. myisamchk不用数据文件或索引文件替换符号链接。它直接工作在符号链接指向的文
件。任何临时文件创建在数据文件或索引文件所处的目录中。
5. 注释:当你删掉一个表时,如果该表使用了符号链接,符号链接和该符号链接指向的文
件都被删除掉。这就是你不应以系统root用户运行mysqld或允许系统用户对MySQL
数据库目录有写访问权限的原因。
6. 如果你用ALTER TABLE ... RENAME重命名一个表并且不将表移到另一个数据库,数据
库目录中的符号链接被重新命名为一个新名字并且数据文件和索引文件也相应地重新
命名。
7. 如果你用ALTER TABLE ... RENAME移动一个表到另一个数据库,表移动到另一个数据
库目录。旧的符号链接和其所指向的文件被删除。换句话说,新表不再被链接。
8. 如果不使用符号链接,你应对mysqld使用--skip-symbolic-links选项以确保没有人
能够使用mysqld来删除或重新命名数据目录之外的文件。
表符号链接还不支持以下操作:
1. ALTER TABLE忽略DATA DIRECTORY 和INDEX DIRECTORY表选项。
2. BACKUP TABLE 和RESTORE TABLE不考虑符号链接。
3. .frm文件必须绝不能是一个符号链接 (如前面所述,只有数据和索引文件可以是符号
链接)。如果试图这样做 (例如,生成符号链接)会产生不正确的结果。
使用连接池
对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建立"连接池"以
提高访问的性能。我们可以把连接当作对象或者设备,池中又有许多已经建立的连接,访问
本来需要与数据库的连接的地方,都改为和池相连,池临时分配连接供访问使用,结果返回
后,访问将连接交还。
关键字词:Mysql,优化

上一篇:Jemalloc内存管理优化
下一篇:70个经典的 Shell 脚本