GNU Info

Info Node: (mysql.info)Compile and link options

(mysql.info)Compile and link options


Next: Memory use Prev: Server parameters Up: Optimizing the Server
Enter node , (file) or (file)node

How Compiling and Linking Affects the Speed of MySQL
----------------------------------------------------

Most of the following tests are done on Linux with the MySQL
benchmarks, but they should give some indication for other operating
systems and workloads.

You get the fastest executable when you link with `-static'.

On Linux, you will get the fastest code when compiling with `pgcc' and
`-O3'. To compile `sql_yacc.cc' with these options, you need about 200M
memory because `gcc/pgcc' needs a lot of memory to make all functions
inline. You should also set `CXX=gcc' when configuring MySQL to avoid
inclusion of the `libstdc++' library (it is not needed). Note that with
some versions of `pgcc', the resulting code will only run on true
Pentium processors, even if you use the compiler option that you want
the resulting code to be working on all x586 type processors (like AMD).

By just using a better compiler and/or better compiler options you can
get a 10-30 % speed increase in your application.  This is particularly
important if you compile the SQL server yourself!

We have tested both the Cygnus CodeFusion and Fujitsu compilers, but
when we tested them, neither was sufficiently bug free to allow MySQL
to be compiled with optimizations on.

When you compile MySQL you should only include support for the
character sets that you are going to use. (Option `--with-charset=xxx').
The standard MySQL binary distributions are compiled with support for
all character sets.

Here is a list of some measurements that we have done:
   * If you use `pgcc' and compile everything with `-O6', the `mysqld'
     server is 1% faster than with `gcc' 2.95.2.

   * If you link dynamically (without `-static'), the result is 13%
     slower on Linux.  Note that you still can use a dynamic linked
     MySQL library. It is only the server that is critical for
     performance.

   * If you strip your `mysqld' binary with `strip libexec/mysqld', the
     resulting binary can be up to 4 % faster.

   * If you connect using TCP/IP rather than Unix sockets, the result
     is 7.5% slower on the same computer. (If you are connection to
     `localhost', MySQL will, by default, use sockets).

   * If you connect using TCP/IP from another computer over a 100M
     Ethernet, things will be 8-11 % slower.

   * If you compile with `--with-debug=full', then you will loose 20 %
     for most queries, but some queries may take substantially longer
     (The MySQL benchmarks ran 35 % slower) If you use `--with-debug',
     then you will only loose 15 %.  By starting a `mysqld' version
     compiled with `--with-debug=full' with `--skip-safemalloc' the end
     result should be close to when configuring with `--with-debug'.

   * On a Sun SPARCstation 20, SunPro C++ 4.2 is 5 % faster than `gcc'
     2.95.2.

   * Compiling with `gcc' 2.95.2 for ultrasparc with the option
     `-mcpu=v8 -Wa,-xarch=v8plusa' gives 4 % more performance.

   * On Solaris 2.5.1, MIT-pthreads is 8-12% slower than Solaris native
     threads on a single processor. With more load/CPUs the difference
     should get bigger.

   * Running with `--log-bin' makes *[MySQL* 1 % slower.

   * Compiling on Linux-x86 using gcc without frame pointers
     `-fomit-frame-pointer' or `-fomit-frame-pointer -ffixed-ebp'
     `mysqld' 1-4% faster.

The MySQL-Linux distribution provided by MySQL AB used to be compiled
with `pgcc', but we had to go back to regular gcc because of a bug in
`pgcc' that would generate the code that does not run on AMD. We will
continue using gcc until that bug is resolved.  In the meantime, if you
have a non-AMD machine, you can get a faster binary by compiling with
`pgcc'.  The standard MySQL Linux binary is linked statically to get it
faster and more portable.


automatically generated by info2www version 1.2.2.9