mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	Updates/cleanup for Linux notes
This commit is contained in:
		
							
								
								
									
										130
									
								
								Docs/manual.texi
									
									
									
									
									
								
							
							
						
						
									
										130
									
								
								Docs/manual.texi
									
									
									
									
									
								
							| @@ -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} | |||||||
| 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, | ||||||
|  | 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 also tested @strong{MySQL} on 2.4 kernel on a 2 CPU machine and | 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 | |||||||
| @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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 sasha@mysql.sashanet.com
					sasha@mysql.sashanet.com