解决方案:深色大气的科技公司网站源码,自适应布局设计,带完整演示数据

优采云 发布时间: 2022-12-10 02:46

  解决方案:深色大气的科技公司网站源码,自适应布局设计,带完整演示数据

  

  短信 | 管理用户头像管理

  

  解决方法:这些 MySQL 最朴素的监控方式!用完爱不释手!

  目前数据库的监控方式有很多,分为内置数据库、商业、开源三大类,各有特点;而对于mysql数据库,由于社区活跃度高,所以监控方式也很多,不管是哪种监控方式,核心都是监控数据。获取综合监控数据后,就是柔性展示部分。

  那么今天我们就来介绍一下使用mysql自带的方法采集来获取监控数据,在单系统下是最快、最方便、损耗最小的。

  这次文章充分利用mysql自带的show命令实现获取,从connects、buffercache、lock、SQL、statement、Database throughputs、serverconfig7获取监控数据。

  连接数(Connects)

  最大使用连接数:

  show status like ‘Max_used_connections’

  当前打开的连接数:

  show status like ‘Threads_connected’

  缓存(bufferCache)

  未从缓冲池中读取的次数:

  show status like ‘Innodb_buffer_pool_reads’

  从缓冲池中读取的次数:

  show status like ‘Innodb_buffer_pool_read_requests’

  缓冲池中的总页数:

  show status like ‘Innodb_buffer_pool_pages_total’

  缓冲池中空闲的页数:

  show status like ‘Innodb_buffer_pool_pages_free’

  缓存命中率计算:

  (1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%

  缓存池使用情况为:

  ((Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free)/Innodb_buffer_pool_pages_total)*100%

  锁

  等待的锁数:

  show status like ‘Innodb_row_lock_waits’

  每个锁的平均等待时间:

  show status like ‘Innodb_row_lock_time_avg’

  检查表锁:

  show open TABLES where in_use>0;

  如果有数据,说明有锁表,如果为空,说明没有表锁

  备注:锁等待统计的统计次数为累计数据,每次获取可以减去之前的数据,得到当前的统计数据

  数据库

  检查mysql开关是否打开:

  show variables like ‘slow_query_log’;

  

  ON为开启,为OFF则设置global slow_query_log=1开启

  查看mysql阈值:

  show variables like ‘long_query_time’;

  根据页面传输阈值参数,修改阈值设置global long_query_time=0.1

  查看mysql慢sql目录:

  show variables like ‘slow_query_log_file’;

  格式化慢sql日志:

  mysqldumpslow -s at -t 10 /export/data/mysql/log/slow.log

  注意:该语句不能通过jdbc执行,属于命令行执行。

  意思是:显示最长的10条SQL语句的执行信息,10可以修改为TOP的个数。显示的信息有:执行次数、平均执行时间、SQL语句

  备注:当mysqldumpslow命令执行失败时,慢日志会同步到本地进行格式化。

  陈述

  插入数量:显示状态如 'Com_insert'

  删除数量:显示状态如“Com_delete”

  更新数量:显示状态如 'Com_update'

  选择数量:显示状态如 'Com_select'

  吞吐量(数据库吞吐量)

  发送吞吐量:显示状态,如“Bytes_sent”

  接收吞吐量:显示状态,如“Bytes_received”

  总吞吐量:Bytes_sent+Bytes_received

  数据库参数(serverconfig)

  显示变量

  慢SQL

  慢SQL是指MySQL慢查询,特别是运行时间超过long_query_time值的SQL。

  我们经常听说MySQL有二进制日志binlog、中继日志relaylog、重做回滚日志redolog、undolog等。对于慢查询,还有慢查询日志slowlog,用于记录MySQL中响应时间超过阈值的语句.

  慢SQL对实际生产业务的影响是致命的,因此测试人员在性能测试时监控数据库SQL语句的执行情况,为开发提供准确的性能优化建议就显得尤为重要。那么如何利用Mysql数据库提供的慢查询日志来监控SQL语句的执行情况,找出高消耗的SQL语句。下面详细介绍慢查询日志的使用步骤:

  这个long_query_time用来定义慢于多少秒时的“慢查询”。注意单位是秒。我通过执行sql命令set long_query_time=1将long_query_time的值设置为1,也就是执行时间超过了1秒。计算慢查询,如下:

  使用慢sql分析工具mysqldumpslow对慢SQL日志进行格式化分析 mysqldumpslow慢查询分析工具,mysql安装后自带。可以通过./mysqldumpslow --help查看参数说明

  常见用法:

  取出 10 个最常用的慢查询

  ./mysqldumpslow -s c -t 10 /export/data/mysql/log/slow.log

  取出查询时间最慢的3个慢查询

  ./mysqldumpslow -s t -t 3 /export/data/mysql/log/slow.log

  注意:使用mysqldumpslow的分析结果不会显示具体完整的sql语句,只会显示sql的组成结构;

  假如: SELECT FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000;

<p>

mysqldumpslow 命令执行后显示:

Count: 2 Time=1.5s (3s) Lock=0.00s (0s) Rows=1000.0 (2000), vgos_dba[vgos_dba]@[10.130.229.196]SELECT FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N

</p>

  mysqldumpslow的详细分析结果:

  Count:#表示该类型的语句执行次数,上图中表示 select 语句执行了 2 次。

Time:#表示该类型的语句执行的平均时间(总计时间)

Lock:#锁时间 0s。

Rows:#单次返回的结果数是 1000 条记录,2 次总共返回 2000 条记录。

  通过这个工具,可以找出哪些SQL语句是慢SQL,从而反馈给研发优化,比如加索引,应用的实现方式等等。

  常见的慢 SQL 故障排除

  没有子查询

  SELECT FROM t1 WHERE id (SELECT id FROM t2 WHERE name=’hechunyang’);

  在MySQL 5.5中,内部执行计划器是这样执行子查询的:先查外表再匹配内表,而不是先查内表t2。当外表的数据很大时,查询速度会很慢。

  在MariaDB10/MySQL5.6版本中,使用join关联方式进行了优化,这条SQL会自动转换为SELECT t1。从 t1 加入 t2 在 t1.id = t2.id;

  但请注意,优化仅对 SELECT 有效,对 UPDATE/DELETE 子查询无效。在生产环境中,尽量避免使用子查询。

  避免功能索引

  SELECT FROM t WHERE YEAR(d) >= 2016;

  由于MySQL不像Oracle那样支持函数式索引,即使d字段有索引,也会直接扫描全表。

  应改为 &gt;SELECT FROM t WHERE d &gt;= '2016-01-01';

  用 IN 替换 OR 低效查询

  慢 SELECT FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;

  高效查询&gt;SELECT FROM t WHERE LOC_IN IN (10,20,30);

  LIKE 双百分号不能使用索引

  SELECT FROM t WHERE name LIKE ‘%de%’;

  利用

  SELECT FROM t WHERE name LIKE ‘de%’;

  分组统计可以禁用排序

  SELECT goods_id,count() FROM t GROUP BY goods_id;

  默认情况下,MySQL 对所有 GROUP BY col1, col2... 字段进行排序。如果查询收录 GROUP BY 并且你想避免使用排序后的结果,你可以指定 ORDER BY NULL 来禁用排序。

  使用 SELECT goods_id,count () FROM t GROUP BY goods_id ORDER BY NULL;

  禁止不必要的 ORDER BY 排序

  SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;

  使用 SELECT count (1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id;

  总结

  任何事情都不要过分注重外表,而要注重内在的东西,往往在华丽的外表下会有相应的负担和损失。

  mysql数据库的监控支持通过SQL从performance_schema库中访问对应的表数据,前提是该库已初始化并开启监控数据写入。

  对于监控,不是手段的多样性,而是监控的本质和需要监控的项目内容,这样才能找到适合自己项目特点的监控方式。

  在选择监控mysql的监控工具时,需要注意监控工具本身对数据库服务器的消耗,以免影响自身使用。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线