WEB开发网
开发学院数据库MySQL 从MySQL得到最大的优化性能 阅读

从MySQL得到最大的优化性能

 2007-11-11 16:42:49 来源:WEB开发网   
核心提示: ·MySQL(和PHP搭配之最佳组合) 时间函数用法 集合·图形化管理MySQL(和PHP搭配之最佳组合)更轻松·远程连接MySQL(和PHP搭配之最佳组合)资料·MySQL(和PHP搭配之最佳组合)学习点滴·MySQL(和PHP搭配之最佳组合)常
    ·MySQL(和PHP搭配之最佳组合) 时间函数用法 集合
    ·图形化管理MySQL(和PHP搭配之最佳组合)更轻松
    ·远程连接MySQL(和PHP搭配之最佳组合)资料
    ·MySQL(和PHP搭配之最佳组合)学习点滴
    ·MySQL(和PHP搭配之最佳组合)常见问题解答及技巧
    ·MySQL(和PHP搭配之最佳组合) 5.0 新特性教程 存储过程:第三
    ·在Linux 环境下安装 MySQL(和PHP搭配之最佳组合)
    ·MySQL(和PHP搭配之最佳组合) 常用命令
    ·如何安装MySQL(和PHP搭配之最佳组合) 5.0
    ·学MySQL(和PHP搭配之最佳组合)备份导入数据库手记

这里是我们做过的一些测量表:

如果你以-O6使用pgcc并且编译任何东西,MySQL(和PHP搭配之最佳组合)d服务器是比用gcc快11%(用字符串99的版本). 如果你动态地链接(没有-static),结果慢了13%.注意你仍能使用一个动态连接的MySQL(和PHP搭配之最佳组合)库.只有服务器对性能是关键的. 如果你使用TCP/IP而非Unix套接字,结果慢7.5%. 在一个Sun SPARCstation 10上,gcc2.7.3是比Sun Pro C++ 4.2快13%. 在Solaris 2.5.1上,在单个处理器上MIT-pthreads比带原生线程的Solaris慢8-12%.以更多的负载/cpus,差别应该变得更大. 由TcX提供的MySQL(和PHP搭配之最佳组合)-Linux的分发用pgcc编译并静态链接.

正如前面所述,磁盘寻道是一个性能的大瓶颈.当数据开始增长以致缓存变得不可能时,这个问题变得越来越明显.对大数据库,在那你或多或少地要随机存取数据,你可以依靠你将至少需要一次磁盘寻道来读取并且几次磁盘寻道写入.为了使这个问题最小化,使用有低寻道时间的磁盘. 为了增加可用磁盘轴的数量(并且从而减少寻道开销),符号联接文件到不同磁盘或分割磁盘是可能的. 使用符号连接这意味着你将索引/数据文件符号从正常的数据目录链接到其他磁盘(那也可以被分割的).这使得寻道和读取时间更好(如果磁盘不用于其他事情).见10.2.2.1 使用数据库和表的符号链接. 分割分割意味着你有许多磁盘并把第一块放在第一个磁盘上,在第二块放在第二个磁盘上,并且第 n块在第(n mod number_of_disks)磁盘上,等等.这意味着,如果你的正常数据大小于分割大小(或完美地排列过),你将得到较好一些的性能.注意,分割是否很依赖于OS和分割大小.因此用不同的分割大小测试你的应用程序.见10.8 使用你自己的基准.注意对分割的速度差异很依赖于参数,取决于你如何分割参数和磁盘数量,你可以得出以数量级的不同.注意你必须选择为随机或顺序存取优化. 为了可靠,你可能想要使用袭击RAID 0+1(分割+镜像),但是在这种情况下,你将需要2*N个驱动器来保存N个驱动器的数据.如果你有钱,这可能是最好的选择!然而你也可能必须投资一些卷管理软件投资以高效地处理它. 一个好选择是让稍重要的数据(它能再生)上存在RAID 0磁盘上,而将确实重要的数据(像主机信息和日志文件)存在一个RAID 0+1或RAID N磁盘上.如果因为更新奇偶位你有许多写入,RAID N可能是一个问题. 你也可以对数据库使用的文件系统设置参数.一个容易的改变是以noatime选项挂装文件系统.这是它跳过更新在inode中的最后访问时间,而且这将避免一些磁盘寻道.

你可以从数据库目录移动表和数据库到别处,并且用链接到新地点的符号代替它们.你可能想要这样做,例如,转移一个数据库到有更多空闲空间的一个文件系统. 如果MySQL(和PHP搭配之最佳组合)注意到一个表是一个符号链接,它将解析符号链接并且使用其实际指向的表,它可工作在支持realpath()调用的所有系统上(至少 Linux和Solaris支持realpath())!在不支持realpath()的系统上,你应该不同时通过真实路径和符号链接访问表!如果你这样做,表在任何更新后将不一致. MySQL(和PHP搭配之最佳组合)缺省不支持数据库链接.只要你不在数据库之间做一个符号链接,一切将工作正常.假定你在MySQL(和PHP搭配之最佳组合)数据目录下有一个数据库db1,并且做了一个符号链接db2指向db1:

shell&> cd /path/to/datadir

shell&> ln -s db1 db2

现在,对在db1中的任一表tbl_a,在db2种也好象有一个表tbl_a.如果一个线程更新db1.tbl_a并且另一个线程更新db2.tbl_a,将有问题. 如果你确实需要这样,你必须改变下列在“mysys/mf_format.c”中的代码:

if (!lstat(to,&stat_buff)) /* Check if it's a symbolic link */

if (S_ISLNK(stat_buff.st_mode) && realpath(to,buff))

把代码改变为这样:

if (realpath(to,buff))

上一页  1 2 

Tags:MySQL 得到 最大

编辑录入:coldstar [复制链接] [打 印]
赞助商链接