阳光男孩

Never give up!

Entries Tagged ‘数据库’

教你五招,快速提升MySQL可扩展性

1顶一下在可扩展性方面,客户的要求变得越来越多,功能列表上经常会出现20条、50条甚至多达100多条要求,但总的来说,我们可以把它们缩短为五个大类,通过五条途径来解决可扩展性问题: 1. 调整查询操作 询进行优化能够让你付出最少的精力就得到最多的成果。将查询功能完善的发挥出来,达到业务需求,不会被过多的流量和过重的载荷压倒。这就是为什么我们经常看见客户碰到的麻烦越来越多,随着他...[阅读全文]

1
顶一下

在可扩展性方面,客户的要求变得越来越多,功能列表上经常会出现20条、50条甚至多达100多条要求,但总的来说,我们可以把它们缩短为五个大类,通过五条途径来解决可扩展性问题:

1. 调整查询操作

询进行优化能够让你付出最少的精力就得到最多的成果。将查询功能完善的发挥出来,达到业务需求,不会被过多的流量和过重的载荷压倒。这就是为什么我们经常看见客户碰到的麻烦越来越多,随着他们网站的访问量越来越大,可扩展性的挑战也变得越来越严重,这就是问题的所在。对网站角落里那些不常用的页面做查询优化是并不必要的,那些页面并不会收到真实世界的流量。根据反映对网络应用做一定的调整是很普遍的做法,而且效果很好。

查询优化需要启用缓慢查询日志并且不断观察。使用mk-query-digest这个Maatkit套件中的强大工具来分析日志,而且要确定设置了log_queries_not_using_indexes标签。一旦你发现某个查询严重占用资源,那就要优化它。使用EXPLAIN解释机制,使用profiler,观察索引的使用情况,创建失踪的索引,理解它是怎么进行添加和排序的。

2.使用Master-Master复制

ster-Master的active-passive复制模式,或者称为循环复制,不仅能带来高可用性,也能够带来高度的可扩展性。这是因为你能够即刻给你的应用分配到一块只读的从属盘。许多网络应用都按照80/20的规律来分割,80%的活动用来进行读取或SELECT,剩下的分配给INSERT和UPDATE。配置你的应用或者进行重新架构,把读取需要的流量发送到从盘,这样做是可行的,这种类型的横向可扩展能力可以进一步延伸,在必要时能够附加更多块只读从盘。

3. 使用存储

这听起来是很基础的东西,也很直接,但是经常会被忽视,你至少应该确认设置了这些:

 innodb_buffer_pool_size
 key_buffer_size (MyISAM索引缓存)
 query_cache_size – 使用大型SMP时需要小心
 thread_cache & table_cache
 innodb_log_file_size & innodb_log_buffer_size
 sort_buffer_size, join_buffer_size, read_buffer_size, read_rnd_buffer_size
 tmp_table_size & max_heap_table_size

4. 磁盘读取的RAID

数据库下面是什么?不知道吗,请找出来。你是在用RAID 5吗?这对于性能来说可是一个巨大的阻碍。RAID5的插入和更新操作速度很慢,而且如果你丢失了一块硬盘,RAID 5在重建时几乎无能为力。RAID 5实在是太慢了,那么应该用什么代替它呢?用RAID 10做镜像和分段,这就可以充分利用你的服务器或机箱里的所有硬盘了。即使你的内存能够容纳下整个数据库,依然需要对硬盘进行许多读取操作。为什么呢?因为比如排序操作需要重新安排行列,群组和联接等等也一样,还有添加交易日志等等这些都是磁盘I/O操作。

5. 调整Key参数

另外,有些附加的参数也可以用来提高性能:

innodb_flush_log_at_trx_commit=2

它可以极大的提升insert和update的速度,只是在清除innodb日志缓冲区时有点偷懒。你可以对它多做些研究,但大多数情况下是非常值得推荐的。

innodb_file_per_table

innodb开发就像Oracle,存储方面使用的是tablespace模式。显然内核开发者们做的并不完善,因为使用单独tablespace的默认设置就会出现性能瓶颈。这个参数设置可以帮助innodb为每个表创建tablespace和数据文件,就像MyISAM所做的一样。

Comments (5)

MySQL和SQL Server到底选择谁?

0顶一下对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。 除了在显而易见的软件价格上的区别之外,这两个产品还有什...[阅读全文]

0
顶一下

对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。

除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。

根本的区别是它们遵循的基本原则

二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。

发行费用:MySQL不全是免费,但很便宜

当提及发行的费用,这两个产品采用两种绝然不同的决策。对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。学校或非赢利的企业可以不考虑这一附加的费用。

性能:先进的MySQL

纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM 数据库与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL作为后台数据库。

当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。

这两者数据库都能够在.NET或J2EE下运行正常,同样,都能够利用RAID。

安全功能

MySQL有一个用于改变数据的二进制日志。因为它是二进制,这一日志能够快速地从主机上复制数据到客户机上。即使服务器崩溃,这一二进制日志也会保持完整,而且复制的部分也不会受到损坏。

在SQL服务器中,你也可以记录SQL的有关查询,但这需要付出很高的代价。

安全性

这两个产品都有自己完整的安全机制。只要你遵循这些安全机制,一般程序都不会出现什么问题。这两者都使用缺省的IP端口,但是有时候很不幸,这些IP也会被一些黑客闯入。当然,你也可以自己设置这些IP端口。

恢复性:先进的SQL服务器

恢复性也是MySQL的一个特点,这主要表现在MyISAM配置中。这种方式有它固有的缺欠,如果你不慎损坏数据库,结果可能会导致所有的数据丢失。然而,对于SQL服务器而言就表现得很稳键。SQL服务器能够时刻监测数据交换点并能够把数据库损坏的过程保存下来。

根据需要决定你的选择

对于这两种数据库,如果非要让我说出到底哪一种更加出色,也许我会让你失望。以我的观点,任一对你的工作有帮助的数据库都是很好的数据库,没有哪一个数据库是绝对的出色,也没有哪一个数据库是绝对的差劲。我想要告诉你的是你应该多从你自己的需要出发,即你要完成什么样的任务?而不要单纯地从软件的功能出发。

如果你想建立一个.NET服务器体系,这一体系可以从多个不同平台访问数据,参与数据库的管理,那么你可以选用SQL服务器。如果你想建立一个第三方站点,这一站点可以从一些客户端读取数据,那么MySQL将是最好的选择。

 

Comments (8)

MySQL分支双雄斗“钢铁侠”甲骨文

1顶一下         MySQL争夺战已经结束,甲骨文高管正在对开源人士展开“示爱”攻势,但曾经的MySQL精英们也已经重整旗鼓,通过MySQL数据库分支的方式来赢得了数据库管理员和开发者的“芳心”。   在上月举行的MySQL大会上,MySQL之父迈克尔·韦德纽斯(Michael Widenius)和大名鼎鼎的MySQL架构师布莱恩·阿克尔(Brian Aker)分别发表演讲,全力推广他们各自的MySQL分支数据库,他们坚信...[阅读全文]

1
顶一下

         MySQL争夺战已经结束,甲骨文高管正在对开源人士展开“示爱”攻势,但曾经的MySQL精英们也已经重整旗鼓,通过MySQL数据库分支的方式来赢得了数据库管理员和开发者的“芳心”。

  在上月举行的MySQL大会上,MySQL之父迈克尔·韦德纽斯(Michael Widenius)和大名鼎鼎的MySQL架构师布莱恩·阿克尔(Brian Aker)分别发表演讲,全力推广他们各自的MySQL分支数据库,他们坚信任何一家公司都不可能成为MySQL开发或支持服务的唯一提供商。

  他们明确的表达了支持MySQL的开发商和公司应该多元化的观点,另外他们认为,MySQL分支数据库的所有者是那些对代码感兴趣的开发者,而不是某一家利益驱动的企业。

  可笑的是MySQL现在已经归数据库巨头甲骨文所有,在本次MySQL大会上该数据库巨头被列为“创始赞助商”。几天前甲骨文首席软件架构师爱德华·斯凯文(Edward Screven)试图取得MySQL用户的信任,声称他们的数据库非常安全,因为甲骨文向用户提供一套完整的支持组合服务。

  斯凯文承诺,未来计划将MySQL嵌入到甲骨文的软件架构和管理产品中去。然而这可能有悖于开源人士所渴望的独立性和开放性原则。

图1:甲骨文自称为软件硬件两手抓的英雄
  很明显,甲骨文每年一度的OpenWorld大会未能打动数据库管理员和开发者的“芳心”,斯凯文的演讲结束后,只得到了MySQL社区关系经理科林·查理斯(Colin Charles)礼貌性的鼓掌。

  24小时后,MySQL之父和MySQL顶级架构师抛出了与斯凯文相反的观点:甲骨文推动社区发展是一件好事,但单一架构和单一供应商不利于创新。独立性是他们远离甲骨文的原因,也是他们吸引用户和潜在代码贡献者的制胜法宝。

  这些MySQL名人的做法对甲骨文来说是一种考验,将验证甲骨文与MySQL社区配合和容忍不同意见的程度,甲骨文投入时间和金钱召开的MySQL大会,是否允许批评家和分支MySQL领导者自由发表自己的观点。

  斯凯文曾含蓄的表示,甲骨文可以为客户提供全面解决方案,并引用《钢铁侠2》作为其广告宣传。据甲骨文的《钢铁侠2》网站显示,“人与机器的无缝结合造就了战无不胜的英雄钢铁侠,而甲骨文业界领先的软件和硬件的无缝整合,也将带来任何竞争对手所不具备的完整IT架构。”甲骨文软件和Sun的Solaris系统、服务器和存储产品的融合,可以实现“业界最佳”和“领先优势”。

 MySQL分支双雄

  阿克尔郑重承诺,他不会围绕自己的MySQL分支数据库成立“Drizzle公司”。甲骨文收购Sun公司后,阿克尔选择了离开,他表示自己不希望创建一个公司来妨碍创新。

  他表示,“有人会提供Drizzle相关服务,但不会有一个核心地位公司。”作为一个企业实体,MySQL已经丧失了对创新的关注,在甲骨文收购Sun之前这个问题已经存在。当时MySQL 5.0的一些功能更多着眼于OEM厂商,而非Facebook和谷歌等关注大规模、多核心、64位计算体验的用户。

  阿克尔鼓励人们对MySQL进行更多分支,他认为这将带来新一轮机遇和创新。他表示,“我们有一个开放代码库,并允许人们对其进行分支,我们鼓励人们围绕它创建产品。”

  阿克尔承诺,在今年夏天的O’Reilly开源大会上,他将宣布两家对Drizzle提供支持的公司。

  2009年甲骨文交易发生之前,韦德纽斯离开Sun创建了自己的公司——Monty Program AB,并创建MySQL数据库分支MariaDB。他在MySQL大会上发表了题为“MySQL是一个生态系统而并非仅仅是一家公司”的演讲,韦德纽斯是MySQL AB的联合创始人兼首席技术官,他在2008年把MySQL卖给Sun,但却坚决反对甲骨文获得MySQL所有权。从他演讲的题目我们不难看出他的观点。

  韦德纽斯在演讲中指出,围绕MySQL创建的所有一切都是开源的,所有分支数据库可一起运行,技术支持来自多家服务公司,而非某个单一企业实体。去年他的公司与MySQL服务支持公司Percona联手建立了开源数据库联盟,以统一所有MySQL相关的开发和服务。

  他表示,“在MySQL公司,我们一直与合作伙伴斗争,因为我们希望做所有事情。我们永远不会把领导权交给合作伙伴,因为销售人员说我们自己可以做该项工作。”

  韦德纽斯表示,他也一直在回避MariaDB代码所有权的公司模式。他将Monty Program AB的运营模式称为“黑客模式(the hacking business model)”,员工拥有公司,利润全部用于维护代码。韦德纽斯表示,他创建MariaDB的目的不是为自己赚钱。

  韦德纽斯宣布了一个来自Monty Program AB的全套MariaDB支持模式:用户交纳36000美元,即可获得MySQL 3.3以上版本的无限制、公司范围支持服务。

  两人认为他们的MySQL分支要比MySQL数据库更强大,而且其开发模式也要优于甲骨文所提供的模式。他表示,MySQL客户可以在数秒时间内完成MySQL到MariaDB的移植,而且能够获得更多功能、更强大的稳定性和更快的速度。

  他表示,计划对目前MariaDB 5.1版本进行改进,它宣称该数据库版本可以实现MySQL 5.4的性能。不过此后甲骨文在MySQL大会上宣称MySQL 5.5的运行速度将比5.4版快很多。

  韦德纽斯还表示,众多MySQL 6.0中的功能将出现在MariaDB 5.3中:未来数月将以beta版发布增强版优化器。

  他补充说,MariaDB计划每9个月发布一个新版,对已嫁入甲骨文这样豪门的MySQL来说,如此升级速度又将是一个挑战。他表示,“我发现很多已经存在的补丁却未被包含在MySQL中。”

  MariaDB的下一版本是5.2,据韦德纽斯称该版本将增加另外的事务存储引擎——Spider和Spinx,以及分组提交(group commit)和虚拟列(virtual columns)功能。

  同时,阿克尔表示,Drizzle的理念是带领MySQL走向未来。Drizzle的构想是充分发挥64位系统和固态硬盘的优势,使用了一个防止厂商锁定的架构,使用C++语言创建。

  另外,MySQL分支数据库将是编程工作更流畅。它们将只有一个Blob类型,这将消除关于使用哪一个Blob类型的无休止争论。

  Drizzle剥离了那些非必需的功能,然后将它们以插件形式提供,这使得其代码体积大大减少。阿克尔表示其核心代码从原来的209000行锐减至10900行。

  MySQL分支成熟尚需时间

  那么Drizzle现状如何?它还远称不上一个成熟的产品,对现有MySQL用户来说,迁移是一个令人头痛的问题。尽管它通过了事务型测试,但是用户还必须重新加载数据,目前复制功能正在测试和改进中。

  阿克尔表示,Drizzle的更行频率约在3到4个月,因此代码贡献者无需等待太长时间,就可以看到自己的作品被加入到数据库中,用户可以迅速的获得这些最新的功能。

  他表示,“数年前李纳斯·托沃兹对Linux内核采用了相同的方式,软件完整版本发布模式已经过时,当我与创新型公司交流时发现,他们只关心现在能使用什么功能,而不需要听到2-3年后的开发路线图,那不是互联网时代的做法。”

  究竟会有多少用户转向MariaDB或Drizzle,还需拭目以待,但有一件事情可以确定,甲骨文势必对今年MySQL大会的效果感到不满,或许会重新考虑对明年该技术盛会的资金赞助力度。

Comments (56)