DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(mysql.info.gz) Compile and link options

Info Catalog (mysql.info.gz) Controlling optimizer (mysql.info.gz) Optimizing the Server (mysql.info.gz) Memory use
 
 7.5.4 How Compiling and Linking Affects the Speed of MySQL
 ----------------------------------------------------------
 
 Most of the following tests were performed on Linux with the MySQL
 benchmarks, but they should give some indication for other operating
 systems and workloads.
 
 You get the fastest executables when you link with `-static'.
 
 On Linux, you will get the fastest code when compiling with `pgcc' and
 `-O3'.  You need about 200MB memory to compile `sql_yacc.cc' with these
 options, 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, which is not needed. Note that
 with some versions of `pgcc', the resulting code will run only on true
 Pentium processors, even if you use the compiler option indicating that
 you want the resulting code to work on all x586-type processors (such
 as AMD).
 
 By just using a better compiler and better compiler options, you can
 get a 10-30% speed increase in your application.  This is particularly
 important if you compile the MySQL 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 enabled.
 
 The standard MySQL binary distributions are compiled with support for
 all character sets.  When you compile MySQL yourself, you should
 include support only for the character sets that you are going to use.
 This is controlled by the `--with-charset' option to `configure'.
 
 Here is a list of some measurements that we have made:
 
    * 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 dynamically linked
      MySQL library for your client applications. It is the server that
      is most critical for performance.
 
    * If you strip your `mysqld' binary with `strip mysqld', the
      resulting binary can be up to 4% faster.
 
    * For a connection from a client to a server running on the same
      host, if you connect using TCP/IP rather than a Unix socket file,
      performance is 7.5% slower. (On Unix, if you connect to the
      hostname `localhost', MySQL uses a socket file by default.)
 
    * For TCP/IP connections from a client to a server, connecting to a
      remote server on another host will be 8-11% slower than connecting
      to the local server on the same host, even for connections over
      100Mb/s Ethernet.
 
    * When running our benchmark tests using secure connections (all data
      encrypted with internal SSL support) performance was 55% slower
      than for unencrypted connections.
 
    * If you compile with `--with-debug=full', most queries will be 20%
      slower.  Some queries may take substantially longer; for example,
      the MySQL benchmarks ran 35% slower.  If you use `--with-debug'
      (without `=full'), the slowdown will be only 15%.  For a version
      of `mysqld' that has been compiled with `--with-debug=full', you
      can disable memory checking at runtime by starting it with the
      `--skip-safemalloc' option. The execution speed should then be
      close to that obtained when configuring with `--with-debug'.
 
    * On a Sun UltraSPARC-IIe, a server compiled with Forte 5.0 is 4%
      faster than one compiled with `gcc' 3.2.
 
    * On a Sun UltraSPARC-IIe, a server compiled with Forte 5.0 is 4%
      faster in 32-bit mode than in 64-bit mode.
 
    * Compiling with `gcc' 2.95.2 for UltraSPARC with the `-mcpu=v8
      -Wa,-xarch=v8plusa' options 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 or CPUs, the
      difference should be larger.
 
    * Compiling on Linux-x86 using `gcc' without frame pointers
      (`-fomit-frame-pointer' or `-fomit-frame-pointer -ffixed-ebp')
      makes `mysqld' 1-4% faster.
 
 Binary MySQL distributions for Linux that are provided by MySQL AB used
 to be compiled with `pgcc'. We had to go back to regular `gcc' due to a
 bug in `pgcc' that would generate 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
 make it faster and more portable.
 
Info Catalog (mysql.info.gz) Controlling optimizer (mysql.info.gz) Optimizing the Server (mysql.info.gz) Memory use
automatically generated byinfo2html