Updates/cleanup for Linux notes

parent b5c22730
...@@ -7213,6 +7213,20 @@ of function} warnings. These may be ignored. ...@@ -7213,6 +7213,20 @@ of function} warnings. These may be ignored.
@node Linux, Alpha-DEC-UNIX, SunOS, Source install system issues @node Linux, Alpha-DEC-UNIX, SunOS, Source install system issues
@subsection Linux Notes (All Linux Versions) @subsection Linux Notes (All Linux Versions)
The notes below regarding @strong{glibc} apply only to the situation
when you build @strong{MySQL}
yourself. If you are running Linux on an x86 machine, in most cases it is
much better for you to just use our binary. We link our binaries against
the best patched version of @strong{glibc} we can come up with and with the
best compiler options, in an attempt to make it suitable for a high-load
server. So if you read the text below, and are in doubt about
what you should do, try our binary first to see if it meets your needs, and
worry about your own build only after you have discovered that our binary is
not good enough. In that case, we would appreciate a note about it, so we
can build a better binary next time. For a typical user, even for setups with
a lot of concurrent connections and/or tables exceeding 2GB limit, our
binary in most cases is the best choice.
@strong{MySQL} uses LinuxThreads on Linux. If you are using an old @strong{MySQL} uses LinuxThreads on Linux. If you are using an old
Linux version that doesn't have @code{glibc2}, you must install Linux version that doesn't have @code{glibc2}, you must install
LinuxThreads before trying to compile LinuxThreads before trying to compile
...@@ -7270,71 +7284,90 @@ creation - which means it may take a long time to connect to @strong{MySQL} ...@@ -7270,71 +7284,90 @@ creation - which means it may take a long time to connect to @strong{MySQL}
multiple CPU systems, we have observed a gradual drop in query speed as multiple CPU systems, we have observed a gradual drop in query speed as
the number of clients increases. In the process of trying to find a the number of clients increases. In the process of trying to find a
solution, we have received a kernel patch from one of our users, who solution, we have received a kernel patch from one of our users, who
claimed it made a lot of difference for his site. We have done some claimed it made a lot of difference for his site. The patch is available here
limited testing in which the patch greatly improved the scalability of
@strong{MySQL}. The patch is available here
(@uref{http://www.mysql.com/Downloads/Patches/linux-fork.patch}). We have (@uref{http://www.mysql.com/Downloads/Patches/linux-fork.patch}). We have
done a rather extensive testing of this patch - Sasha Pachev has bravely put now done rather extensive testing of this patch on both development and
it on his development machine, and it now has run without problems for a year. production systems. It has significantly
Eventually, we have felt sufficiently confident about it that we installed it improved @code{MySQL} performance without causing any problems and we now
on several systems of one of our biggest customers. The patch has significantly recommend it to our users who are still running high-load servers on
improved @code{MySQL} performance without causing any problems. So it should 2.2 kernels. This issue has been fixed in the 2.4 kernel, so if you are not
be pretty safe. This issue has been fixed in the 2.4 kernel. satisfied with
the current performance of your system, rather than patching your 2.2 kernel,
We have also tested @strong{MySQL} on 2.4 kernel on a 2 CPU machine and it might be easier to just upgrade to 2.4, which will also give you a nice
SMP boost in addition to fixing this fairness bug.
We have tested @strong{MySQL} on the 2.4 kernel on a 2 CPU machine and
found @strong{MySQL} scales MUCH better - there was virtually no slowdown found @strong{MySQL} scales MUCH better - there was virtually no slowdown
on query throughput all the way up on query throughput all the way up
to 1000 clients. If your plan to set up a to 1000 clients, and @strong{MySQL} scaling factor ( computed as the ratio of
dedicated Linux SMP machine to run @strong{MySQL} under heavy load, we maximum throughput to the throughput with one client) was 180%.
recommend that you give 2.4 kernel a try! We are currently trying to collect We have observed similar results on a 4-CPU system - virtually no
some info on how well @code{MySQL} performs on 2.4 kernel on 4-way and 8-way slowdown as the number of
clients was increased up to 1000, and 300% scaling factor. So for a high-load
SMP server we would definitely recommend the 2.4 kernel at this point. We
have discovered that it is essential to run @code{mysqld} process with the
highest possible priority on the 2.4 kernel to achieve maximum performance.
This can be done by adding
@code{renice -20 $$} command to @code{safe_mysqld}. In our testing on a
4-CPU machine, increasing the priority gave 60% increase in throughput with
400 clients.
We are currently also trying to collect
more info on how well @code{MySQL} performs on 2.4 kernel on 4-way and 8-way
systems. If you have access such a system and have done some benchmarks, systems. If you have access such a system and have done some benchmarks,
please send a mail to @email{docs@@mysql.com} with the results - we will please send a mail to @email{docs@@mysql.com} with the results - we will
include them in the manual. include them in the manual.
The following paragraph is only relevant if you are using a glibc
version older than 2.2.2 (Note that if you are going to use MANY
connections to MySQL, you still need to change the STACK_SIZE and
PTHREAD_THREADS_MAX variables in glibc 2.2.2).
There is another issue that greatly hurts @strong{MySQL} performance, There is another issue that greatly hurts @strong{MySQL} performance,
especially on SMP systems. The old implementation of mutex in especially on SMP systems. The implementation of mutex in
LinuxThreads was also very bad for programs with many threads that only LinuxThreads in @strong{glibc-2.1} is very bad for programs with many
threads that only
hold the mutex for a short time. On an SMP system, ironic as it is, if hold the mutex for a short time. On an SMP system, ironic as it is, if
you link @strong{MySQL} against unmodified @strong{LinuxThreads}, you link @strong{MySQL} against unmodified @strong{LinuxThreads},
removing processors from the machine improves @strong{MySQL} performance removing processors from the machine improves @strong{MySQL} performance
in many cases. We have made a patch available for glibc 2.1, in many cases. We have made a patch available for @strong{glibc 2.1.3},
@uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch,linuxthreads-2.1-patch} @uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch,linuxthreads-2.1-patch}
and for glibc 2.2, to correct this behaviour.
@uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.2-patch,linuxthreads-2.2-patch}
to correct this behaveour. Please note that since there are so many With @strong{glibc-2.2.2}
versions of glibc floating around, the patch may not apply cleanly to @strong{MySQL} version 3.23.36 will use the adaptive mutex, which is much
yours, so some manual work may be required. better than even the patched one in @strong{glibc-2.1.3}. Be warned, however,
that under some conditions, the current mutex code in @strong{glibc-2.2.2}
overspins, which hurts @strong{MySQL} performance. The chance of this
condition can be reduced by renicing @code{mysqld} process to the highest
priority. We have also been able to correct the overspin behaviour with
a patch, available @uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch,here}. It combines the correction of overspin, maximum number of
threads, and stack spacing all in one. You will need to apply it in the
@code{linuxthreads} directory with
@code{patch -p0 </tmp/linuxthreads-2.2.2.patch}.
We hope it will be included in
some form in to the future releases of @code{glibc-2.2}. In any case, if
you link against @code{glibc-2.2.2} you still need to correct
@code{STACK_SIZE} and @code{PTHREAD_THREADS_MAX}. We hope that the defaults
will be corrected to some more acceptable values for high-load
@strong{MySQL} setup in the future, so that your own build can be reduced
to @code{./configure; make; make install}.
We recommend that you use the above patches to build a special static We recommend that you use the above patches to build a special static
version of @code{libpthread.a} and use it only for statically linking version of @code{libpthread.a} and use it only for statically linking
against @code{MySQL}. We know that the patch is safe for @code{MySQL} against @code{MySQL}. We know that the patches are safe for @code{MySQL}
and significantly improves its performance, but we cannot say anything and significantly improve its performance, but we cannot say anything
about other applications. If you link other applications against the about other applications. If you link other applications against the
patched version of the library, or build a patched shared version and patched version of the library, or build a patched shared version and
install it on your system, you are doing it at your own risk with regard install it on your system, you are doing it at your own risk with regard
to other applications that depend on @code{LinuxThreads}. to other applications that depend on @code{LinuxThreads}.
If you can't start @code{mysqld} or if @code{mysql_install_db} doesn't work, If you experience any strange problems during the installation of
please continue reading! This only happens on Linux system with problems in @strong{MySQL}, or with some common utilties hanging, it is very likely that
the LinuxThreads or @code{libc}/@code{glibc} libraries. There are a lot of they are either library or compiler related. If this is the case, using our
simple workarounds to get @strong{MySQL} to work! The simplest is to use the binary will resolve them.
binary version of @strong{MySQL} (not the RPM) for Linux x86. One nice
aspect of this version is that it's probably 10% faster than any version you
would compile yourself! @xref{Compile and link options}.
One known problem with the binary distribution is that with older Linux One known problem with the binary distribution is that with older Linux
systems that use @code{libc} (like RedHat 4.x or Slackware), you will get systems that use @code{libc} (like RedHat 4.x or Slackware), you will get
some non-fatal problems with hostname resolution. some non-fatal problems with hostname resolution.
@xref{Binary notes-Linux}. @xref{Binary notes-Linux}.
@code{myisamchk} hangs with @code{libc.so.5.3.12}. Upgrading to the newest
@code{libc} fixes this problem.
When using LinuxThreads you will see a minimum of three processes When using LinuxThreads you will see a minimum of three processes
running. These are in fact threads. There will be one thread for the running. These are in fact threads. There will be one thread for the
...@@ -7357,27 +7390,6 @@ that you also probably need to raise the @code{core file size} by adding ...@@ -7357,27 +7390,6 @@ that you also probably need to raise the @code{core file size} by adding
@code{ulimit -c 1000000} to @code{safe_mysqld} or starting @code{safe_mysqld} @code{ulimit -c 1000000} to @code{safe_mysqld} or starting @code{safe_mysqld}
with @code{--core-file-sizes=1000000}. @xref{safe_mysqld}. with @code{--core-file-sizes=1000000}. @xref{safe_mysqld}.
@c the stuff below is really out of date - hardly anybody uses it anymore
If you are using LinuxThreads and @code{mysqladmin shutdown} doesn't work,
you must upgrade to LinuxThreads Version 0.7.1 or newer.
If you are using RedHat, you might get errors like this:
@example
/usr/bin/perl is needed...
/usr/sh is needed...
/usr/sh is needed...
@end example
If so, you should upgrade your version of @code{rpm} to
@file{rpm-2.4.11-1.i386.rpm} and @file{rpm-devel-2.4.11-1.i386.rpm} (or later).
You can get the upgrades of libraries to RedHat Version 4.2 from
@uref{ftp://ftp.redhat.com/updates/4.2/i386}. Or
@uref{http://www.sunsite.unc.edu/pub/Linux/distributions/redhat/code/rpm/}
for other distributions.
If you are linking your own @strong{MySQL} client and get the error: If you are linking your own @strong{MySQL} client and get the error:
@example @example
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment