***************************************目录*************************************************

***************************************概要*************************************************

*************************************问题解答***********************************************

3.1. DP数据库部署方案如何?

  • 15年之前采用的MMM架构,15年之后采用MHA+zebra,详情见: /Users/zhoudengyun/Documents/学习资料/db/蔡金龙-美团点评数据库高可用架构的演进与设想;
  • 线上部署方案是单Master单Slave 目前丽人相关数据库有两个集群:beauty集群(41个库)beautycomesticzone集群(2个库)

  • 目前线上是单实例多数据库(Schema),所有数据库共享物理资源、链接数

3.2. DP数据库配置/最大连接数/TPS/QPS?

  • mysql服务器 :120G内存,os 20,mysql instance 100,CPU 48核的;
  • 最大连接数:2W (所有数据库共享),TPS安全线:3K~5K, QPS:十几W(主键简单查询)

3.3. 分库分表如何设计,细节/难点/多维度分库分表?

3.4. 数据库高可用、高性能方案?

  • 参考:/Users/zhoudengyun/Documents/学习资料/db/蔡金龙-美团点评数据库高可用架构的演进与设想;

3.5. 主从延迟问题,如何查看,有米有监控和告警?

  • 产生的原因:

    • 执行了一个耗时较久的语句,比如暴力的update、delete、insert了过多的记录,可以通过zabbix或者binlog确认。
    • Mater上在较短的时间执行了大量的更新操作(update、delete、insert),Slave来不及执行,导致,可以通过查看zabbix监控来确定原因。
    • Slave上IO恶化(大量的读取操作等),导致Slave上Replay binlog比较缓慢。

    参考:https://wiki.sankuai.com/pages/viewpage.action?pageId=77480628

  • 从延迟告警默认阈值是180s,业务方可以自己调整,关注对应数据集群后能收到告警信息。

3.6. 点评mysql是单实例还是多实例部署,why?

  • 首先目前点评是单实例,没有采用多实例,因为测试下来,单实例性能较好而且便于管理;

  • 目前单实例是部署的有多个数据库,多个数据库共享资源,所有会出现一个库会拖垮另一个库的情况;

3.7. 数据库连接开销有哪些,应用设置最大连接怎么评估?

  • 目前数据库支持的最大连接数是2W,一般应用配置连接池:30~50即可; 详情:todo

3.8. 数据库行锁的等待超时时间是多少,可不可以自定义

  • todo

3.11. 大批量删除数据后,需要重建索引么,消除高水位线?

  • mysql没有高水位线概念,这个是oracle概念;

  • mysql物理删除数据,内存空间不会释放,只是被标记为free,后续重利用;

3.14. innoDB buffer pool问题?

  • CASE引发的一些思考,buffer pool命中率下降,导致慢查询飙升;TODO

3.15. 全量表快照表区别?

*************************************开发常见sql问题汇总*******************************************

mysql oder by limit bug 问题?

MDL问题?

GAP锁问题?

  • 介绍 简单的理解就是执行 delete from `order` where customer_id = 3。这里在order表里面没有customer_id=3 的记录。但是又由于customer_id存在一个索引,mysql根据索引进行搜索,索引的key是(1,2,6),3不在这些key里面而是位于(2,6)之间的gap(间隙)中。Mysql对于(2,6)这个间隙加的锁就叫做Gap锁。
  • 特点 间隙锁只会阻塞insert操作,对于delete和update操作是不会阻塞的,由于锁住的是空隙,所以对于delete和update操作相当于在空数据上操作,没有意义。
  • 解决 在delete的时候,不让事务获取到Gap锁。比如,在执行delete from `order` where customer_id = 3 ;之前, 我们可以先用主键查询看数据是否存在,存在再用主键删除,即可解决上述的死锁问题。
  • 关联CASE CASE
  • 参考阅读 ref1

BufferPool问题?

  • mysql缓存命中率降低--> i/o util 升高 --> cpu被耗光。
    线上常见随着数据量的逐步增大,原先有问题的sql查出来的数据逐步增多,放到mysql的buffpool时正好到了mysql缓存容量的临界点,缓存命中率降低(降低了万分之几),mysql需要从硬盘读取数据,ioutil升高,cpu被耗光 ; 这类问题建议及时做好降级,以及慢查询梳理监控CASE

  • sql调整,语句的改动导致buffer pool的命中率下降,引起连锁反应,慢查询飙升
    CASE

BufferPool问题?

  • mysql缓存命中率降低--> i/o util 升高 --> cpu被耗光。
    线上常见随着数据量的逐步增大,原先有问题的sql查出来的数据逐步增多,放到mysql的buffpool时正好到了mysql缓存容量的临界点,缓存命中率降低(降低了万分之几),mysql需要从硬盘读取数据,ioutil升高,cpu被耗光 ; 这类问题建议及时做好降级,以及慢查询梳理监控CASE

  • sql调整,语句的改动导致buffer pool的命中率下降,引起连锁反应,慢查询飙升
    CASE

results matching ""

    No results matching ""