一、慢日志查看
查看慢日志是否开启
show variables like '%slow%';
slow_query_log:慢查询日志是否开启
slow_query_log_file:慢查询日志存储文件
二、binlog内容
mysql的binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句((除了数据查询语句)信息。便于数据库进行主从库数据同步和恢复。
binlog的三种设置:STATMENT、ROW、MIXED
1、STATMENT模式:基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中。
优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁盘IO,提高性能。
缺点:在某些情况下会导致master-slave中的数据不一致
2、ROW模式:基于行的复制(row-based replication, RBR):不记录每一条SQL语句的上下文信息,仅需记录哪条数据被修改了,修改成了什么样子了。
优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。
缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。
3、MIXED模式(mixed-based replication, MBR):以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式,相当于综合了前两者的优点。
查看后台的bin_log是否开启:
show variables like 'log_%';
log_bin:是否开启,ON为开启,OFF为关闭
log_bin_basename:binlog存储的目录
查看mysql的binlog设置
show variables like 'binlog_format';
查看所有binlog日志列表
show master logs;
查看最新一个binlog日志的编号名称,及其最后一个操作事件结束点
show master status;
清空所有binlog日志
reset master;
查看binlog日志内容
show binlog events in '上面查询到的最新binlog';
修改binlog的模式
set global binlog_format='STATEMENT';
操作了一个删除语句后内容,示例:
查看binlog情况,STATEMENT模式:
查看binlog情况,ROW模式:
查看binlog情况,MIXED模式
三、mysql查询结果发送客户端过程
MySQL 是“边读边发的”,如果客户端接收得慢,会导致 MySQL 服务端由于结果发不出去,这个事务的执行时间变长。流程:
1、获取一行,写到 net_buffer 中。这块内存的大小是由参数 net_buffer_length 定义的,默认是 16k。2、重复获取行,直到 net_buffer 写满,调用网络接口发出去。
3、如果发送成功,就清空 net_buffer,然后继续取下一行,并写入 net_buffer。
4、如果发送函数返回 EAGAIN 或 WSAEWOULDBLOCK,就表示本地网络栈(socket send buffer)写满了,进入等待。直到网络栈重新可写,再继续发送。