shjhcx 发表于 2015-12-11 10:55

一直很喜欢Mysql的路过:victory:

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

不会,拿起小板凳围观{:yxh110:}

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

这本书其实还不错,看完就会觉得不那么高大上,哎,慢慢学,不要着急啊。{:1_1:}

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 之类 看是否硬件瓶颈
页: 1 [2] 3 4
查看完整版本: 浅谈Mysql高可用,DBA们将如何应对?