乐视mysql面试题

http://blog.itpub.net/28916011/viewspace-2093197/

最近,朋友去乐视面试了mysql DBA,以下是我据整理的乐视mysql面试题答案,供大家参考

1. MYISAM和INNODB的不同?
答:主要有以下几点区别:
   a)构造上的区别
     MyISAM在磁盘上存储成三个文件,其中.frm文件存储表定义;.MYD (MYData)为数据文件;.MYI (MYIndex)为索引文件。
     而innodb是由.frm文件、表空间(分为独立表空间或者共享表空间)和日志文件(redo log)组成。
    b)事务上的区别
      myisam不支持事务;而innodb支持事务。
    c)锁上的区别
 myisam使用的是表锁;而innodb使用的行锁(当然innodb也支持表锁)。
 表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许,因此myisam支持的并发量低,但myisam不会出现死锁;
 行级锁:只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。因此行锁能大大的减少数据库操作的冲突,但有时会导致死锁。
    d)是否支持外键的区别
 myisam不支持外键,innodb支持外键
    e) select count(*)的区别
 对于没有where的count(*)使用MyISAM要比InnoDB快得多。因为MyISAM内置了一个计数器,count(*)时它直接从计数器中读,而InnoDB必须扫描全表。
    f)myisam只把索引都load到内存中,而innodb存储引擎是把数据和索引都load到内存中

2. 公司现有的数据库架构,总共有几组mysql库?
答:我们公司现在有两组MySQL。其中一套是生产库,一套是测试库。
    生产库和测试库都是用的mha +半同步复制做的高可用。
    我们所有的项目web前端量(大概有10个项目)指向的都是一个机器上的mysql实例。因为我们是传统行业,并发访问量并不是很大,所以目前我们的生产mysql数据库未出现性能问题。

3. 如何提高insert的性能?
答:有如下方法:
     a)合并多条 insert 为一条,即: insert into t values(a,b,c),  (d,e,f) ,,,
       原因分析:主要原因是多条insert合并后日志量(MySQL的binlog和innodb的事务让日志) 减少了,降低日志刷盘的数据量和频率,从而提高效率。通过合并SQL语句,同时也能减少SQL语句解析的次数,减少网络传输的IO。
     b)修改参数 bulk_insert_buffer_size, 调大批量插入的缓存;
     c)设置 innodb_flush_log_at_trx_commit = 0 ,相对于 innodb_flush_log_at_trx_commit = 1 可以十分明显的提升导入速度;
      (备注:innodb_flush_log_at_trx_commit 参数对 InnoDB Log 的写入性能有非常关键的影响。该参数可以设置为0,1,2,解释如下:
    0:log buffer中的数据将以每秒一次的频率写入到log file中,且同时会进行文件系统到磁盘的同步操作,但是每个事务的commit并不会触发任何log buffer 到log file  的刷新或者文件系统到磁盘的刷新操作;
    1:在每次事务提交的时候将log buffer 中的数据都会写入到log file,同时也会触发文件系统到磁盘的同步;
    2:事务提交会触发log buffer 到log file的刷新,但并不会触发磁盘文件系统到磁盘的同步。此外,每秒会有一次文件系统到磁盘同步操作。
        )

d)手动使用事务
           因为mysql默认是autocommit的,这样每插入一条数据,都会进行一次commit;所以,为了减少创建事务的消耗,我们可用手工使用事务,即START TRANSACTION;insert 。。,insert。。 commit;即执行多个insert后再一起提交;一般1000条insert 提交一次。

4. 和上一个问题相关,如果insert等dml语句的性能有问题的话,或者其他问题的存在,可能造成同步延迟,所以如何有效避免同步延迟的出现?

答:MySQL主从同步延迟的最主要原因就是主库是多线程写,而从库只有一个线程(即slave_sql_running)来同步,所以在主库中如果有一个ddl或dml操作执行10分钟,那么这个操作在从库上同样需要执行10分钟。有人可能会问:“主库上那个相同的DDL、DML也需要执行10分,为什么slave会延时?”,答案是master可以并发,Slave_SQL_Running线程却不可以。
所以,为了减少从库的延时,我们需要平时做好以下维护:
   a)尽量让主库的dml或者ddl快速执行,如提高insert的效率(方法见上);
   b) 为了安全,有人可能会将主库的sync_binlog设置为1,innodb_flush_log_at_trx_commit也设置为1之类的,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0,来提高从库sql的执行效率。
   (备注:sync_binlog是控制binlog_cache刷新到磁盘binlog频率的,而innodb_flush_log_at_trx_commit是控制redo log buffer刷新到磁盘redolog频率的。sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。如果sync_binlog>0,表示每sync_binlog次事务提交,MySQL调用文件系统的刷新操作将缓存刷下去。最安全的就是sync_binlog=1了,表示每次事务提交,MySQL都会把binlog刷下去。这样的话,在数据库所在的主机操作系统损坏或者突然掉电的情况下,系统才有可能丢失1个事务的数据。所以sync_binlog=1保证了数据安全,但是性能最差。)
    c)使用比主库更好的硬件设备作为slave
    d) 使用mysql 5.6新参数 slave_parallel_workers ,使从库多线程,不过,slave_parallel_workers只能支持一个实例下多个 database 间的并发复制,并不能真正做到多表并发复制。因此在较大并发负载时,slave还是没有办法及时追上master,需要想办法进行优化。
    e)升级Mysql到5.7,因为mysql 5.7支持真正意义的从库多线程了,即主库多少线程,从库也多少线程。mysql 5.7号称主从复制永不丢数据(一直没时间试用过)。

5. 有没有用GTID,对GTID了解吗?
答:用过GTID。曾经民航局的一个项目就用的是GTID。
    GTID是mysql 5.6的新东西,用事务提交号替换binlog的位置号。不过GTID这个东西在5.6还是有很多局限性的,个人不建议用。
    GTID的全称为 global transaction identifier  , 可以翻译为全局事务标示符。
    GTID由两部分组成:GTID = source_id:transaction_id
    source_id用于标示源服务器,用server_uuid来表示,这个值在第一次启动时生成,并写入到配置文件data/auto.cnf中
    transaction_id则是根据在源服务器上第几个提交的事务来确定。

6. Innodb是行锁,那什么时候会产生行锁,什么情况下会变成表锁?
答:一般情况下,innodb只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的,因此,这时候innodb加的就是行锁;
   但是,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”。

7. 使用过其他分支版本的数据库吗?percona,mariadb等。对percona的pxc集群了解吗?

答:除了oracle旗下的MySQL外,我还使用过percona server。percona是在源生mysql的基础上,进行了优化和改进,所以percona的性能比mysql更好。目前,我知道percona提供免费的线程池功能,而社区版的mysql没有线程池的功能(当然,企业版的mysql是有线程池的,但是需要收费);另外percona还支持NUMA等功能。
    我熟悉pxc,我曾经在测试环境搭建过pxc,但是没有在生产上使用,因为目前使用pxc的企业不是很多,目前我知道搜狐在用pxc。
    pxc是摒弃mysql主从的概念,即对于pxc来说,每个节点都可以读写,并且写一份数据,其他节点会同时拥有,这是一种同步的复制方案(区别于Mysql主从的异步复制)

8. 除了mysql,还了解过其他数据库吗?oracle,redis,mongodb等。

答:除了mysql,我还熟悉oracle,对oracle有两年的使用经验。
    不过,我对redis和mongodb没有接触过,如果工作需要,我会学习他们。

9. 工作中遇到的最大的问题以及做的最好的工作?
答:自由发挥

10. 分库分表有没有用到,怎么实现的?

答:目前,根据我们的业务量,还没有使用分库分表。但是我有在关注MySQL的分布式方案,以前mysql分布式比较常用的方法是用阿里巴巴的cobar,将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分,或将不同的表放入不同的库,但是后来发现cobar有一个问题一直不能很好的解决。目前,我关注到有很多人用mycat替换了cobar。

11. 新创建的数据库,需要调整哪些参数?
答:调整两方面的参数,即调整操作系统的和数据库my.cnf的:
    a)操作系统的参数
      linux参数系统的默认参数很多都是很保守的,所以需要根据服务器性能将一些参数进行加大,如我会调整nofile(最大文件句柄数)和nproc(最大线程数),将其放到最大;我会将vm.swappiness设置为0,表示最大限度使用物理内存,然后才是 swap空间;我会将net.ipv4.tcp_tw_reuse 设置为1,表示将netstat中出现的TIME-WAIT状态的sockets重用到新的TCP连接上...等等
    b)数据库的参数
 对于mysql来说,my.cnf的参数调整非常重要,如果采用默认值,那么是很难发挥mysql性能的。一般我会特别关注innodb_buffer_pool这个值,该值一般设置为物理内存的70%,这样就可以把mysql的表和索引最大限度的load到内存中,从而使mysql数据库性能得到大的提升;另外,我还特别关注sync_binlog和innodb_flush_log_at_trx_commit这两个值的设置,具体含义见上;还有max_user_connections ,我一般将该值设置为2000;还有innodb_lock_wait_timeout,看程序是长连接还是短连接,一般我会设置为60秒;还有innodb_log_file_size ,这个值也设置的大一点,我一般设置的为500M或1G。

12. mysql的权限怎么管理?
答:只给insert,update,select和delete四个权限即可。有时候delete都不给。

13. 有开发基础吗?
答:没有

14. 如果发现CPU,或者IO压力很大,怎么定位问题?

答:
   1、首先我会用top命令和iostat命令,定位是什么进程在占用cpu和磁盘io; 
   2、如果是mysql的问题,我会登录到数据库,通过show full processlist命令,看现在数据库在执行什么sql语句,是否有语句长时间执行使数据库卡住;
   3、执行show innodb engine status命令,查看数据库是否有锁资源争用;
   4、查看mysql慢查询日志,看是否有慢sql;
   5、找到引起数据库占用资源高的语句,进行优化,该建索引的建索引,索引不合适的删索引,或者根据情况kill掉耗费资源的sql语句等

时间: 2024-10-13 16:12:37

乐视mysql面试题的相关文章

乐视mysql面试题【转】

最近,朋友去乐视面试了mysql DBA,以下是我据整理的乐视mysql面试题答案,供大家参考 1. MYISAM和INNODB的不同?答:主要有以下几点区别:   a)构造上的区别     MyISAM在磁盘上存储成三个文件,其中.frm文件存储表定义:.MYD (MYData)为数据文件:.MYI (MYIndex)为索引文件.     而innodb是由.frm文件.表空间(分为独立表空间或者共享表空间)和日志文件(redo log)组成.    b)事务上的区别      myisam不

2017年秋季校招前端面经(百度,腾讯,网易,华为,乐视等)

华为实习生面试(人生第一面,4月份):那时候学了前端两月有余,很多傻傻不知道. 面试官人蛮好的,问了很多我都不知道,所以什么方面都问了一些,不过最后还是说了句,算你过了. 技术面: 自我介绍语言混,没有逻辑估,估计30多秒. 问了一个排序算法的优化(具体算法名字忘了) 网络安全方面的问题 简历的项目描述(没有总结过,说的很渣) 对测试的一些了解 模块化开发了解吗 如何编写代码 网站性能优化的方法 要不要做测试(我说不要) HR面: 自我介绍 你的优势(最好自己先总结好) 如果面试没通过,你觉得原

乐视助酷派生态化重生,过亿销量目标不难,难的是…

20日,已被乐视控股的酷派发布的新款手机cool1 dual生态手机的预约量已突破500万.而此前不久,IDC发布数据报告,其中预估Q2小米智能手机在中国的出货量为1050万部,同比下降38.4%,这一数据让小米尴尬的同时也再次让围观群众意识到,原来看似稳定的智能手机市场格局仍然会出现新的变数. 乐视生态支撑下酷派打了场翻身仗,cool1 dual生态手机预约量突破500万台 曾几何时小米被视为智能手机市场的神话,但如今看来即便是最初有多么风光无限,想永久立于不败之地也并非易事.同样的小米神话破

生态体系是核心竞争力,同行模仿乐视有无前途?

最近,一则有关爱奇艺将成立合资公司生产自主品牌电视的新闻在网上传得是有鼻子有眼,按照腾讯科技的报道,爱奇艺正计划生产发布独立品牌电视,而且爱奇艺将联合某投资基金投资3亿左右注册合资公司,代工厂商目前则敲定为TCL旗下华星光电. 不过这则传闻似乎又不太真实,新浪科技报道称爱奇艺否认推自主品牌电视,而是继续坚持iQiyi inside策略,以软件技术和内容优势与硬件厂商展开合作.不过不管怎么样,爱奇艺正在对硬件领域产生越来越浓厚的兴趣,虽然口头否认,但谁又敢肯定爱奇艺没有过类似的想法呢?毕竟,推自主

小米熬不成大粥 乐视生态更具优势

笔者按:对于后起之秀而言,人们在评断其优劣时,往往会将其剖析地淋漓尽致.看上去一大堆高深莫测的数据,抑或玄之又玄的文字,让人如坠雾里,不明所以.但事实上,不论数据还是堆砌的文字,都只是虚幻.而真正承载后起之秀未来的还是最初的目标和阶段的施行力度.当然,也离不开大环境的配合. 乐视和小米对簿公堂的事件,瞬间点燃了整个互联网业界的激情.就像当年的3Q大战.3百大战一样,乐视和小米这两大后起之秀成为针锋相对的"死对头".与此同时,人们对其背后的"阴谋诡计"分析地明明白白.

从苹果到乐视,生态为何没兑现“赚钱梦”?

一旦iPhone 8上市,业界预测苹果将会成为首家市值突破1万亿美元大关的企业.在这万亿美元市值中,硬件仍然是苹果最大的收益来源和支柱,"生态收益"部分却少得可怜.苹果绘画并投入数十亿美元巨资打造的巨大生态梦想,并未如乔布斯生前所愿成为苹果收益的发动机. 相对于苹果依然靠硬件盈利,国内备受争议对象--乐视就没这么幸运.他所描述的生态圈帝国,却愈发成为一个又一个只活在PPT中的"美梦".一次又一次地勾起观看者的兴奋,却始终看不到结果,甚至让乐视自己陷入了亏损中无法自拔

乐视电视明明可以降低配置,为什么偏偏要涨价?

9月19日,是属于乐视和乐迷的节日. 在朋友圈不时被更新的消息更迭过程中,这场主题为"黑色919"的全民促销活动频频刷爆了大多数人的朋友圈--根据乐视公布的最终战报显示,919乐迷节全生态总销售额突破49.7亿元的成绩(超级电视销量超86.6万台.超级手机总销量超117.8万台,乐视会员销售额超27.1亿元).根据官方统计公布数据来看,这场惊人的全民促销活动中,乐视超级电视创中国电视行业史诗级历史纪录,不仅超去年919乐迷节总销量两倍,更打破去年双十一天猫所有电视品牌销量总和的64.3

智能路由器又多一个玩家——乐视TV

智能路由器又多一个玩家--乐视TV 2014年05月04日18:04 来源:搜狐IT 作者:雷科技 正文 我来说两句(1人参与) 报名试驾BMW赢莱卡相机 手机客户端 | 扫描到手机 就在小米路由器正式发布10天之后,智能路由器市场又增新变数. 乐视TV高级副总裁彭钢发了一条微博,"一个带1T硬盘的智能路由器到底卖多少钱最好?乐视要不要做路由器,需要什么样的配置与性能,就由乐迷你来定义吧!当然,如果乐视做智能路由器,一定会像超级电视那样"两倍性能,一半价格",成本定价回馈乐迷

高端硬件+大屏运营,乐视超级电视如何成为终端流量入口?

近期,中国电子视像行业协会与奥维云网(AVC)联合发布2017年一季度中国彩电市场总结报告,报告显示,2017年彩电需求已从数量增长阶段进入质量提升阶段,市场呈现尺寸升级.功能升级.高端需求三大趋势,其中,智能化大尺寸超轻薄电视更受消费者追捧. 据奥维云网(AVC)数据显示,一季度中小尺寸(50英寸以下)产品的市场占有率较去年同期下降了8.7个百分点:大尺寸(55英寸以上)产品的市场占有率高达36.4%,较去年同期上升了9.7个百分点,其中55寸上升了6.8个百分点,且2017年第一季度智能电视