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

查看最近的SQL执行信息

原创 徐佩怡 2020-09-22
2892

查看最近的top sql 语句
使用 performance_schema中的语句激励表可以记录最近这段时间MySQL在执行的一些SQL语句,

这里以events_statements_history 作为例子:

查询结果按照语句完成时间倒序排序

##按照语句完成时间倒序排序
mysql> select  THREAD_ID,EVENT_NAME,SOURCE,sys.format_time(timer_wait),sys.format_time(lock_time),SQL_TEXT,CURRENT_SCHEMA,MESSAGE_TEXT,ROWS_AFFECTED,ROWS_SENT,ROWS_EXAMINED from performance_schema.events_statements_history where CURRENT_SCHEMA!= 'performance_schema' order by timer_wait desc limit 10\G

通常优化SQL语句的原则是,原画执行次数最多的语句,然后是执行时间最长的语句。以上查询的结果并不是通常所说的top SQL的语句,可以使用events_statements_summary_by_digest表来查询经过统计之后的TOP SQL语句:

select  SCHEMA_NAME,DIGEST_TEXT,COUNT_STAR, sys.format_time(sum_timer_wait) as sum_time,         sys.format_time(min_timer_wait) as min_time,         sys.format_time(avg_timer_wait) as avg_time,
      sys.format_time(max_timer_wait) as max_time,         sys.format_time(sum_lock_time) as sum_lock_time,         SUM_ROWS_AFFECTED, SUM_ROWS_SENT,SUM_ROWS_EXAMINED from events_statements_summary_by_digest where  SCHEMA_NAME is not null order by  COUNT_STAR desc limit 10;
##events_statements_summary_by_digest该表中记录的SQL语句文本并不完整,默认情况下仅仅截取了1024字节,并且也是对这1024字节使用hash计算的,##把hashcode的结果累积在一起,periformance_schema提供的数据只能算作慢查询日志的补充,如果需要完整的SQL文本,还是需要依赖慢查询日志。

截屏20200908 下午4.56.32.png

查询最近执行失败的SQL(找到某一具体的报错SQL)(找到语法错误的SQL)

假设,先执行了一条语法错误的SQL:

mysql> seletc * from xpp.q;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

现在要找出它:
select THREAD_ID,EVENT_NAME,SOURCE, sys.format_time(timer_wait) as exec_time, sys.format_time(lock_time) as lock_time, SQL_TEXT,CURRENT_SCHEMA,MESSAGE_TEXT,ROWS_AFFECTED,ROWS_SENT,ROWS_EXAMINED,MYSQL_ERRNO from performance_schema.events_statements_history where MYSQL_ERRNO=XXXXX \G

mysql> select  THREAD_ID,EVENT_NAME,SOURCE, sys.format_time(timer_wait) as exec_time,         sys.format_time(lock_time) as lock_time,         SQL_TEXT,CURRENT_SCHEMA,MESSAGE_TEXT,ROWS_AFFECTED,ROWS_SENT,ROWS_EXAMINED,MYSQL_ERRNO from performance_schema.events_statements_history where  MYSQL_ERRNO=1064\G
*************************** 1. row ***************************
     THREAD_ID: 124
    EVENT_NAME: statement/sql/error
        SOURCE: init_net_server_extension.cc:93
     exec_time: 67.06 us
     lock_time: 0 ps
      SQL_TEXT: seletc * from xpp.q
CURRENT_SCHEMA: NULL
  MESSAGE_TEXT: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
 ROWS_AFFECTED: 0
     ROWS_SENT: 0
 ROWS_EXAMINED: 0
   MYSQL_ERRNO: 1064
1 rows in set (0.00 sec)
mysql> select  errors,THREAD_ID,EVENT_NAME,SOURCE, sys.format_time(timer_wait) as exec_time,         sys.format_time(lock_time) as lock_time,         SQL_TEXT,CURRENT_SCHEMA,MESSAGE_TEXT,ROWS_AFFECTED,ROWS_SENT,ROWS_EXAMINED,MYSQL_ERRNO from performance_schema.events_statements_history where errors>0\G
*************************** 1. row ***************************
        errors: 1
     THREAD_ID: 124
    EVENT_NAME: statement/sql/error
        SOURCE: init_net_server_extension.cc:93
     exec_time: 67.06 us
     lock_time: 0 ps
      SQL_TEXT: seletc * from xpp.q
CURRENT_SCHEMA: NULL
  MESSAGE_TEXT: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
 ROWS_AFFECTED: 0
     ROWS_SENT: 0
 ROWS_EXAMINED: 0
   MYSQL_ERRNO: 1064
1 row in set (0.00 sec)

##在events_statements_summary_by_digest表中查询发生错误次数大于0的记录
mysql> select  SCHEMA_NAME,DIGEST_TEXT,COUNT_STAR,    sys.format_time(avg_timer_wait) as avg_time,         sys.format_time(max_timer_wait) as max_time,         sys.format_time(sum_lock_time) as sum_lock_time,         SUM_ERRORS,FIRST_SEEN,LAST_SEEN from performance_schema.events_statements_summary_by_digest       where sum_errors!=0\G


##注意,events_statements_summary_by_digest表中不记录任何具体的错误信息,只做错误语句统计。所以,如果需要查询具体的错误信息(错误代码,错误的提示信息以及具体的错误SQL文本等),还需要查询events_statements_history和events_statements_history_long表。

mysql>select * from sys.session where conn_id!=connection_id()
*************************** 31. row ***************************
                thd_id: 126
               conn_id: 88
                  user: sbtest@localhost
                    db: sbtest
               command: Query
                 state: updating
                  time: 8
     current_statement: UPDATE sbtest5 SET c='15734170 ... 900-05644653255' WHERE id=4976
     statement_latency: 8.21 s
              progress: NULL
          lock_latency: 31.00 us
         rows_examined: 0
             rows_sent: 0
         rows_affected: 0
            tmp_tables: 0
       tmp_disk_tables: 0
             full_scan: NO
        last_statement: NULL
last_statement_latency: NULL
        current_memory: 52.88 KiB
             last_wait: NULL
     last_wait_latency: NULL
                source: NULL
           trx_latency: 8.21 s
             trx_state: ACTIVE
        trx_autocommit: NO
                   pid: NULL
          program_name: NULL

##progress 表示 进度百分比


查看多线程复制的报错信息:

MySQL5.6开始支持基于库级别的并行复制,在MySQL5.7版本中支持事务的并行复制,在开启并行复制后一旦发生复制报错,使用show slave status语句无法查看到具体的报错详情。在多线程并行复制下,SQL线程的报错信息就是根据worker线程的报错信息汇总的信息。

mysql>show slave status\G
...
...
									Last_SQL_Error:Coordinator stopped bacause there were error(s) in the wroker(s).The most recent failure being:Worker 1 failed executing transaction'XXXXXXXXXXXXXXXXXXXXXXXX:XXXXXX'at master log mysql-bin.000XX,end_log_pos XXXXX.See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others,if any.
...
...

根据提示查看:
select * from performance_schema.replication_applier_status_by_worker

performance_schema.replication_applier_status_by_worker详细记录了每一个worker线程的详细信息,我们可以从中找到发生报错的worker线程的具报错原因。

处于历史原因,performance_schema中复制信息记录表仅仅记录了GTID相关的信息,MYSQL系统字典库中slave_master_info,slave_relay_log_info,slave_worker_info表记录与binlog位置相关的信息。 如果选择将复制信息记录在磁盘上,磁盘上还存在master.info,relay_log.info等文件记录与binlog位置相关的信息
2020-09-18T09:50:05.258326Z 13 [ERROR] [MY-010584] [Repl] Slave I/O for channel ‘’: error connecting to master ‘repl@10.30.5.249:3306’ - retry-time: 60 retries: 113 message: Authentication plugin

‘caching_sha2_password’ reported error: Authentication requires secure connection. Error_code: MY-002061

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论