1、MySQL偶尔会出现OOM(内存溢出)现象,导致MySQl服务重启,以下哪种方式能有效缓解OOM的情况发生( )
A.适当调低innodb_buffer_pool_size大小,5.7之前需要重启MySQL服务。
B.降低并发,避免查询分组排序和更多table cache。
C.开启swap。
D.将一个实例下库表拆成多个库表(分库分表)。
2、INSERT BUFFER即合并插入缓存,从innodb 1.0.x版本开始引入CHANGE BUFFER,下面关于insert buffer说法正确的是( )
A.合并插入只适用非唯一的辅助索引。
B.合并插入的目的是使随机io变顺序io,提升性能。
C.合并插入的频率为每1s和10s都会进行。
D.合并插入由master thread控制。
3、在MySQL的众多存储引擎中,只有InnoDB支持事务,关于事物隔离级别,以下说法错误的是( )
A.Read uncommitted、Read committed 、Repeatable read、Serializable四种隔离级别并行性能依次降低,安全性依次提高。
B.脏读是某一事务读取了另外一个事务未提交的数据,不可重复读是读取了其他事务提交的数据,脏读和不可重复读都可以通过事物隔离级别控制。
C.RR隔离级别,只能返回比当前事务早的提交插入、更新、删除值。
D.RR和RC隔离级别都存在幻读,无法避免。
4、Innodb为实现MVCC所使用的内部快照采用read view方式,关于read view 说法正确的是( )
A.RR是每个事务重建读视图,整个事务存在期间都用这个视图。
B.RC是每条SQL创建读视图,在每个SQL语句开始执行的时候创建的,隔离作用域仅限该条SQL语句。
C.Read uncommitted是不创建读视图的,直接返回记录上的最新值。
D.read view 存在物理结构,跟普通视图一样,记录当时事物执行时的数据信息。
5、Undo log回滚日志,提供回滚操作,是为了满足事物的原子性,关于undo说法正确的是( )
A.MySQL5.6版本以后支持独立的undo表空间,可设置多个表空间。8.0之前默认为128个回滚段,启动后不能动态修改。5.7以后可以清理undo log。
B.undo log是为了满足事务的原子性,也可以用来辅助完成事务的持久化。
C.undo由purge cleaner thread控制,负责回收已经使用并分配的undo页,事物提交时,会立即删除undo log。
D.insert事物提交时,undo log直接删除,不进行purge操作;update和delete操作会放入undo log链表,等待purge线程删除。
6、关于MySQL Innodb 行记录隐藏字段的说法正确的是( )
A.每行记录都有三个隐藏字段:事务ID(DB_TRX_ID)、回滚指针(DB_ROLL_PTR)、隐藏的ID(DB_ROW_ID)。
B.DB_TRX_ID记录的是行变化发生时的版本号,而不是事件实际发生的时间。
C.DB_ROLL_PTR为指向写到rollback segment(回滚段)的一条undo log记录。
D.DB_ROW_ID用于索引中,主键和唯一索引就是利用这个值实现。
7、MySQL默认页的大小为16K,操作系统为4K,在意外掉电时很容易引起部分写失败问题,所以引入doablewrite来避免此问题,innodb_doublewrite参数可以控制是否开启。以下关于double write的说法,正确的是( )
A.脏页和redo log都需要写doublewrite,都是为了解决部分写失败问题。
B.doublewrite由两部分组成,一部分为内存中的doublewrite buffer,另一部分为磁盘上共享表空间中,大小都为2M。
C.脏页刷新过程为先写入doublewrite buffer中,再分两次,每次1M写入共享表空间中,然后再将doublewrite buffe脏页离散写入各个表空间文件中。
D.如果在写入共享表空间时失败,在恢复时会通过重做日志重新写入到doublewrite buffer;如果共享表空间写入成功,但在写入磁盘时失败,在恢复时会用doublewrite空间中的数据来恢复异常页面的数据。
8、MySQL的二进制日志binlog可以说是MySQL最重要的日志,关于binlog说法正确的是( )
A.当指定了binlog大小,如果有大事物,一个binlog放不下,会放到下一个binlog中,而不会导致binlog超过指定大小。
B.如果主库binlog格式为statement,主库执行分页删除时,可能造成从库数据不一致。
C.主从复制时,binlog dump线程将binlog cache中event推送给从库,而不是从binlog file中even推送给从库。
D.从库存在两个用户为system user的线程,分别为复制的io thread和sql thread。当从库执行stop slave时,不会主动通知主库的binlog dump线程。
9、MySQL Innodb数据是先写到内存的,再将内存数据写到磁盘,当脏页刷盘的时候会产生检查点,以下哪些情况会产生checkpoint( )
A.flush lru list,如果free buffer少于1024个页,则会触发刷脏页到磁盘产生checkpoint。
B.master thread,每1s、10s会触发将脏页刷到磁盘产生checkpoint。
C.dirty page too much,默认当buffer pool中max_dirty_page_pct达75%时,会将脏页刷到磁盘产生checkpoint。
D.redo log full switch,重做日志写满,切换日志时会产生checkpoint。
10、不考虑组提交方式,当sync_binlog=1、innodb_flush_log_at_trx_commit=1时,一个事物的流程:加载数据页到内存-->修改数据undo-->更新数据到内存-->写入redolog(状态为prepare)-->写binlog-->redolog flush-->binlog flush-->提交事务(redolog状态修改为commit)。MySQL为了保证redo log 和binlog一致性,内部事物提交采用xa两阶段方式,以下关于这个事物的说法,正确的是( )
A.如果redo log file中未提交,binlog file中存在,会将redo log中的这个未提交事物提交。
B.如果redo log file中未提交,binlog file中不存在,会将redo log中的这个未提交事物回滚。
C.如果redo log file中已提交,binlog file中存在,正常完成的事务,不需要恢复。
D.如果redo log file中已提交,binlog file中不存在,会将redo log中的这个提交事物回滚。