DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(mysql.info) source-notes-linux

Info Catalog (mysql.info) binary-notes-linux (mysql.info) linux (mysql.info) linux-post-install
 
 2.12.1.3 Linux Source Distribution Notes
 ........................................
 
 The following notes regarding `glibc' apply only to the situation when
 you build MySQL yourself. If you are running Linux on an x86 machine,
 in most cases it is much better for you to use our binary. We link our
 binaries against the best patched version of `glibc' we can find and
 with the best compiler options, in an attempt to make it suitable for a
 high-load server. For a typical user, even for setups with a lot of
 concurrent connections or tables exceeding the 2GB limit, our binary is
 the best choice in most cases. After reading the following text, if you
 are in doubt about what to do, try our binary first to determine
 whether it meets your needs. If you discover that it is not good enough,
 you may want to try your own build. In that case, we would appreciate a
 note about it so that we can build a better binary next time.
 
 MySQL uses LinuxThreads on Linux. If you are using an old Linux version
 that doesn't have `glibc2', you must install LinuxThreads before trying
 to compile MySQL. You can obtain LinuxThreads from
 `http://dev.mysql.com/downloads/os-linux.html'.
 
 Note that `glibc' versions before and including version 2.1.1 have a
 fatal bug in `pthread_mutex_timedwait()' handling, which is used when
 `INSERT DELAYED' statements are issued. We recommend that you not use
 `INSERT DELAYED' before upgrading `glibc'.
 
 Note that Linux kernel and the LinuxThread library can by default
 handle a maximum of 1,024 threads. If you plan to have more than 1,000
 concurrent connections, you need to make some changes to LinuxThreads,
 as follows:
 
    * Increase `PTHREAD_THREADS_MAX' in
      `sysdeps/unix/sysv/linux/bits/local_lim.h' to 4096 and decrease
      `STACK_SIZE' in `linuxthreads/internals.h' to 256KB.  The paths
      are relative to the root of `glibc'. (Note that MySQL is not stable
      with 600-1000 connections if `STACK_SIZE' is the default of 2MB.)
 
    * Recompile LinuxThreads to produce a new `libpthread.a' library,
      and relink MySQL against it.
 
 Additional information about circumventing thread limits in
 LinuxThreads can be found at `http://www.volano.com/linuxnotes.html'.
 
 There is another issue that greatly hurts MySQL performance, especially
 on SMP systems. The mutex implementation in LinuxThreads in `glibc' 2.1
 is very poor for programs with many threads that hold the mutex only
 for a short time. This produces a paradoxical result: If you link MySQL
 against an unmodified LinuxThreads, removing processors from an SMP
 actually improves MySQL performance in many cases.  We have made a
 patch available for `glibc' 2.1.3 to correct this behavior
 (`http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch').
 
 With `glibc' 2.2.2, MySQL uses the adaptive mutex, which is much better
 than even the patched one in `glibc' 2.1.3. Be warned, however, that
 under some conditions, the current mutex code in `glibc' 2.2.2
 overspins, which hurts MySQL performance. The likelihood that this
 condition occurs can be reduced by re-nicing the `mysqld' process to
 the highest priority. We have also been able to correct the overspin
 behavior with a patch, available at
 `http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch'.  It
 combines the correction of overspin, maximum number of threads, and
 stack spacing all in one. You need to apply it in the `linuxthreads'
 directory with `patch -p0 </tmp/linuxthreads-2.2.2.patch'. We hope it is
 included in some form in future releases of `glibc' 2.2. In any case,
 if you link against `glibc' 2.2.2, you still need to correct
 `STACK_SIZE' and `PTHREAD_THREADS_MAX'. We hope that the defaults is
 corrected to some more acceptable values for high-load MySQL setup in
 the future, so that the commands needed to produce your own build can
 be reduced to `./configure; make; make install'.
 
 We recommend that you use these patches to build a special static
 version of `libpthread.a' and use it only for statically linking
 against MySQL. We know that these patches are safe for MySQL and
 significantly improve its performance, but we cannot say anything about
 their effects on other applications. If you link other applications that
 require LinuxThreads against the patched static version of the library,
 or build a patched shared version and install it on your system, you do
 so at your own risk.
 
 If you experience any strange problems during the installation of
 MySQL, or with some common utilities hanging, it is very likely that
 they are either library or compiler related. If this is the case, using
 our binary resolves them.
 
 If you link your own MySQL client programs, you may see the following
 error at runtime:
 
      ld.so.1: fatal: libmysqlclient.so.#:
      open failed: No such file or directory
 
 This problem can be avoided by one of the following methods:
 
    * Link clients with the -Wl,r/full/path/to/libmysqlclient.so flag
      rather than with -Lpath).
 
    * Copy `libmysqclient.so' to `/usr/lib'.
 
    * Add the pathname of the directory where `libmysqlclient.so' is
      located to the `LD_RUN_PATH' environment variable before running
      your client.
 
 If you are using the Fujitsu compiler (`fcc/FCC'), you may have some
 problems compiling MySQL because the Linux header files are very `gcc'
 oriented. The following `configure' line should work with `fcc/FCC':
 
      CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \
          -DCONST=const -DNO_STRTOLL_PROTO" \
      CXX=FCC CXXFLAGS="-O -K fast -K lib \
          -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE \
          -DCONST=const -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \
          '-D_EXTERN_INLINE=static __inline'" \
      ./configure \
          --prefix=/usr/local/mysql --enable-assembler \
          --with-mysqld-ldflags=-all-static --disable-shared \
          --with-low-memory
 
Info Catalog (mysql.info) binary-notes-linux (mysql.info) linux (mysql.info) linux-post-install
automatically generated byinfo2html