所有关注MySQL的朋友们一定还记得,在今年4月份的时候曾经发生了一件大事:Oracle收购Sun,而作为Sun之前收购的资产,原本是Oracle数据库威胁的MySQL也被Oracle收购。相信当时有非常多的朋友谈论到了MySQL的前途。那么现在,我们就需要做一些事情,来让MySQL的前途更加明确一点。欧盟一直没有同意Oracle与Sun的并购案原因之一就是对Oracle收购MySQL之后,MySQL的开源是否能够继续得到保证。现在我们看到,Oracle为了让欧盟能够通过并购案,已经准备将MySQL放置在这次并购案之外-成立新的实体来管理MySQL,因为Oracle与MySQL的关系,同时Oracle收购8个月以来一直未对MySQL的未来作出一定承诺,所以我和非常多的MySQL用户一样,会担心MySQL的前途。不知道你是否也担心呢?如果也担心的话,可以看看这个《Help saving MySQL》(翻墙进入),然后决定在12.19号之前是否发送一个邮件,并通知给你周围使用MySQL数据库的朋友们,让他们也参与进来,大家一起为MySQL的将来而努力。
Posts Tagged ‘MySql’
在几乎是与Oracle宣布收购SUN的同时,MySQL团队宣布发布MySQL5.4版本,按照官方文档:A quick look at MySQL 5.4里写的,MySQL 5.4并没有带来像Falcon引擎这样大的改进,但在MySQL可扩展性和更快的查询速度方面做出了不少改进:
1、可伸缩性能的提升。支持InnoDB存储引擎扩展至16路x86服务器和64路CMT服务器,性能提升了一倍。
2、子查询和JOIN的性能提升。这点也是这次系列升级中,我最关注的部分。在下面这条SQL语句中,官方文档给出的性能提升相当可观。
SQL代码
SELECT COUNT(l_orderkey) FROM lineitem
WHERE l_linenumber=1 AND
l_orderkey IN
(SELECT o_orderkey FROM orders
WHERE o_totalprice > 1000 AND
o_custkey IN
(SELECT c_custkey FROM customer
WHERE c_address LIKE ’Le%’));
Time
Number of Reads
MySQL 5.0/5.1
12 Minutes
9,000,000
MySQL 5.4
1.8 seconds
153,000
SubQuery也正是我前些天遇到问题的语句,原来版本中(我使用的是5.0),MySQL无法对SubQuery实现优化,导致前端应用中速度特别慢。
而同样一条JOIN查询,时间则由原来的4 Minutes 15.39 secs提高到44.41 seconds,这个提升,新查询只用了原时间的17%左右。按照文档里的说法,这个性能的提升等正式版本发布的时候,不仅限于InnoDB引擎,而是所有引擎均。
其他的都是现在没有特别关注的,比如:改进了存储过程,完善了prepared statements等。
期待,过几天有时间了,Down个MySQL 5.4来试试看。到时再把实测结果发出来分享一下。
Amoeba (阿米巴, 就是变形虫的意思) 是陈思儒开发的开源软件项目。软件设计目标 (分布式数据库 Proxy) 应该是参考了 MySQL Proxy 的设计思路,版本的更新也挺快。
作者现在把 Amoeba 定义为一个框架,在其下面已经有 Amoeba for MySQL 与 Amoeba for Aladdin 两个产品了。
If you use pgcc and compile everything with -O6, the mysqld server is 1% faster than with gcc 2.95.2.
If you link dynamically (without -static), the result is 13% slower on Linux. Note that you still can use a dynamically linked MySQL library for your client applications. It is the server that [...]
cd /usr/ports/databases/mysql51-server
#编译安装(FreeBSD默认不带入所有字符集支持,需要声明打开)
make WITH_XCHARSET=all install clean
或自定义参数:
#make WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes WITHOUT_INNODB=yes install clean
rehash
#复制配置文件(#服务器内存4G,但是与apache在一起):
cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf
#设置随机启动:
vi /etc/rc.conf
mysql_enable="YES"
#初始化:
/usr/local/bin/mysql_install_db –user=mysql
#更改数据库权限(若所有者不是mysql):
chown -R mysql /var/db/mysql/
#立即启动:
/usr/local/bin/mysqld_safe -user=mysql &
#修改mysql root密码:
/usr/local/bin/mysqladmin -u root password ‘newpasswd’
#测试:
mysql -u root -p
mysql> show databases;
#启动/重启/停止mysqld
/usr/local/etc/rc.d/mysql-server start (等于/usr/local/bin/mysqld_safe -user=mysql &)
/usr/local/etc/rc.d/mysql-server restart
/usr/local/etc/rc.d/mysql-server stop
# end
(本文是Monty在O’Reilly Open Source Convention 2000大会上的演讲)
MySQL的优化(本文是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%。在Linux上,用async (默认)和noatime挂载磁盘(mount)。对于某些特定应用,可以对某些特定表使用内存磁盘,但通常不需要。
——————————————————————————–
四、优化操作系统
不要交换区。如果内存不足,增加更多的内存或配置你的系统使用较少内存。不要使用NFS磁盘(会有NFS锁定的问题)。增加系统和MySQL服务器的打开文件数量。(在safe_mysqld脚本中加入ulimit -n #)。增加系统的进程和线程数量。如果你有相对较少的大表,告诉文件系统不要将文件打碎在不同的磁道上(Solaris)。使用支持大文件的文件系统(Solaris)。选择使用哪种文件系统。在Linux上的Reiserfs对于打开、读写都非常快。文件检查只需几秒种。
——————————————————————————–
五、选择应用编程接口
PERL可在不同的操作系统和数据库之间移植。适宜快速原型。应该使用DBI/DBD接口。PHP比PERL易学。使用比PERL少的资源。通过升级到PHP4可以获得更快的速度。CMySQL的原生接口。较快并赋予更多的控制。低层,所以必须付出更多。C++较高层次,给你更多的时间来编写应用。仍在开发中ODBC运行在Windows和Unix上。几乎可在不同的SQL服务器间移植。较慢。MyODBC只是简单的直通驱动程序,比用原生接口慢19%。有很多方法做同样的事。很难像很多ODBC驱动程序那样运行,在不同的领域还有不同的错误。问题成堆。Microsoft偶尔还会改变接口。不明朗的未来。(Microsoft更推崇OLE而非ODBC)ODBC运行在Windows和Unix上。几乎可在不同的SQL服务器间移植。较慢。MyODBC只是简单的直通驱动程序,比用原生接口慢19%。有很多方法做同样的事。很难像很多ODBC驱动程序那样运行,在不同的领域还有不同的错误。问题成堆。Microsoft偶尔还会改变接口。不明朗的未来。(Microsoft更推崇OLE而非ODBC)JDBC理论上可在不同的操作系统何时据库间移植。可以运行在web客户端。Python和其他可能不错,可我们不用它们。
——————————————————————————–
六、优化应用
应该集中精力解决问题。在编写应用时,应该决定什么是最重要的:速度操作系统间的可移植性SQL服务器间的可移植性使用持续的连接。.缓存应用中的数据以减少SQL服务器的负载。不要查询应用中不需要的列。不要使用SELECT [...]

RSS
Sina微博
twitter