服务器 频道

关于MySQL和Postgres的具体比较

  数值
  实际测试结果:
  
  并发连接 w/p:
  
  10 客户 - 10.27 页/秒333.69 kb/s
  
  20 客户 - 10.24 页/秒332.86 kb/s
  
  30 客户 - 10.25 页/秒333.01 kb/s
  
  40 客户 - 10.0 页/秒324.78 kb/s
  
  50 客户 - 10.0 页/秒324.84 kb/s
  
  75 客户 - 9.58 页/秒311.43 kb/s
  
  90 客户 - 9.48 页/秒307.95 kb/s
  
  100 客户 - 9.23 页/秒300.00 kb/s
  
  110 客户 - 9.09 页/秒295.20 kb/s
  
  120 客户 - 9.28 页/秒295.02 kb/s (2.2% 失败)
  
  <br>并发连接w/10% 插入:
  
  30 客户 - 9.97 页/秒324.11 kb/s
  
  40 客户 - 10.08 页/秒327.40 kb/s
  
  75 客户 - 9.51 页/秒309.13 kb/s
  
  <br>MySQL
  
  <br>并发连接测试 w/p:
  
  30 客户 - 16.03 页/秒 521.01 kb/s
  
  40 客户 - 15.64 页/秒 507.18 kb/s
  
  50 客户 - 15.43 页/秒 497.88 kb/s
  
  75 客户 - 14.70 页/秒 468.64 kb/s
  
  90 - mysql 崩溃
  
  110 - mysql 崩溃
  
  120 - mysql 崩溃
  
  并发连接测试w/op:
  10 客户 - 16.55 页/秒537.63 kb/s
  
  20 客户 - 15.99 页/秒519/51 kb/s
  
  30 客户 - 15.55 页/秒505.19 kb/s
  
  40 客户 - 15.46 页/秒490.01 kb/s 47 失败
  
  50 客户 - 15.59 页/秒482.24 kb/s 82 失败
  
  75 客户 - 17.65 页/秒452.08 kb/s 363 失败
  
  90 客户 - mysql 崩溃
  
  <br>并发连接 w/10% 插入运算:
  
  20 客户 - 16.37 页/秒531.79 kb/s
  
  30 客户 - 16.15 页/秒524.64 kb/s
  
  40 客户 - 22.04 页/秒453.82 kb/sec 378 失败
  
  我觉得测试结果中最有意思的事情是观察没有出错情况下已经装入运行的Postgres能负载多少。实际上,Postgres在没有错误的情况下负载好像要比MySQL高3倍。MySQL在负有40-50个并发连接时开始失常,而在没有其它影响的情况下,Postgres能使120个并发连接运行自如。我的猜测是:如果有足够的内存与够快的CPU,Postgres能够正常负载的远远不止120个并发连接。
  
  表面上看,这显然是Postgres的一个巨大的胜利,但是如果你仔细观察一下更多细节的测试结果,可以发现Postgres生成每页的时间要长2-3倍,所以它需要扩展负载至少2-3倍则刚好能与MySQL打成平手。所以按照不出错误的情况下,两者并发生成尽可能多的页,则他们之间几乎没有什么差别。按照某一时刻生成一页的情况看,MySQL确实快2-3倍。
  
  另外一个有趣的事情是:在以上叙述的"10%插入运算"的测试中,MySQL在分解运算方面快一些。研究表明,当插入运算操作发生时,MySQL锁定整个表,而Postgres有一个美妙的"better than row-level locking"的机制。这个不同很快引起了MySQL并发连接的堆积,从而导致崩溃。同样的,如果你正在从数据库中进行大量的选中操作,而另外的进程正在对表进行插入操作。Postgres可以完全地不受干扰,而MySQL会堆积连接直到像纸牌做的房子一样崩溃。
  
  你会发现在PHP中的稳定的连接并不有助于MySQL多少,相反却明显地有助于Postgres。实际上,其于稳定的连接的Postgres测试要快30%。这就告诉我们,Postgres在开放性连接与确认进程上需要占用大量的系统开销。其中有一些是Linux的错误和它的和僵硬的进程安排。尽管如此,MySQL并不再乎你如何看待它。
  
0
相关文章