网络编程
位置:首页>> 网络编程>> 数据库>> MySQL数据库磁盘优化

MySQL数据库磁盘优化

作者:佚名 来源:IT168.com 发布时间:2008-11-24 17:29:00 

标签:

磁盘搜索是性能的很大瓶颈。这个问题在数据大量增长以至于无法使用有效的缓存时尤为明显。或多或少随即访问大数据库时,就必然会有至少一次磁盘搜索来读数据,两次磁盘搜索来写数据。最小化这个问题的办法就是降低磁盘搜索次数。

增加有效磁盘马达数量(这能减少搜索时的开销)或者将不同的文件链接到不同的磁盘上又或者分盘:

使用符号链接

意思是,把 MyISAM 表的索引文件和/或数据文件从数据目录下通常的地方链接到其他磁盘上(这也是分盘)。如果这个磁盘没有其他用途的话,这对读写次数都比较好。详情请看"7.6.1 Using Symbolic Links"。

分盘

如果有好几个磁盘,就把第一个区块放在第一个磁盘,把第二个区块放在第二个磁盘,以此类推。这意味着正常的数据大小比分盘后的数据小(或者完全一样),这能获得更好性能。分盘完全依赖于操作系统以及分盘的大小,因此要用不同的分盘大小基准测试应用程序。详情请看"7.1.5 Using Your Own Benchmarks"。基准测试的速度的不同完全依赖于分盘大小。依赖分盘设置参数以及磁盘数量,会得到大量不同的测量结果。必须随机或者顺序选择优化方法。

可能会为了可靠性采用 RAID 0+1,这时,就必须用 2*N 个驱动去来保存 N 个驱动器上的数据。如果有足够的内存这可能是最好的方法。不过,这也需要使用卷管理软件来有效地管理数据。

另一个好办法是RAID的级别根据数据的重要性而定。例如,把能重新生成的有点重要的数据保存在RAID 0磁盘上,把很重要的数据如主机信息日志等保存在RAID 0+1或者RAID N磁盘上。RAID N在有很多个写入时可能会有问题,因为会同时请求更新同一个字节位。

在Linux上,可以用 hdparm 来配置磁盘接口以获得更好的性能(在负载下高达100%也不是不可能的)。以下 hdparm 配置选项对MySQL就很合适,对其他应用程序可能也不错:

hdparm -m 16 -d 1

注意,当使用这个命令之后性能和可靠性会依赖硬件,因此我们强烈建议在使用 hdparm 后一定要做测试。请查阅 hdparm 的手册。如果没有正确使用 hdparm,则可能导致文件系统冲突,所以在试验之前备份一下。

还可以在数据库使用的文件系统上设置其参数:如果无需知道文件的最后访问时间(这对数据库系统没用),则在挂载文件系统时使用 -o noatime 选项。这就会略过更新文件系统节点的最后访问时间,也就减少了磁盘搜索。在很多操作系统上,可以在挂载文件系统是使用 -o async 选项以异步更新它。如果你的机器相当的稳定,这会带来性能提升但可靠性并没牺牲多少(默认只能在Linux上这样用)。

1、使用符号链接

可以把数据表或者数据库移动到别的目录下,然后用符号链接到新的位置来代替。你可能想这么做,例如,想要把表分布到不同的磁盘上以提高系统速度,就把它们移动到有更多剩余空间的磁盘上。

建议只是把数据库链接到其他磁盘上,数据表的链接是最后的选择。

1.1 在 Unix 上符号链接数据库

在Unix上,给数据库做符号链接的方法是先在其他磁盘上创建一个目录,然后再把它链接到MySQL数据文件目录下。

shell> mkdir /dr1/databases/test

shell> ln -s /dr1/databases/test /path/to/datadir

MySQL不支持把一个目录链接成多个数据库。只要没有在数据库间做符号链接,那么它就没问题。假使在MySQL数据文件目录下已经有一个数据库 db1 了,然后把 db1 链接到 db2 :

shell> cd /path/to/datadir

shell> ln -s db1 db2

现在,在 db1 中的表 tbl_a,也会在 db2 中出现。如果有一个客户端要更新 db1.tbl_a 而另一个要更新 db1.tbl_a,这时就会出问题了。

如果确实需要这么做,那么就修改一个源文件。要修改的文件根据MySQL版本不同而不同。MySQL 4.0或更新,在 `mysys/my_symlink.c' 文件中找到以下语句:

if (!(MyFlags & MY_RESOLVE_LINK) ||

(!lstat(filename,&stat_buff) && S_ISLNK(stat_buff.st_mode)))

MySQL 4.0以前,在 `mysys/mf_format.c' 文件中找到如下语句:

if (flag & 32 || (!lstat(to,&stat_buff) && S_ISLNK(stat_buff.st_mode)))

然后把这个语句改成:

if (1)

在Windows上,在编译MySQL时使用选项 -DUSE_SYMDIR 就能内置支持目录符号链接。这可以让你把不同的数据库放到不同的磁盘上。

1.2 在 Unix 上符号链接数据表

0
投稿

猜你喜欢

  • ORCLE数据库备份策略 1.通过使用exp和imp命令实现数据库导出和导入。 有三种模式: a. 用户模式: 导出(导入)用户所有对象以及
  • 因为外贸网站,禁止同行抄袭,所以防止中国ip访问访问,访问的时候有密码提示,这样的代码如何写.请给一个提示.或者有好的代码,请分享下。 &n
  • 1、 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务。 2、 开始->程序->Oracle - OraHome81-
  • 分页浏览功能是常见的Web应用功能,对于MySQL数据库来说可以很轻松的使用limit语句实现分页,而对于SQL Server数据库来说,常
  • 1、选取最适用的字段属性MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表
  • 数组去重复和数组排序'数组名次 Function Sort(ary,stra) KeepChecking =&n
  • 现在很多朋友都不止一个账户,不止一个密码。忘记账户名、密码,或账户名、密码输入错误也就难免啦。每当这个时候,你是否和我一样会有小小的焦虑产生
  • object.OpenTextFile(filename[, iomode[, create[, format]]]) 参数 object
  • 现状≠将来?程序员做设计本身就很悲哀,纠结于客户与坚持之间就更是如此。无论我今后的路会怎么走,我想始终不变的事情就是与客户博弈了。无论是放弃
  • 作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01
  • 到目前为止,我们连接的都是两张不同的表,那么能不能对一张表进行自我连接呢?答案是肯定的。有没有必要对一张表进行自我连接呢?答案也是肯定的。
  • 以前看过有人转换过的,当时仅仅惊叹了一下,就过去了,没有记下来,直至于用到的时候呢,开始到处找,找来找去都没有找不到痕迹了,心里也就郁郁寡欢
  • 简单的XML操作:XML文件创建把下面的代码复制到按钮事件中编译执行后可在相应物理路径中产生Pos.xml文件XmlTextWriter x
  • 用在产品内容展示的页面上,给产品图片加上提示工具条,鼠标移动图片上即可看到效果,效果还是不错的:带黑白效果和放大图片效果(by misshj
  • 哎~工作忙死了!!!!!!今天在百度老年看到一个手写输入法,颇感新鲜。so把其框下!请不要用在商业用途,学习之用,版权百度所有。看代码!注:
  • 把程序重新写了一遍,日期下拉选择器,可自定义日期范围。使用了一个技巧获取指定月份的天数。演示页面:DateSelector.htm 程序代码
  • 作为一名网站开发WEB前端工程师,对自己开发的网站项目应该尽可能地对其性能进行优化,现在互联网上搜索到的网站性能优化多是翻译转载自 Yaho
  • javascript作为一个动态语言,动态解析脚本的方法非常多,如万恶又万能的eval,低调的Function,IE独占的execScrip
  • 在html 5增加了新元素header、footer,测试过发现IE不能解析html 5新增的元素。代码如下:<!DOCTYPE&nb
  • 当地址栏没有参数"id"时: 代码如下:Request.QueryString["ID"] == n
手机版 网络编程 asp之家 www.aspxhome.com