(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