数据库同步工具
sqlserver,Mysql数据同步软件

利用MySQL系统数据库做性能负载诊断

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

TOP SQL统计信息

可以根据执行时间,阻塞时间,返回的行数等维度来计算顶部sql。另外,您可以根据时间过滤last_seen,并且可以计算具有以下条件的顶部sql最近出现在一定时间段内

  SET  SESSION  TRANSACTION   ISOLATION   LEVEL   READ   UNCOMMITTED  ;

选择

schema_name,

摘要文字,

count_star,

avg_timer_wait / 1000000000000 AS avg_timer_wait,

max_timer_wait / 1000000000000 AS max_timer_wait,

sum_lock_time / count_star / 1000000000000 AS avg_lock_time,

sum_rows_affected / count_star AS avg_rows_affected,

sum_rows_sent / count_star AS avg_rows_sent,

sum_rows_examined / count_star AS avg_rows_examined,

sum_created_tmp_disk_tables / count_star AS avg_create_tmp_disk_tables,

sum_created_tmp_tables / count_star AS avg_create_tmp_tables,

sum_select_full_join / count_star AS avg_select_full_join,

sum_select_full_range_join / count_star AS avg_select_full_range_join,

sum_select_range / count_star AS avg_select_range,

sum_select_range_check / count_star AS avg_select_range,

初见

最后一次露面

FROM performance_schema.events_statements_summary_by_digest

在哪里 last_seen \ gt; date_add(NOW(),间隔- 1 HOUR)

订单 BY

max_timer_wait

- avg_timer_wait

- sum_rows_affected/count_star

- sum_lock_time/count_star

- avg_lock_time

- avg_rows_sent

DESC

限制 10 ;

应该注意的是,该统计信息是基于MySQL执行事务所消耗的资源,而不是语句。作者被迫了一段时间,并举了一个简单的例子。
参考如下。这是一个在循环中写入数据的存储过程。调用方法是调用create_test_data(N),该方法写入N条测试数据。
例如,调用create_test_data(1000000)是要写入100W的测试数据。该执行过程需要几分钟。根据作者的测试用例,avg_timer_wait的维数绝对是TOP SQL。
但是,在查询过程中,我从未发现此存储过程的调用被列为TOP SQL。后来,我尝试在存储过程中添加一个东西,然后成功收集了整个TOP SQL。
因此,performance_schema.events_statements_summary_by_digest中的统计信息基于事务,而不是批处理的执行时间。

 创建定义 = `root` @``过程 `create_test_data`(

IN `loopcnt` INT

语言SQL

不是 确定

内容 SQL

SQL安全定义器

COMMENT ""

开始

-START TRANSACTION ;

loopcnt \ gt; 0

插入 插入 test_mrr(rand_id,create_date) RAND () * 100000000 ,现在( 6 )));

设置 loopcnt = loopcnt - 1 ;

结束 ;

- 提交 ;

END

另一个有趣的一点是,该系统表是少数支持截断的表之一。当然,它是内部的,也是连续收集的过程。

失败执行的SQL统计

我一直认为系统不会记录执行失败\\\\解析错误的SQL。例如,如果您要计算由于超时而失败的语句,则稍后您会发现MySQL将完全记录此信息

将在此处详细记录执行错误语句,包括最终执行失败(超时等),语法错误以及诸如在执行期间生成的警告之类的语句。使用sum_errors \ 0或sum_warnings \\ u> 0过滤performance_schema.events_statements_summary_by_digest。

  SET  SESSION  TRANSACTION   ISOLATION   LEVEL  读取  UNCOMMITTED  ;

选择

schema_name,

摘要文字,

count_star,

初见

最后一次露面

来自 performance_schema.events_statements_summary_by_digest

其中 sum_errors \ gt; 0 sum_warnings \ gt; 0

订单 通过 last_seen desc;

索引使用情况统计

基于系统表performance_schema.table_io_waits_summary_by_index_usage,其统计维数也为” lds;索引查询返回的行数的统计信息”。

根据哪个索引使用的\\\\最少的统计信息。

但是,此统计信息可能引起误解:
count_read,count_write,count_fetch,count_insert,count_update,count_delete对受索引影响的行数进行计数,sum_timer_wait是等待该索引所花费的累积时间。
如果使用了索引,但是没有数据受到影响(即,没有DML语句的情况下没有命中数据),则不会计入_ ***,但将计入sum_timer_wait。
有一个很容易被误导。该索引没有被击中很多次,但是它已经生成了大量的timer_wait。如果索引看到类似的信息,则不能草率删除索引。

等待事件统计信息

MySQL数据库中的任何操作都需要等待(一定的时间才能完成),有超过1000个等待事件,这些事件属于无知类别,每个版本都不相同,默认值不是全部等待事件已启用。

我个人认为等待事件仅作为参考,不具有问题的诊断价值。即使是重新优化的数据库或低负载数据库,某些事件在一段时间内仍会累积许多等待事件。
这些事件的等待事件不一定是负面的。例如,必须在并发执行期间生成锁等待事物。此等待事件的统计结果也是累积的。只需看一个即可。直接值没有任何参考值。
除非定期收集并计算出差异,否则根据实际情况具有参考意义。

  SET  SESSION  TRANSACTION   ISOLATION   LEVEL  读取  UNCOMMITTED  ;

选择 SUBSTRING_INDEX(名称," / " 1 as wait_type, COUNT 1

FROM performance_schema.setup_instruments

GROUP BY 1

ORDER BY 2 DESC ;

选择

event_name,

count_star,

sum_timer_wait

FROM performance_schema.events_waits_summary_global_by_event_name

在哪里 event_name ! = " 空闲 "

订单 通过 sum_timer_wait desc

limit 100 ;

最后,应该注意的是,
1,MySQL提供的许多系统表(视图)中的数据,只是看一下这个值本身,因为它是一个累积值,个人觉得意义不大太好了,特别是avg _ ***需要与各种综合因素结合起来以供参考。
2.任何系统表查询都可能对系统本身的性能产生一定的影响。如果可能会对系统造成较大的负面影响,请不要收集系统的统计信息。

参考:

http://blog.woqutech.com/

https://www.cnblogs.com/cchust/p/5061131.html

耐克(Nike)的广告如此轰动

您能从空白处看到可能性吗?
有些人希望看到证据并等待有人这样做,然后才敢采取行动。
但是首先行动的人,他们已经等待了吗?
无论是否有人拍摄,它们都直接拍摄。
您能从空白处看到可能性吗?
即使您等待别人,也可以证明这一点。

未经允许不得转载:数据库同步软件|Mysql数据同步软件|sqlserver数据库同步工具|异构同步 » 利用MySQL系统数据库做性能负载诊断

分享到:更多 ()

syncnavigator 8.6.2 企业版

联系我们联系我们