*****************************************************************************
本文由正泰linux http://linux-down.kmip.net 搜集,整理,如需转载,请注明出处!
本站有大量的linux电子教程,软件,技术文档,欢迎大家访问!站长阿泰qq:253222170
******************************************************************************
(本文是monty在o\'reilly open source convention 2000大会上的演讲)
一、我们可以且应该优化什么?
硬件
操作系统/软件库
sql服务器(设置和查询)
应用编程接口(api)
应用程序
--------------------------------------------------------------------------------
二、优化硬件
如果你需要庞大的数据库表(>2g),你应该考虑使用64位的硬件结构,像alpha、sparc或即将推出的ia64。因为mysql内部使用大量64位的整数,64位的cpu将提供更好的性能。
对大数据库,优化的次序一般是ram、快速硬盘、cpu能力。
更多的内存通过将最常用的键码页面存放在内存中可以加速键码的更新。
如果不使用事务安全(transaction-safe)的表或有大表并且想避免长文件检查,一台ups就能够在电源故障时让系统安全关闭。
对于数据库存放在一个专用服务器的系统,应该考虑1g的以太网。延迟与吞吐量同样重要。
--------------------------------------------------------------------------------
三、优化磁盘
为系统、程序和临时文件配备一个专用磁盘,如果确是进行很多修改工作,将更新日志和事务日志放在专用磁盘上。
低寻道时间对数据库磁盘非常重要。对与大表,你可以估计你将需要log(行数)/log(索引块长度/3*2/(键码长度 + 数据指针长度))+1次寻到才能找到一行。对于有500000行的表,索引mediun int类型的列,需要log(500000) / log(1024/3*2/(3 + 2))+1=4次寻道。上述索引需要500000*7*3/2=5.2m的空间。实际上,大多数块将被缓存,所以大概只需要1-2次寻道。
然而对于写入(如上),你将需要4次寻道请求来找到在哪里存放新键码,而且一般要2次寻道来更新索引并写入一行。
对于非常大的数据库,你的应用将受到磁盘寻道速度的限制,随着数据量的增加呈n log n数据级递增。
将数据库和表分在不同的磁盘上。在mysql中,你可以为此而使用符号链接。
条列磁盘(raid 0)将提高读和写的吞吐量。
带镜像的条列(raid 0+1)将更安全并提高读取的吞吐量。写入的吞吐量将有所降低。
不要对临时文件或可以很容易地重建的数据所在的磁盘使用镜像或raid(除了raid 0)。
在linux上,在引导时对磁盘使用命令hdparm -m16 -d1以启用同时读写多个扇区和dma功能。这可以将响应时间提高5~50%。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器