优化是一项复杂的任务,因为它最终需要对整个系统的理解.当用你的系统/应用的小知识做一些局部优化是可能的时候,你越想让你的系统更优化,你必须知道它也越多. 因此,本章将试图解释并给出优化MySQL的不同方法的一些例子.但是记住总是有某些(逐渐变难)是系统更快的方法留着去做. 为了使一个系统更快的最重要部分当然是基本设计.你也需要知道你的系统将做这样的事情,那就是你的瓶颈. 最常见的瓶颈是:
磁盘寻道.磁盘花时间找到一个数据,用在1999年的现代磁盘其平均时间通常小于10ms,因此理论上我们能大约一秒寻道 1000 次.这个时间用新磁盘提高很慢并且很难对一个表优化.优化它的方法是将数据散布在多个磁盘上. 当磁盘在我们需要读数据的正确位置时,磁盘读/写.用1999年的现代,一个磁盘传输类似10-20Mb/s.这必寻道更容易优化,因为你能从多个磁盘并行地读. CPU周期.当我们读数据进内存时,(或如果它已经在那里)我们需要处理它以达到我们的结果.当我们有相对内存较小的表时,这是最常见的限制因素,但是用小表速度通常不是问题. 内存带宽.当CPU需要超出适合cpu缓存的数据时,缓存带宽就成为内存的一个瓶颈.这是对大多数系统的一个不常见的瓶颈但是你应该知道它. 10.2 系统/编译时和启动参数的调节我们以系统级的东西开始,因为这些决策的某一些很早就做好了.在其他情况下,快速浏览这部分可能就够了,因为它对大收获并不重要,但是有一个关于在这个层次上收获有多大的感觉总是好的. 使用的缺省OS确实重要!为了最大程度地使用多CPU,应该使用Solaris(因为线程工作得确实不错)或Linux(因为2.2本的核心又确实不错的SMP支持).而且在32位的机器上,Linux缺省有2G的文件大小限制.当新的文件系统被释出时( XFS ),希望这不久被修正. 因为我们没在很多平台上运行生产MySQL,我们忠告你在可能选择它前,测试你打算运行的平台.
其他建议:
如果你有足够的RAM,你能删除所有交换设备.一些操作系统在某些情况下将使用一个SWAP设备,即使你有空闲的内存. 使用--skip -locking的MySQL选项避免外部锁定.注意这将不影响MySQL功能,只要它仅运行在一个服务器上.只要在你运行myisamchk以前,记得要停掉服务器(或锁定相关部分).在一些系统上这个开关是强制的,因为外部锁定不是在任何情况下都工作.当用MIT-pthreads编译时,-- skip-locking选项缺省为打开(on),因为flock()没在所有的平台上被MIT-pthreads充分支持.唯一的情况是如果你对同一数据运行MySQL服务器(不是客户),你不能使用--skip-locking之时,否则对没有先清掉(flushing)或先锁定mysqld服务器的表上运行myisamchk.你仍然能使用LOCK TABLES/ UNLOCK TABLES,即使你正在使用--skip-locking.