Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669862
  • 博文数量: 759
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4845
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 13:51
文章分类

全部博文(759)

文章存档

2011年(1)

2008年(758)

我的朋友

分类:

2008-10-27 13:58:18

  1、编译和连接如何影响MySQL的速度

  以下的大部分都是在Linux上用MySQL的基准套件来做的,不过它们对其他操作系统以及不同的工作量也是有一定启示的。

  用-static 连接的话,MySQL执行速度的速度是最快的。在Linux上,用 pgcc 和 -O3 编译的代码最快。大概需要200MB的内存加上这些选项来编译 `sql_yacc.cc`,因为 gcc/pgcc需要大量内存来编译所有的内部函数。想要配置MySQL以避免包含 libstdc++ 库就要加上 CXX=gcc 参数,不过这不是必须的。注意,使用某些版本的 pgcc 编译的结果代码只能在奔腾处理器上运行,尽管已经给编译器增加选项想让结果代码可以在所有的x586类型(如AMD)处理器上运行。

  如果使用比较好的编译器以及编译选项,应用程序大概能提高10-30%的速度。这在自己编译MySQL的时候尤为重要。我们已经Cygnus CodeFusion 和 Fujitsu编译器了,不过测试它们时,无论哪个都没有完全地解决bug以允许最佳方式编译MySQL。

  标准的MySQL二进制发布包已经编译支持所有的字符集了。如果想要自己编译MySQL,只需编译支持想要使用的字符集。可以在configure 时增加 --with-charset选项来控制。

  以下是我们已经做过的一些测量:

  如果使用 pgcc 编译任何东西时用-O6 选项,则 mysqld 会比用 gcc 2.95.2 编译快1%。

  如果使用动态连接(没用-static),则在Linux上结果会慢13%。注意,这仍然可以让你的应用程序客户端动态连接MySQL的库。这对提高服务器性能相当关键。

  如果做strip mysqld了,则结果会快4%。

  在同一个主机上连接到服务器,如果使用TCP/IP而不是Unix套接字文件,那么会慢7.5%(在Unix上,如果使用主机名localhost连接,MySQL默认使用套接字文件)。

  用TCP/IP连接时,直接连接本机服务器比连接不同主机上的服务器会慢8-11%,尽管是通过100Mb/s的以太网。

  运行基准测试时如果采用连接(所有的数据都用内部支持的SSL加密)则会比用不加密链接慢55%。

  编译时增加--with-debug=full选项,则大部分查询都会慢20%。一些查询可能会变得很慢;例如,MySQL的基准套件可能会慢35%。如果只增加选项--with-debug(没有=full),则只会慢15%。一个使用 --with-debug=full 选项编译后的mysqld 可以在启动时增加 --skip-safemalloc 选项来禁用运行时内存检查。则执行速度就会接近于增加--with-debug 参数时的情况。

  在 Sun UltraSPARC-IIe 上,用 Forte 5.0 编译的服务器会比用gcc 3.2 编译的快4%。在 Sun UltraSPARC-IIe 上,用 Forte 5.0编译的服务器在32位平台上比在64位平台上快4%。在 UltraSPARC 上用 gcc 2.95.2 编译,增加-mcpu=v8 -Wa,-xarch=v8plusa 选项的话会快4%。在 Solaris 2.5.1 上,MIT-pthreads 比 Solaris原始的单处理器线程慢8-12%。在不同的负载或者CPU下,这个差异会更大。在 Linux x86上用 gcc 编译,不增加帧指针(-fomit-frame-pointer 或 -fomit-frame-pointer -ffixed-ebp)选项的话会慢1-4%。

  MySQL AB提供的Linux上的MySQL二进制发布包通常用 pgcc 编译。不过我们又重新使用gcc 来编译了,因为用 pgcc 编译的代码不能在AMD上运行。我们会一直使用 gcc 来编译直到pgcc 的这个bug解决了。与此同时,如果你有非AMD机器,就可以用 pgcc 来编译以使MySQL更快。标准的MySQL Linux二进制包是静态连接的,这使得它更快且移植性更好。

[1]   

【责编:michael】

--------------------next---------------------

阅读(283) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~