Chinaunix

标题: 浅谈Mysql高可用,DBA们将如何应对? [打印本页]

作者: cnlnzz01    时间: 2015-12-07 18:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: cnlnzz01    时间: 2015-12-07 18:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: demilich    时间: 2015-12-09 14:07
好书,占楼先 ...
作者: 王楠w_n    时间: 2015-12-09 14:11
这回复。。。。。回复 3# demilich


   
作者: seesea2517    时间: 2015-12-09 15:22
1. 如果是你,你怎么处理慢查询引起的问题,并且在以后避免这种情况发生?
  我们一般是这样处理的:根据show出来的查询语句内容以及用户名去找到相关的查询发起者,询问使用目的以及是否可以杀掉,一般来说同事都会理解同意杀掉的,不同意那就约定一下再等多久非杀不可;并请发起者优化查询,有需要找到开发增加索引之类的,以及与发起者沟通把查询时间放在服务器空闲的时候,或者使用从库查询,或是使用备份数据来查询。

2. 除了慢查询,还有哪些情况会导致MySQL卡顿,查询较慢?
  有时候是由于磁盘 IO 慢导致查询慢了。可能还有其它并发读写磁盘、其它进程抢占 CPU 等情况,但我们的数据库是单独运行在一台机器上的,所以没有遇到其它的可能情况。

3. 针对于数据库优化,您有哪些比较实用的建议和想法?
  很多的方案都从书上读来的,用得多的还是根据数据查询、写入等的使用情况来设计合理的索引。

4. 结合生产环境,您觉得 MySQL,较于PG NOsql DB2 Sybase MongoDB Oracle等数据库来,他的优点在哪?在什么情况下你会使用其它类型的DB
  咱是因为免费而用的 MySQL,而且有很多不同的引擎可以根据应用场景选用,挺灵活的。
  我们的应用是 MySQL 与 SQLite 并且,当远程的 MySQL 不能连接的时候将需要保存的数据暂存在本地的 SQLite 里,等可以访问远程 MySQL 的时候再自动把本地的数据传上去。
  
5. 如果您是数据库的设计者,您会去怎么设计数据库的引擎和结构?
  不在其位不谋其政,不是不想谋,而是经验水平知识技能等不够,咱就会几句 select,所以这个问题只能远观啊,总的来说底层设计都是为上层服务的,根据上层应用的需求来考虑,比如主要以备份为目的只查询的,用列存储;随机存取的用哈希;追求速度的用内存等等。
作者: xdsnet    时间: 2015-12-09 15:49
占楼观望高手们表演
作者: skykiker    时间: 2015-12-10 10:14
本帖最后由 skykiker 于 2015-12-10 10:31 编辑

1. 如果是你,你怎么处理慢查询引起的问题,并且在以后避免这种情况发生?
  想看这条SQL本身慢是否合理,再看这条SQL的存在性是否合理,要和开发确认这条SQL的目的。

2. 除了慢查询,还有哪些情况会导致MySQL卡顿,查询较慢?         
可能到了系统资源瓶颈,CPU,IO,MEM,network。还有可能程序设计不当,过于频繁的查询,1个操作执行N个SQL。遇到过1个操作发行1w多个SQL的奇葩例子,那些SQL是ORM自动生成的。还遇到过一个另一个奇葩的例子,应用开发人员为了减轻DB的压力,想当然的把本该在服务端做的复杂查询放到了应用端计算,结果引发了大量的网络交互把系统拖死,后来这个问题通过物化视图解决了(那是Oracle的案例,MySQL不支持物化视图)。

3. 针对于数据库优化,您有哪些比较实用的建议和想法?
  首先要结合应用设计,数据表设计,缓存,索引在设计上优化。其次才是数据库层的参数调优之类。

4. 结合生产环境,您觉得 MySQL,较于PG NOsql DB2 Sybase MongoDB Oracle等数据库来,他的优点在哪?在什么情况下你会使用其它类型的DB
  MySQL较PG的优点是用的人多,DBA好找,除此以外我找不到任何MySQL明显比PG强的地方!单纯从数据库本身选型,基本上任何适合MySQL的场景都适合用PG,而且很多时候是更适合用PG。因为PG的功能特性,可靠性和综合性能都远远强与MySQL。
  为什么这么说?功能特性方面,对比一下PG手册和MySQL手册上的功能自然就会明白,另外PG对JSON的完美支持使之可以完全替代MongoDB(MySQL 5.7对JSON的支持是不完整的)。可靠性方面,PG的对数据一致性有严格的保护,同步流复制可以轻松确保HA集群数据不丢,实际案例也证明,PG很少会宕机,而且宕机后也很少会起不来或丢数据(硬盘没有坏掉的前提下)。而使用MySQL的复制技术做HA,要确保不丢数据需要在部署上花很大的功夫。至于性能,非常简单的查询两者相差不大,复杂一些的查询PG会把MySQL远远甩在后面。PG还有非常丰富的索引,甚至可以定制索引以应对以前没人见过的场景。最后一点,有些公司不敢上PG是因为找不到有经验的PG DBA,实际上PG没有MySQL那么多坑,不需要多少踩坑经验,对着手册就可以轻松部署,当然也可以找提供PG第3方服务的公司协助。
  
5. 如果您是数据库的设计者,您会去怎么设计数据库的引擎和结构?
  极少有业务已经到了现有的任何一个数据库无法满足需求,要重新设计一个数据库的地步。真有的话看业务场景吧!
作者: jieforest    时间: 2015-12-10 16:47
1.如果是你,你怎么处理慢查询引起的问题,并且在以后避免这种情况发生?
对于MySQL的慢查询问题,通常我们是这么干的:
1)开启MySQL服务器的慢查询记录功能
mysql> set global slow_query_log=ON;
mysql> show variables like "slow%";
+---------------------+------------------------------------+
| Variable_name       | Value                              |
+---------------------+------------------------------------+
| slow_launch_time    | 2                                  |
| slow_query_log      | ON                                 |
| slow_query_log_file | /opt/mysql/data/sql-slow.log |
+---------------------+------------------------------------+
3 rows in set (0.00 sec)
2)出现慢查询问题后,查看慢查询日志/opt/mysql/data/sql-slow.log
3)分析具体的问题,进行相应的处理。

2.除了慢查询,还有哪些情况会导致MySQL卡顿,查询较慢?
导致MySQL缓慢的因素有很多。比如:
1)DB数据模型设计不佳,长期运行后缓慢;
2)MySQL未做优化
比如默认的max_connections是150,可根据实际情况调整
又比如innodb_buffer_pool_size的设置,MySQL的优化点有很多
3)Linux服务器OS未做优化:内核参数、网络参数都需要根据实际情况调优
比如打开文件数,默认是1024,不能不优化
4)MySQL服务器的硬件可作优化:存储采用SSD等
5)网络带宽因素等

3.针对于数据库优化,您有哪些比较实用的建议和想法?
对于MySQL数据库的优化,可以跟随Percona的脚步,他们的优化做得非常好。
MariaDB也可以考虑。

4.结合生产环境,您觉得MySQL,较于PG NOsql DB2 Sybase MongoDB Oracle等数据库来,他的优点在哪?在什么情况下你会使用其它类型的DB
相比PG NOsql DB2 Sybase MongoDB Oracle等数据库,MySQL稳定、免费、易用,使用它可以减少开发时间,而且它也靠得住。

5.如果您是数据库的设计者,您会去怎么设计数据库的引擎和结构?
这方面没做过。对于MySQL引擎,一般我选择InnoDB引擎或者是XtraDB引擎,并做好优化即可。
未做深入。

作者: xpk    时间: 2015-12-11 08:56
看起啦是本好书,占个楼留个名就OK了 , 准备自己买一本靠谱点!坐观各位看官点评!

   
作者: rtm009    时间: 2015-12-11 09:16
一直不喜欢mysql的路过
作者: shjhcx    时间: 2015-12-11 10:55
一直很喜欢Mysql的路过
作者: stay_sun    时间: 2015-12-11 13:59
回复 1# cnlnzz01


       1.如果是你,你怎么处理慢查询引起的问题,并且在以后避免这种情况发生?
这个问题要解决的话问题就在研发的了,最好上sql 审计的话可以避免问题

     2.除了慢查询,还有哪些情况会导致MySQL卡顿,查询较慢?
         这个主要有很多主要还是跟调优方面的分类差不多
         硬件征用: 内存cpu io  网络
         配置方面  内存分配不合理  主机参数
        sql 设计: sql 的锁 大的sql  抢占资源等
     3.针对于数据库优化,您有哪些比较实用的建议和想法?
      其实调优的话还是调整平衡  看你得消耗了  调整好 内核参数  配置文件 等
    4.结合生产环境,您觉得MySQL,较于PG NOsql DB2 Sybase MongoDB Oracle等数据库来,他的优点在哪?在什么情况下你会使用其它类型的DB
      其实选择的话没有什么最合适的。还是看业务吧
      交易系统还是适合oracle
      展示等系统 适合mysql
       redis memcached 做缓存
      mongodb  适合分析
      没有绝对的还是看你用什么用的最好把,有时候用的好的话 还是可以省事好多

    5.如果您是数据库的设计者,您会去怎么设计数据库的引擎和结构?
    基本上mysql innodb 存储引擎为主  表必须主键  最好是自增的id 剩下出查询的索引 就好了
作者: yuhongchun    时间: 2015-12-11 15:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: csoho2000    时间: 2015-12-11 15:24
不会,拿起小板凳围观
作者: love100    时间: 2015-12-12 20:35
1. 如果是你,你怎么处理慢查询引起的问题,并且在以后避免这种情况发生?
==>对于这种情况,运维是应该监控,并提前知道的,通过show full processlist;对于什么用用户(User)从哪台主机(Host)来在哪个库(db)上所执行的sql语句运行的状态(Command),该sql运行超过了设定的时间(Time)进行告警.

2. 除了慢查询,还有哪些情况会导致MySQL卡顿,查询较慢?         
==>禁用DNS反向解析,OS以外的,就用1来监控

3. 针对于数据库优化,您有哪些比较实用的建议和想法?
==>数据库的优化,DBA首先要对业务逻辑很熟悉,要在设计阶段进行把控,数据类型尽量精准,尽量避免锁竞争、死锁(尽可能的避免gap)的情况产生,索引要定期的进行检查,检查是否合理,是否达到了最优.

4. 结合生产环境,您觉得 MySQL,较于PG NOsql DB2 Sybase MongoDB Oracle等数据库来,他的优点在哪?在什么情况下你会使用其它类型的DB
  ===》只对Mysql有研究,其他不太熟悉,目前mysql在我们生产环境中用于交易系统(外汇、二元期权、P2P等)此处关于外汇系统,由于汇率tick数据量巨大(接收7家银行、30个货币对一周3亿条数据),后台检索比较麻烦,只能定期进行处理,此处感觉不足.
  
5. 如果您是数据库的设计者,您会去怎么设计数据库的引擎和结构?
===>我首先会去花大量的时间去熟悉业务逻辑,然后根据业务需要进行设计,要让开发者完全认同你的设计.

作者: ych20158    时间: 2015-12-14 10:00
这本书其实还不错,看完就会觉得不那么高大上,哎,慢慢学,不要着急啊。
作者: cjfeii    时间: 2015-12-14 10:08
本帖最后由 cjfeii 于 2015-12-14 11:54 编辑

1.如果是你,你怎么处理慢查询引起的问题,并且在以后避免这种情况发生?
如果确定是由于慢查询引起的MySQL数据库性能问题,首先通过“show processlist”以及“slow.log”确定具体哪些慢查询,确定之后根据慢查询不同的情况去优化:
    1. 如果是SQL有问题,那么就优化SQL;
    2. 优化之后的SQL,可以通过添加索引来提升查询性能,但是,添加索引是一把双刃剑:会降低“insert/update”的性能,并且还要占用额外的存储空间,所以谨慎的对待添加索引;
    3. 如果添加索引不能很好的提高性能,那么可以根据数据的读写特点以及数据规模去选择合适的存储引擎,虽然在目前innodb引擎性能很好,支持事务,用的也很广泛,但是也不要忽视其他的存储引擎的优势,比如TokuDB的高压缩比以及高insert属性等;
    4. 如果数据规模超出了单机MySQL存储容量范围,那么就需要扩展机器做集群或者替换MySQL数据库寻求更适合的存储数据库;

2.除了慢查询,还有哪些情况会导致MySQL卡顿,查询较慢?
引起MySQL卡顿的情况有很多,但是根本原因主要就是CPU以及IO的抢占。比如:
    1. 大规模的写会占用大量的IO资源会引起MySQL卡顿;
    2. 如果MySQL所在的服务器上运行着其他的应用程序,并占用太多的CPU或是IO,那么也会导致MySQL查询较慢;
    3. 等等。
生产环境永远是最复杂的系统,线上MySQL卡顿也会有多种原因,这就使得掌握查找卡顿原因的方法尤为重要,如:show processlist,top/htop,iostat/iotop,strace等()。

3.针对于数据库优化,您有哪些比较实用的建议和想法?
数据库优化不是一朝一夕就能做好,在平时的工作中要一点一滴的来做,不同部门协同来做:
    1. 数据库设计的时候:合理设计表结构以及合理访问数据库表;
    2. 数据库运行过程中,注意性能的监控,最直观的就是:slowlog和show processlist,还需要注意其他指标的波动(disk, io, net等);
    3. 优化的时候,要全盘考虑,避免只考虑将来而忘掉过去(程序员会发疯的);
    4. 等等。

4.结合生产环境,您觉得MySQL,较于PG NOsql DB2 Sybase MongoDB Oracle等数据库来,他的优点在哪?在什么情况下你会使用其它类型的DB
相对于其他关系型数据库,主要就是:社区比较活跃,软件更新快,从业人员比较多,还有就是免费。
和nosql数据库相比,就是:支持事务,复杂的sql,稳定。
具体选用哪种DB,主要有三个因素——业务数据特点、DB的成熟度、团队的技术栈。比较主流的SQL+NOSQL就是:MySQL+Redis等。


5.如果您是数据库的设计者,您会去怎么设计数据库的引擎和结构?
主要看对数据库的定位,不同的定位导致不同的底层设计(引擎和结构),如果侧重点是事务型,那么就是MySQL、PG的设计等,非事务的话可以考虑nosql的存储模式(Log Structured Merge等)。
我说一个我自己工作中用到的场景:
    有一个特别大的表,这个表用于保存终端上传的数据,只增加不修改,并主要承载一些查询业务(主要是范围查找),目前这张表的存储引擎是innodb。其实不管是事务型的innodb还是非事务型的MyISAM,底层都是B-树或是B+树的存储结构(其他大部分数据库系统也是这样),都是平衡树,写的过程中总会有blance的时候,而且会导致逻辑上相邻的数据在物理上不相邻,在范围访问的过程中会造成很多的随机IO,使得性能有所降低,针对这样的情况有没有更好的存储方式呢?


抛砖引玉:待后者续。。。
作者: lsstarboy    时间: 2015-12-14 10:13
遇到慢查询就想办法绕过去,特别是那些join了一大堆的sql语句,必须绕过去才行,否则卡住整个数据库都不是困难的事,虽然原理上来说join效率应该不低,但有时候还真不如把sql拆分,然后再语言(PHP)上来解决。
作者: www_baby    时间: 2015-12-14 12:18
回复 1# cnlnzz01

之前我用inforbright ,也曾常出现这样情况,通常是内存耗完后发生。


   
作者: ghostwwl    时间: 2015-12-14 17:57
本帖最后由 ghostwwl 于 2015-12-14 17:57 编辑

1. 开慢查询日志
2. 记得没错的话 应该可以记录所有没有使用索引的语句
3. 根据日志做具体处理
4. innodb 最好每张表 单独表空间
5. 看mysql的状态值 相关配置该调整的调整


有了一少年宫结果慢慢处理
如果结构索引没问题 量大的表 分表才是硬道理

然后 sar ionice iostat 之类 看是否硬件瓶颈
作者: cnlnzz01    时间: 2015-12-15 15:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: 王楠w_n    时间: 2015-12-15 15:23
你回啊 回复 21# cnlnzz01


   
作者: changsiheng    时间: 2015-12-17 16:45
1.如果是你,你怎么处理慢查询引起的问题,并且在以后避免这种情况发生?

  清理大表中无用的数据;对大表尽可能采用分区表;查看sql是否可以优化。

2.除了慢查询,还有哪些情况会导致MySQL卡顿,查询较慢?

  如果非SSD,大量的随机I/O读写是问题;大事务操作导致的大面积锁;Myisam的不合理使用。

3.针对于数据库优化,您有哪些比较实用的建议和想法?

   读写分离是必须的;经常操作表的数据碎片优化;

4.结合生产环境,您觉得MySQL,较于PG NOsql DB2 Sybase MongoDB Oracle等数据库来,他的优点在哪?在什么情况下你会使用其它类型的DB

  用过是oracle,mysql,mongodb,但是都不是很灵

  但从管理上来说,mongodb是不支持事务的,曾经遇到过业务强行终止后,恢复不了的情况,还好当时有集群;
  
  oracle和mysql来说,还是用免费的,具体的差距这个不是没有太多感觉。

5.如果您是数据库的设计者,您会去怎么设计数据库的引擎和结构?

    以前从来没有考虑过这个问题,因为只是管理数据库。
    我觉得就最熟悉的mysql而言,引擎肯定是Innodb。他的特性基本可以满足一般的需求;
    数据库的结构,耦合度不能太高,每个数据表不能太重;
作者: archermind_wh    时间: 2015-12-18 14:40
有需要换工作的吗武汉诚迈科技招聘岗位安卓开发和测试   五险一金 定期体检 定期员工活动  每年三次加薪机会 每周双休 早餐券  回复 2# cnlnzz01


   
作者: cnlnzz01    时间: 2015-12-18 19:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: sjf0115    时间: 2015-12-19 23:25
占个坑               
作者: zhancat200801    时间: 2015-12-20 14:45
这真是个好帖子,mark一下。
另外请教一下高人,生产环境中什么情况下建议用主从/主主架构?
作者: Shell_HAT    时间: 2015-12-23 10:06
回复 27# zhancat200801


单个数据库顶不住业务压力的时候可以考虑上主从,读写分离,缓解主库压力。
主主容易出现数据不一致的情况,当你找到一个有经验的MySQL DBA之后再考虑吧
作者: Shell_HAT    时间: 2015-12-23 15:08
回复 20# ghostwwl


记得没错的话 应该可以记录所有没有使用索引的语句

是的,可以通过 log_queries_not_using_indexes 这个参数来实现。

http://dev.mysql.com/doc/refman/5.6/en/slow-query-log.html
By default, administrative statements are not logged, nor are queries that do not use indexes for lookups. This behavior can be changed using log_slow_admin_statements and log_queries_not_using_indexes, as described later.
作者: cjfeii    时间: 2016-02-24 10:18
cnlnzz01  楼主什么时候结贴?求中奖啊
作者: cnlnzz01    时间: 2016-03-03 15:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: cjfeii    时间: 2016-03-04 08:58
多谢多谢   回复 31# cnlnzz01


   
作者: cnlnzz01    时间: 2016-03-04 16:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: seesea2517    时间: 2016-03-05 23:29
本帖最后由 seesea2517 于 2016-03-05 23:29 编辑

回复 33# cnlnzz01


    加油开发新功能
作者: qijiang123    时间: 2016-05-25 18:29
OneAPM公司的Cloud Insight 是一个数据管理平台,支持 MySQL 的监控。提供数据聚合、过滤、分组的功能,让用户能够在集群环境中,了解多节点的 MySQL 运行整体情况,迅速做出判断可以在官网注册试用哦~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2