暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL DBA的自我修养(三)

记忆乘凉 2016-12-16
265

21:简单解释一下 sharp checkpoint fuzzy checkpoint 同时解释一下 fuzzy checkpoint的工作过程,重点。

Checkpoint(检查点)的作用:

1.减少数据库恢复时间   

2.缓冲池内存不够时,刷新脏页到磁盘    

3.重做日志不可用时,刷新脏页

Sharp checkpoint:数据库关闭时会将所有的脏页都刷新回磁盘,由innodb_fast_shutdown参数控制,默认为1

Fuzzy checkpoint:在数据库运行时采用,只刷新一部分脏页,并不是全部刷新。

概括一下fuzzycheckpoint的几种情况及其工作过程:

Maser thread checkpoint

Master thread实现的checkpoint就是指其本身的工作,它会以每秒和每十秒的速度刷新缓冲池中一部分的脏页,具体的数量要看Master thread的状态和参数的设置,这个过程是异步的。

FLUSH_LRU_LIST checkpoint

从名字就可以看出这个刷新时根据LRU列表得来的,我们在进行DML操作时,要保证缓冲池中有可用的页,假设Free列表中没有可用的页,我们就得移除LRU尾端的页,如果这些页里含有脏页,那么就需要进行checkpoint

Async/Sync Flush checkpoint

这个是指重做日志不够用的情况,刷新的是脏页列表上的页。当已经记录到重做日志中单还没有刷新到磁盘的页过多的时候,就会导致重做日志写满且不可用的情况。它会定义一个比较规则,设定两个阈值,阈值的设定为重做日志大小的75%90%,一旦大于这两个值,就会触发AsyncSync操作,使得从Flush列表中刷新足够多的页,使重做日志的大小小于第一个阈值。

Dirty Page too much Checkpoint

这种情况从名字就很容易理解,就是缓冲池中脏页的数量过多,导致innodb引擎进行强制的checkpoint,它和FLUSH_LRU_LIST checkpoint一样都是为了缓冲池中有足够可用的页。这个阈值由innodb_max_dirty_pages_pct控制,默认为75,表示缓冲池中脏页的数量占据了75%时会进行checkpoint

 

22:通过 show engine innodb status 解释一下日志相关的四行数据含义,同时对下面四个需求做成解决方案

1.  我们的日志生成速度?

2.  日志的写入速度?

3.  脏页的写入速度

4.  数据库启动时间是多少?


1.生成的速率可以看Log equence number增长的速率

2.日志的写入速度可以看Log flushed up增长的速度

3.脏页的写入速度可以看Pages checkpoint增长的速度

4.数据库启动的时间可以通过最新LSNLAST LSN做对比除以生成速度

 

23:详细解释触发写入操作的四种情况,也就是四种检查点的触发因素

如何对每一种写入操作进行控制,避免某些写入动作的发生,特别是阻塞用户

线程的写入操作。

  1. 最新的LSN由数据库的具体操作触发,具体表现为数据库的写入量

  2. 日志的写入由redo的刷新机制和master thread触发

  3. 脏页的刷新由checkpoint触发控制

  4. 最后的LSN记录由IO线程控制

 

24:调整系统关闭的参数,说明每一个参数的意义。

Innodb_fast_shutdown 在关闭时,该参数影响着innodb存储引擎的行为,该参数可取值为012,默认为1

0表示在MySQL数据库关闭时,它需要完成所有的fullpurgemerge insertbuffer,并且将所有的脏页刷新回磁盘,如果innodb在升级时,必须调整成0

1表示不需要完成上述的fill purge merge insert buffer操作,但是在缓冲池中还是会有部分数据脏页刷新回磁盘。

2表示不完成full purge merge insert buffer操作,也不将缓冲池中的数据脏页写回磁盘,而是将日志都写入日志文件。这样不会有任何事务的丢失,但是下次MySQL启动时,会进行恢复操作。

 

25:调整系统启动恢复的参数,说明每一个参数的意义。

Innodb_force_recovery 参数控制着innodb存储引擎的恢复状况,该参数可取值为0~6,默认为0,但是除0之后的时候不允许数据库执行DML操作。

0:进行所有的恢复操作;

1(SRV _FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页;

2.(SRV FORCE_ NO_ BACKGROUND):阻止Master Thread线程的运行,如Master Thread线程需要进行 full purge操作,而这会导致crash(宕机);

3 (SRV _FORCE_NO_TRX_UNDO):不进行事务的回滚操作;

4(SRV FORCE_ NO_ IBUF MERGE):不进行插入缓冲的合并操作;

5(SRV FORCE_ NO_ UNDO_ LOG_ SCAN):不查看撤销日志(undo log),innodb存储引擎会将未提交的事务视为已提交;

6 SRV FORCE_NO_LOG_REDO:不进行前滚的操作。

 

26:如果系统因为执行了一个非常大的 dmlddl 操作,我们想断掉这个操作,怎么办,要求速度快一点;

1. kill thread 需要 rollback 时间可能很长;

2. kill process 重新启动服务,只需要前滚时间短;

 

27:如何确认系统写入操作是大了还是小了(多个角度)如何调整,调整后如何确认是否合适。

  1. 通过iostat命令查询系统IO状态

  2. 查看IO线程工作状态,调整IO线程数量

  3. 通过double write 写入页数和次数比值得出写入压力

  4. 日志生成速度、日志写入速度、脏页刷新速度已经三者之间的差值比较

  5. 脏页所占缓冲池中的比例

  6. 通过实际情况调整innodb_io_capacity

  7. 调整innodb_lru_scan_depth LRU列表可用空间

  8. 可进行压力测试

 

28:如何对数据库进行性能监控,列举常见的一些监控参数的查找方式

Show global status;               查看全局变量

Show engine innodb status;   查看innodb情况

Show full processlist;

show status like  ‘%%’;

show variables like  ‘%%’;

 

29:使用 tpcc 进行压力测试.

1.下载安装包;

2.cd scr ; make;

3.mysqladmin create tpcc1000;#建库

4.mysql tpcc1000 < create_table.sql;#建表

5.mysql tpcc1000 < add_fkey_idx.sql;#建索引

6.tpcc_load -h127.0.0.1 -d tpcc1000 -u root-p "" -w 1000 #导数据

7.tpcc_start -h127.0.0.1 -P3306 -dtpcc1000-uroot -w1000 -c32 -r10 -l10800;压力测试(-h 主机;P 端口;d 数据库;u 账号;p 密码;w 仓库数;c 并发线程数;r 数据库预热时长;l 压测时长;f 输出报告日志文件)

 

30:描述一下压力测试都包括哪些方法和工具;

mysqlslapMySQL官方提供的压力测试工具,可以模拟出大量客户端同时操作数据库的情况,通过结果信息来了解数据库的性能状况。

super-smack:支持MySQLPostgreSQL,可以测试连接数及时间、查询数量及时间和处理的请求数等相关值。

tpcc:用来测试典型的复杂OLTP系统的性能,其虚拟实现了一家仓库销售供应公司进行数据库测试。

sysbench:这是一个模块化、跨平台的多线程测试工具,支持测试CPU性能,磁盘IO性能、数据库OLTP等相关测试。


文章转载自记忆乘凉,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论