查看: 32381|回复: 82

话题讨论:开源数据库MySQL知多少?

[复制链接]
认证徽章
论坛徽章:
127
茶鸡蛋
日期:2012-01-16 14:24:41鲜花蛋
日期:2012-06-06 14:48:18双黄蛋
日期:2013-01-07 21:07:482013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:082014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08马上加薪
日期:2014-03-18 09:57:11马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11
发表于 2014-3-4 16:06 | 显示全部楼层 |阅读模式


作为最流行的开源数据库软件之一,MySQL数据库软件已经是广为人知了。当前最火的Facebook、淘宝、阿里这样的大型的网站都是使用MySQL数据库,就可见MySQL在稳定可靠性方面,并不会比我们的商业厂商的产品有太多的逊色。而且排在全球前10位的大型网站里面,大部分都有部分业务是运行在MySQL数据库环境上,如Yahoo,Google等。


MySQL是一个非常容易上手的数据库产品,因此您可以在最短的时间内学会如何使用它。但如果想成为高手,恐怕在如何运营MySQL索引以及系能分析调优工具上要多下功夫了。本期将重点探讨MySQL的相关话题,欢迎大家踊跃参与。PS:2014年4月10日-12日第五届中国数据库技术大会将在北京五洲皇冠国际酒店隆重举办,届时淘宝数据库工程师将重点发表“淘宝数据库高性能透明分库分表探索”的议题,欢迎大家报名参加。详见官网信息:http://dtcc.it168.com/


1.麻雀虽小五脏俱全,MySQL虽然以简单著称,但其内部结构并不简单。相比于之前的版本,您觉得MySQL 5.5引入了哪些重要的新特性?如何做好SQL语句的优化?如何合理利用索引?


2.淘宝为什么要放弃Oracle,而选择MySQL呢?大家平常都用MySQL来干些什么事情?


3.在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。MySQL常见的备份有四种,备份策略一:直接拷贝数据库文件;备份策略二:使用mysqlhotcopy备份数据库;备份策略三:使用mysqldump备份数据库;备份策略四:使用主从复制机制(replication),请从数据库规模以及应用的角度,谈谈您对这四种备份的认识。


4.InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。而MyISAM 是MySQL中默认的存储引擎,它基于更老的ISAM代码,但有很多有用的扩展。您觉得InnoDB和MyISAM有哪些区别?在选择存储引擎上需要考虑哪些问题?


5.谈谈试读《MySQL管理之道:性能调优、高可用与监控》章节后您的感想。


活动时间:

2014.3.4-2014.4.4


活动奖励:

针对以上任意一个问题跟帖回答,我们会在讨论结束后,随机抽选5名网友赠送《MySQL管理之道:性能调优、高可用与监控》作为奖励。


图书简介:

11.jpg

书名:MySQL管理之道:性能调优、高可用与监控

作者:贺春旸(ID:chunyang_he)

      摘要:本书由资深MySQL专家撰写,以最新的MySQL版本为基础,以构建高性能MySQL服务器为核心,从故障诊断、表设计、SQL优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、MySQL高可用集群搭建与管理、MySQL服务器性能和服务监控等方面多角度深入讲解了如何去管理与维护MySQL服务器。

书中内容以实战为导向,所有内容均来自于笔者多年实践经验的总结和对新知识的拓展,同时也针对运维人员、DBA等相关工作者会遇到的有代表性的疑难问题给出了实用的情景模拟,并给出了解决方案。不论你目前有没有遇到过此类问题,相信对你以后处理相关问题都会有所借鉴。本书适合所有希望构建和管理高性能、高可用性的MySQL数据库系统的开发者和DBA阅读。

作者简介

贺春旸 从事数据库管理工作多年,有管理和维护高并发海量数据的经验,曾经任职于中国移动飞信、国内某知名电商,致力于MySQL、Linux等开源技术的研究,在51CTO博客上公开发表数据库文章上百篇,现任职于机锋安卓市场,负责MySQL性能调优和架构设计。


样章试读地址http://wenku.it168.com/d_001374643.shtml


购买地址:http://item.jd.com/11398721.html


      获奖名单:鉴于大家对本话题讨论积极,本话题特增加4位获奖名额,赠送马上系列徽章!
           获得图书奖项名单:请获得图书奖项的童靴将快递地址和个人信息站内发消息给我!
      buptdream

2009532140

dotaddjj

mchdba

starive

      获得马上系列徽章名单:
      hechuanbing

buptdream

hotdog04

lzd_7993


认证徽章
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
发表于 2014-3-4 16:20 | 显示全部楼层
本帖最后由 buptdream 于 2014-3-18 14:50 编辑

1.麻雀虽小五脏俱全,MySQL虽然以简单著称,但其内部结构并不简单。相比于之前的版本,您觉得MySQL 5.5引入了哪些重要的新特性?如何做好SQL语句的优化?如何合理利用索引?

   目前生产环境中已经全部升级到5.5.30版本,以前采用的都是5.1.MySQL5.5 针对 MySQL5.1 各个方面提升了很多,特别在性能和一些新参数上面:

一:性能上面的提升

1,默认存储引擎的改变,从默认的MyISAM 到 INNODB。
2,INNODB Plugin 的改变:5.1虽然也支持Innodb plugin,但是需要在My.cnf 上添加:下面2行参数。

ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.so;innodb_trx=ha_innodb_plugin.so;innodb_locks=ha_innodb_plugin.so;innodb_cmp=ha_innodb_plugin.so; innodb_cmp_reset=ha_innodb_plugin.so;innodb_cmpmem=ha_innodb_plugin.so;innodb_cmpmem_reset=ha_innodb_plugin.so; INNODB_LOCK_WAITS=ha_innodb_plugin.so
而5.5.X不需要添加,默认就是支持Innodb Plugin。

3,充分利用CPU多核的能力:
在 MySQL5.1.X 版本,innodb_file_io_threads 参数默认是 4,这个参数的作用是,innodb 使用后台线程处理数据页上的读写 I/O(输入输出)请求。
在 MySQL5.5.X 版本,或者在 Innodb Plugin1.0.4 以后,用两个新的参数取代了 innodb_file_io_threads,那就是innodb_read_io_threads 和 innodb_write_io_threads,你就可以根据你的 CPU 核数来更改,默认是 4。
注:这两个参数不支持动态改变,需要把该参数加入到 my.cnf 里,修改完后重启 MySQL 服务,允许值的范围从 1-64。
调整后,你可以用命令 show engine innodb status\G;来查看:
4,提高刷新脏页数量和合并插入数量,改善磁盘 IO 处理能力。
在 MySQL5.1.X 版本,由于代码写死,最多只会刷新 100 个脏页到磁盘,合并 20 个插入缓冲,即使磁盘有能力处理更多的请求,也只会处理这么多,这样在更新量较大(比如大批量 INSERT)的时候,脏页刷新可能会跟不上,导致性能下降。而在 MySQL5.5.X 版本里,innodb_io_capacity 参数可以动态调整刷新脏页的数量,在一定程度上解决了这一问题。innodb_io_capacity 参数默认是 200,单位页。设置的大小取决于你的硬盘的IOPS,即每秒的输入输出量(或读写次数)。
注:此参数支持动态改变,但需要 SUPER 权限。
SET GLOBAL innodb_io_capacity = 1000;
合并插入缓存的时候,数量为该参数设置的值的5%;刷写脏页的时候,刷写的数量为该参数设置的值
5,增加了自适应刷新脏页功能。innodb_adaptive_flushing
这个功能是在 InnoDB Plugin 引入的。InnoDB 刷新脏页的规则是,当超过innodb_max_dirty_pages_pct 设定的值后,或者当重做日志 ib_logfile 文件写满了以后,或者是机器空闲的时候,这三种情况下才会把 InnoDB_Buffer_Pool 的脏页刷入磁盘。
当写操作很频繁的时候,重做日志 ib_logfile 切换的次数就会很频繁,每当一个写满后,就会进行大批量将脏页刷入磁盘,会对系统的整体性能造成不小的影响。为了避免过大的磁盘IO,innodb_adaptive_flushing 自适应刷新,会根据重做日志 ib_logfile 生成的速度和刷新频率来将脏页刷入磁盘,这样重做日志 ib_logfile 还没有写满时,也可以刷新一定的量。
注:innodb_adaptive_flushing 参数默认开启,可动态更新

6,更好的避免buffer pool 的污染,失效。
通过 innodb_old_blocks_pct、innodb_old_blocks_time 参数能在一定程度上控制。详情见这里

7,加快了 InnoDB 的数据恢复时间。通过算法和内存管理上的改进,将 crash recovery 大大缩短了

8,INNODB 同时支持多个 BufferPool 实例。
InnoDB 用来缓存它的数据和索引的内存缓冲区的大小。你把这个值设得越高,访问表中数据需要得磁盘 I/O 越少。在一个专用的数据库服务器上,你可以设置这个参数达机器物理内存大小的80%。尽管如此,还是不要把它设置得太大,因为对物理内存的竞争可能在操作系统上导致内存调度。
innodb_buffer_pool_size 是 InnoDB 性能的决定性因素,当你的数据库小于 innodb_buffer_pool_size 设置的缓冲池大小,那么此时数据库的性能是最好的,因为客户端访问的数据都在内存里。
InnoDB_Buffer_Pool 缓冲池复制管理着 free list(初始化空闲页等),flush list(缓冲池产生的脏页(数据库被修改,但未写入磁盘),当 innodb_max_dirty_pages_pct 超过设置的值,会把修改时间越早的 page 刷进磁盘), LRU(在内存中但最近又不用的数据块,按照最近最少使用算法,MySQL会根据哪些数据属于 LRU 而将其移出内存而腾出空间来加载另外的数据。)等,当 InnoDB_Buffer_Pool 缓冲池达到好几十 G 时,某个线程正在更新缓冲池而造成其它线程必须等待的瓶颈。
在 MySQL5.5 里,可以通过 innodb_buffer_pool_instances 参数来增加InnoDB_Buffer_Pool 实例的个数,使用哈希函数将读取缓存的数据页随机分配到一个缓冲池里面,这样每个缓冲区实例就可以分别管理着自己的 free list, flushlist, LRU,来解决此问题。
注:innodb_buffer_pool_size 必须大于 1G,生成 InnoDB_Buffer_Pool 多实例才有效,最多支持 64 个 InnoDB_Buffer_Pool 实例。修改 my.cnf 配置文件,添加如下:

innodb_buffer_pool_instances = 3
调整后,你可以用命令 show engine innodb status\G;来查看:

9,可选用内存分配程序使用控制。
MySQL 5.5 选项文件 my.cnf 中设置新的系统配置参数 innodb_use_sys_malloc,可方便地进行控制。默认设置值为 1,表示 InnoDB 使用操作系统的内存分配程序。

10,提高了默认 innodb 线程并发数。
从 MySQL5.5.X 版本开始,innodb_thread_concurrency 被默认设置为 0,表示不限制并发数。注:innodb_thread_concurrency = 0 时,innodb_thread_sleep_delay 参数就无效了。同样 innodb_concurrency_tickets 也没了意思,这里推荐设置为 0,更好去发挥 CPU多核处理能力,提高并发量。

11,实现了异步 I/O和组提交,默认即可。
同步 I/O,当一个 I/O 操作执行时,应用程序必须等待,直到此 I/O 执行完。相反,异步 I/O 操作在后台运行,I/O 操作和应用程序可以同时运行,提高了系统性能。因此像数据库等应用往往会利用异步 I/O,使得多个 I/O 操作同时执行。从 MySQL5.5.X 版本开始,在 Linux 系统上实现异步 I/O 功能,也就是 linux native AIO。
通过 innodb_use_native_aio 参数来选择是否启用异步 I/O,默认是 ON,可以开启的,此参数不支持动态修改。

12,使用多个回滚段提升性能。默认即可。
MySQL5.5 可以支持高达 128K 的并发事务处理操作,创建回滚数据(undo data)(来自插入、更新、和删除操作)。这种该进措施减少了在单个回滚段上的互斥争用,增加了吞吐量。

13,改善清除程序进度。
InnoDB 中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。
从 MySQL5.5.X 版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置 innodb_purge_threads 配置参数来选择清除操作是否使用单
独线程,默认情况下参数设置为 0(不使用单独线程),设置为 1 时表示使用单独的清除线程。建议为1。
注:innodb_purge_threads 参数不支持动态修改,需要添加到 my.cnf 里修改,并重启生效。当设置为 1 时,需要结合 innodb_purge_batch_size 参数来使用,默认
值是 20,最大可设置 5000,这个参数一般不用调整,默认即可或则300。

14,添加了删除缓冲和清除缓冲。类似插入缓存
当向一个表进行 insert、delte 或 update 时,里面的索引(聚集索引和非聚集索引)也会随即更新,主键(聚集索引)是按照顺序进行插入的,而非聚集索引则是分散性的插入。顺序读写的速度要比随机读写的速度快,表越大就越明显,插入的性能就会变低。
InnoDB 引入了一种优化措施,因此在 Mysql5.1.X 版本里,当一个表做 insert操作非聚集索引更新时,如果该非聚集索引页被读入 Innodb_Buffer_Pool 缓冲池里,那么就直接更新非聚集索引,并使用正常的写脏数据块方法闪存到磁盘中;如果没有读入缓冲池里,则使用插入缓冲区来缓存非聚集索引页的变化,直到该页被读入 Innodb_Buffer_Pool 缓冲池里,执行插入缓存合并操作,并使用正常的写脏数据块方法闪存到磁盘中,从而提高了插入性能。
从 MySQL5.5.X 版本开始,还为删除操作扩展了同样的功能(首先是删除标记操作,然后使用收集/清除所有已删除记录的清除操作)。现在可以使用innodb_change_buffering 配置参数来控制删除缓冲和既有插入缓冲功能,默认是all,此参数支持动态设置:

SET GLOBAL innodb_change_buffering = all;
注意:该缓存占用一定的的buffer pool,要是数据全部都缓存到BP中,或则只有很少的二级索引,该参数可以关闭。

15,控制自旋锁 Spin Lock 轮训间隔,实现保护共享资源而提出一种锁机制。
自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁。
innodb_spin_wait_delay 默认为6。

set global innodb_spin_wait_delay=6;
16,快速创建、删除、更改索引。( innodb plugin )
对于聚集索引和原先一样,需要copy data,而非聚集索引不需要copy data,能提高创建速度。

17,支持压缩页,新格式( innodb plugin )
innodb_file_format = Barracuda,innodb_file_per_table = 1
创建表的时候 在最后加:

ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;
被请求的数据页小于 InnoDB_Buffer_Pool 缓冲池大小,未压缩的性能要稍好于压缩过的,因为压缩会带来额外的 CPU 消耗,总体上差异不大。被请求的数据页大于 InnoDB_Buffer_Pool 缓冲池大小,压缩的性能要好于压缩过的,吞吐量也提高。批量插入数据的时候,压缩的比没有压缩的要慢,而且性能也更差。可以参考这里

18,关闭 InnoDB 更新元数据统计功能。
innodb_stats_on_metadata 参数的作用是:查询 information_schema 元数据库里的表时,Innodb 还会随机提取其他数据库每个表索引页的部分数据,当你的表很大,并且数量很多时,耗费的时间就会很长,很多不访问的数据也会进入到Innodb_Buffer_Pool 缓冲池里,那么就会把缓冲池所污染。并且 ANALYZE TABLE和 SHOW TABLE STATUS 语句也会造成 Innodb 随机提取数据。
从 MySQL5.5.X 版本开始,你可以动态关闭 innodb_stats_on_metadata,默认是开启的,建议关闭。

set global innodb_stats_on_metadata = OFF;
19,复制方面:增加了半同步复制,relay-log的自我修复。
在 MySQL5.5.X 版本开始,增加了 relay_log_recovery 参数,这个参数的作用是:当 slave 从库宕机后,假如 Relay-Log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log,并且重新从 MASTER 上获取日志,这样保证 relay-log 的完整。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时,可在 slave 从库上开启该功能,建议开启。

20,可以动态修改表空间模式和锁超时时间。

set global innodb_file_per_table = 1;
set global innodb_lock_wait_timeout = 10;


如何做好SQL语句的优化?如何合理利用索引?

其中这两个问题都可以规划为性能优化的一部分,在sql优化方面,最简单的方式就是通过调整索引来获取理想的执行路径。mysql优化器相比oracle来说比较简单,尤其对多表连接,子查询优化不够智能,在mysql中尽量使用简单的sql实现业务需求,把复杂问题简单化,采用简单的sql进行获取数据的方式是最理想的。
关于所有的利用方面:
1、选择索引的数据类型

MySQL支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响。通常来说,可以遵循以下一些指导原则:

(1)越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。
(2)简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂。在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间;以及用整型数据类型存储IP地址。
(3)尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。

2、索引的类型
索引是在存储引擎中实现的,而不是在服务器层中实现的。所以,每种存储引擎的索引都不一定完全相同,并不是所有的存储引擎都支持所有的索引类型。
3、高性能的索引策略
覆盖索引,索引避免排序,聚簇索引
4、索引的缺点
1:索引要占用磁盘空间。通常情况下,这个问题不是非常突出。不过,如果你创建每一种可能列组合的索引,索引文件体积的增长速度将远远超过数据文件。如果你有一个非常大的表,索引文件的大小可能达到操作系统允许的最大文件限制。
2:对于需要写入数据的操作,比如delete、update及insert操作,索引会降低他们的速度。这是因为mysql不仅要把改动数据写入数据文件,而且他还要把这些改动写入索引文件。


2.淘宝为什么要放弃Oracle,而选择MySQL呢?大家平常都用MySQL来干些什么事情?
  淘宝放弃oracle,当时的想法是想证明现有的平台是可以在不同的数据库平台上可以进行移植,避免出现目前有些银行被死死的绑定在IBM的大船上,当时开源的数据库中,mysql算是比较成熟的一个。当然后来随着业务的急剧发展,mysql也表现出了强大的扩展能力,能够满足业务需要。还是就是从成本上进行考虑,毕竟mysql是开源的,每年可以节省大量的成本,这是每个公司最希望看到的技术发展方向。
   去IOE之后,很多公司都在往这个方向努力,目前出去一些核心数据库在oracle下,生产环境也都替换为mysql。我们主要把mysql作为资讯系统,爬虫数据库,目前一些网站的核心数据库都采用mysql。

3.在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。MySQL常见的备份有四种,备份策略一:直接拷贝数据库文件;备份策略二:使用mysqlhotcopy备份数据库;备份策略三:使用mysqldump备份数据库;备份策略四:使用主从复制机制(replication),请从数据库规模以及应用的角度,谈谈您对这四种备份的认识。
  这几种备份方式我都接触过,说说我的理解
备份策略一:备份和恢复操作都比较简单,能够跨mysql的版本,恢复速度快,属于文件系统级别的。但会出现备份不完整,需要关闭服务器进行,严重影响到在线业务,基本上不能实现增量备份。
备份策略二:使用mysqlhotcopy备份数据库,mysqlhotcopy 是一个 PERL 程序。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。
备份策略三:mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。但是会出现锁表的情况。
备份策略四:是最常用的备份方式,但需要进行延迟复制的设置,否则对于误删除或者操作的方式处理起来比较麻烦。

4.InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。而MyISAM 是MySQL中默认的存储引擎,它基于更老的ISAM代码,但有很多有用的扩展。您觉得InnoDB和MyISAM有哪些区别?在选择存储引擎上需要考虑哪些问题?


     1、首先我目前平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。


  2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。

  3、从平台角度来说,经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时 候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应 的binlog补上。如果是Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为我平台上最小的一个数 据库实例的数据量基本都是几十G大小。

  4、从我接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是 where对它主键是有效,非主键的都会锁全表的。

  5、还有就是经常有很多应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文 件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。

  6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。

  7、如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。

  当然Innodb也不是绝对不用,用事务的项目如模拟炒股项目,我就是用Innodb的,活跃用户20多万时候,也是很轻松应付了,因此我个人也是很喜欢Innodb的,只是如果从数据库平台应用出发,我还是会首选MyISAM。

  另外,可能有人会说你MyISAM无法抗太多写操作,但是我可以通过架构来弥补,说个我现有用的数据库平台容量:主从数据总量在几百T以上,每 天十多亿 pv的动态页面,还有几个大项目是通过数据接口方式调用未算进pv总数,(其中包括一个大项目因为初期memcached没部署,导致单台数据库每天处理 9千万的查询)。而我的整体数据库服务器平均负载都在0.5-1左右。

5.谈谈试读《MySQL管理之道:性能调优、高可用与监控》章节后您的感想。
  通读整个试读章节,感觉实用性很强,都是从实用的角度介绍mysql,收获很多。
   第一章主要讲解的是 MySQL5.5 和 InnoDB 的一些增强性能,这些增强性能极大地提高了系统和 MySQL 的性能。通过介绍 MySQL5.5 中一些较为重要的改变,对新特性有了概括的认识。引用的资料为官方文档,保证准确和全面。
  第二章介绍了半同步的内容。半同步复制目的是保证主从数据的一致性尤其是在网络受到波动的情况下,这时丢包、ping 延时、半同步复制和异步复制就会切来切去,这会使主库的更新、插入、删除操作受到影响。切合实际的操作脚本,讲解非常到位,很容易理解和学习半同步复制的内容。
  该书非常实用,建议mysql爱好者深入学习。

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
认证徽章
论坛徽章:
6350
ITPUB9周年纪念徽章
日期:2014-05-02 10:36:402011新春纪念徽章
日期:2014-12-29 12:11:142010广州亚运会纪念徽章:卡巴迪
日期:2014-08-06 08:44:252012新春纪念徽章
日期:2014-12-29 12:11:142013年新春福章
日期:2014-12-29 12:11:14马上有车
日期:2014-12-29 12:11:14马上有房
日期:2014-12-29 12:11:14马上有钱
日期:2014-12-29 12:11:14马上有对象
日期:2014-12-29 12:11:14马上加薪
日期:2014-12-29 12:11:14
发表于 2014-3-4 16:43 | 显示全部楼层
本帖最后由 2009532140 于 2014-3-13 08:56 编辑

占位更新!
今年mysql 很火啊~~~

1.相比于之前的版本,您觉得MySQL 5.5引入了哪些重要的新特性?如何做好SQL语句的优化?如何合理利用索引?
太多了吧,我就知道几个,简单说说:
①:默认数据库存储引擎改为InnoDB,原来InnoDB只有一个Segment,同时只支持1023的并发。现已扩充到128个Segments,从而解决了高并发的限制。
②:首次支持半同步(semi-sync replication)在MySQL的高可用方案中将产生更多更加可靠的方案
③:增强表分区功能,参照官方文档。
如何做好SQL语句优化?
一些老生常谈的方法我就不说了,从工作角度来说:
一要懂业务.二要懂表结构设计..否则写出高效的SQL 不太容易。
另外,要合理利用各种数据库所提供的特殊数据提取方法。
如何合理利用索引?
这个与工作负载与where条件,排序之类的条件有着密切的联系。

==================================================================================================
2.淘宝为什么要放弃Oracle,而选择MySQL呢?大家平常都用MySQL来干些什么事情?
开源的魅力主要在于自由使用,自由修改..
如果说费用,恐怕只有阿里人才会知道:使用了mysql 之后的维护费用并没降低多少...
现在来看,大公司,有能力的公司都会基于开源的Mysql 来开发定制自己的数据库。
Mysql 只是为了学习.为了应对将来可能用得比较多场景的大数据而使用mysql。
而公司的开发环境,很少有使用Mysql..都觉得这个比较低端。
再者公司不太使用这个数据库另一个原因可能就是图形化界面比较差。

==================================================================================================
3.MySQL常见的备份有四种,
备份策略一:直接拷贝文件,备份较快,但是备份时数据仍可写入。适合能短时间停机的数据库。
备份策略二:使用mysqlhotcopy:这个工具只能备份MYISAM表。但是比mysqldump要快。如今大量使用innodb作为存储引擎,这个工具的使用量较少。
备份策略三:使用mysqldump备份数据库:有丰富的参数,可以在线备份。备份后可以方便的建立slave库。缺点是恢复过程较慢。
备份策略四:是主从复制,由于是近乎实时的复制。主从复制搭配mysqldump是目前较常用的一种方案。在我看来,主从复制与Oracle 的DG 应该差不多。

==================================================================================================
4.您觉得InnoDB和MyISAM有哪些区别?在选择存储引擎上需要考虑哪些问题?

①.InnoDB不支持FULLTEXT类型的索引。   
②.InnoDB 中不保存表的具体行数,也就是说,执行count(*) 计数时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。
③.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。   
④.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。   

《深入浅出Mysql》对各种引擎的特性有很好的说明P134 页。
对于这两个引擎来说。决定使用哪一个的话那就是:数据量的大小。大系统,大数据建议使用Innodb.

==================================================================================================
5.谈谈试读《MySQL管理之道:性能调优、高可用与监控》章节后您的感想。

浏览一下目录,感觉这本书写的比较深入。
刚开始就从Mysql5.5 的新特性出发,一下深入到mysql 的内部..
不过,如果能从源代码级别展示一下就更好了。。
另外,个人比较感兴趣的是第二部分,第三部分以及最后的项目案例.
只听说过表水平拆分,想实际感受大公司是怎么做的。









使用道具 举报

回复
认证徽章
论坛徽章:
764
2014年世界杯参赛球队: 加纳
日期:2014-05-20 17:24:592014年世界杯参赛球队:墨西哥
日期:2014-05-20 17:25:142014年世界杯参赛球队: 波黑
日期:2014-05-20 17:27:292014年世界杯参赛球队: 希腊
日期:2014-07-15 11:05:212014年世界杯参赛球队: 阿尔及利亚
日期:2014-07-15 11:05:212014年世界杯参赛球队: 厄瓜多尔
日期:2014-07-15 14:14:452014年世界杯参赛球队: 哥斯达黎加
日期:2014-06-16 15:29:332014年世界杯参赛球队: 智利
日期:2014-06-16 17:03:11 2014年世界杯参赛球队: 德国
日期:2014-06-16 17:10:512014年世界杯参赛球队: 葡萄牙
日期:2014-06-18 09:28:47
发表于 2014-3-4 16:45 | 显示全部楼层
支持

使用道具 举报

回复
论坛徽章:
0
发表于 2014-3-4 17:03 | 显示全部楼层
MySQL-MMM如何调用远程管理卡命令去fence?

而MySQL-MMM自身也有该功能,因我的书里没有提到,所以我这里再延伸介绍一下,怎么去调用。

视频地址:http://edu.51cto.com/lesson/id-19902.html

使用道具 举报

回复
认证徽章
论坛徽章:
127
茶鸡蛋
日期:2012-01-16 14:24:41鲜花蛋
日期:2012-06-06 14:48:18双黄蛋
日期:2013-01-07 21:07:482013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:082014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08马上加薪
日期:2014-03-18 09:57:11马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11
发表于 2014-3-4 17:05 | 显示全部楼层
楼上有作者坐镇,高手支招啊,亲们,有啥问题赶紧抓住机会啊!

使用道具 举报

回复
论坛徽章:
0
发表于 2014-3-4 17:07 | 显示全部楼层
chunyang_he 发表于 2014-3-4 17:03
MySQL-MMM如何调用远程管理卡命令去fence?

而MySQL-MMM自身也有该功能,因我的书里没有提到,所以我这 ...

作者现身

使用道具 举报

回复
论坛徽章:
0
发表于 2014-3-4 17:08 | 显示全部楼层
支持!好书,全是干货分享啊!

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
认证徽章
论坛徽章:
6350
ITPUB9周年纪念徽章
日期:2014-05-02 10:36:402011新春纪念徽章
日期:2014-12-29 12:11:142010广州亚运会纪念徽章:卡巴迪
日期:2014-08-06 08:44:252012新春纪念徽章
日期:2014-12-29 12:11:142013年新春福章
日期:2014-12-29 12:11:14马上有车
日期:2014-12-29 12:11:14马上有房
日期:2014-12-29 12:11:14马上有钱
日期:2014-12-29 12:11:14马上有对象
日期:2014-12-29 12:11:14马上加薪
日期:2014-12-29 12:11:14
发表于 2014-3-4 17:12 | 显示全部楼层
6楼前后,赞助商出现~~

使用道具 举报

回复
论坛徽章:
65
林肯
日期:2013-09-12 15:57:33马自达
日期:2013-10-11 13:52:31路虎
日期:2014-01-26 14:35:49三菱
日期:2013-11-25 11:21:19现代
日期:2013-08-29 14:39:50雪佛兰
日期:2013-09-12 15:55:00一汽
日期:2013-11-28 14:15:05技术图书徽章
日期:2013-12-11 10:10:51技术图书徽章
日期:2013-12-11 10:11:35技术图书徽章
日期:2014-01-14 10:54:13
发表于 2014-3-4 17:16 | 显示全部楼层
占位更新!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表