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 obtain the fastest executables when you link with
-static
.
On Linux, it is best to compile the server with
pgcc
and -O3
. You need
about 200MB memory to compile sql_yacc.cc
with these options, because gcc or
pgcc needs a great deal 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 binary runs 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 using a better compiler and compilation options, you can obtain a 10-30% speed increase in applications. This is particularly important if you compile the MySQL server yourself.
When we tested both the Cygnus CodeFusion and Fujitsu compilers, 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 is 8-11% slower than connecting to a 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 with unencrypted connections.
If you compile with --with-debug=full
,
most queries are 20% slower. Some queries may take
substantially longer; for example, the MySQL benchmarks run
35% slower. If you use --with-debug
(without =full
), the speed decrease is
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 options -mcpu=v8
-Wa,-xarch=v8plusa
gives 4% better 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 binaries that do 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 build a faster binary by compiling with
pgcc
. The standard MySQL Linux binary is
linked statically to make it faster and more portable.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.