首页
学习
活动
专区
圈层
工具
发布

我们来说一下 MySQL 的慢查询日志

# 按执行次数排序mysqldumpslow -s c /var/log/mysql/slow.log# 显示前10条最慢的查询mysqldumpslow -t 10 /var/log/mysql/slow.log...-- 微秒级精度(MySQL 5.7+)SET GLOBAL long_query_time = 0.1; -- 100毫秒2....避免日志文件过大敏感信息:日志可能包含敏感数据,需妥善保管生产环境:建议设置合理的阈值,避免记录过多无关查询版本差异:MySQL 5.7+ 支持微秒级精度,之前版本只到秒面试回答简单来说,慢查询日志就像是...查询类型是不是全表扫描(type 字段,如果是 ALL 就不好了)。...看看是不是数据库参数问题,比如缓冲池大小是不是不合理。最后,我的一点实践经验是:慢查询日志在测试环境和生产环境都很有用。在项目上线前,我们会开启它来提前发现一些性能问题。

83110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python测试开发django-77.ORM如何添加 DateTimeField 不显示毫秒

    DateTimeField 字段,发现存到数据库的日期时间格式是’2020-06-28 21:30:48.481516’ 我们一般习惯的格式是’2020-06-28 21:30:48’不带后面的6位数毫秒...5.7 问题描述 model 模型是这样写的 class People(models.Model): name = models.CharField(max_length=20) age...datetime(6) 我们期望的是 datetime 在同步数据库的时候应该不带毫秒 datetime() 解决办法 这是一个非常有趣的问题。...datetime(6),所以保存的数据就包含了微秒。...将上面的代码放置在合适的地方,比如models.py或者init.py或者其他地方,当我们运行 migrations 命令来创建 DateTimeField 列的时候对应在数据库中的字段就被隐射成为了datetime,而不是

    1.9K20

    MySQL内置数据库performance_schema详解(三)阶段事件记录表介绍

    二、performanceschema 特点performanceschema数据库是mysql5.5及后续的版本才会有,并且在MySQL5.7当中默认启用,可以在MySQL配置参数里面关闭,可以节约一部分性能的消耗...TIMER_WAIT_MS:当前执行阶段等待的时间(单位为毫秒)。TIMER_READS:当前执行阶段读取的次数。TIMER_READS_MS:当前执行阶段读取的时间(单位为毫秒)。...SPINS_MS:当前执行阶段自旋的时间(单位为毫秒)。SPINS_AVG_US:当前执行阶段每次自旋所花费的平均时间(单位为微秒)。BACKOFFS:当前执行阶段后退的次数。...BACKOFFS_MS:当前执行阶段后退的时间(单位为毫秒)。BACKOFFS_AVG_US:当前执行阶段每次后退所花费的平均时间(单位为微秒)。THREADS:当前执行阶段涉及到的线程数。...THREADS_MS:当前执行阶段涉及到的线程所花费的时间(单位为毫秒)。OS_WAITS:当前执行阶段等待操作系统的次数。OS_WAITS_MS:当前执行阶段等待操作系统的时间(单位为毫秒)。

    1.9K10

    MySQL时间戳2038年灾难:你的数据还能撑过去吗?

    类型字段可以正常写入超过2038年的时间数据 insert into tb1 (ts, dt) values ('2038-01-01','2039-01-01'); 可见,timestamp写入失败,而datetime...timestamp为4字节,因此最大值为 2147483647 (同int的最大值),换算为时间则为 2038-01-19 03:14:07(UTC时间),即北京时间2038-01-19 11:14:07 而datetime...使用 bigint 存储时间戳:如果你需要更大的时间范围,并且需要毫秒级别的精度,可以考虑使用 bigint 类型存储时间戳。...将时间戳以毫秒或微秒的形式存储在 bigint 字段中,可以更灵活地处理大范围的时间。在这种情况下,你需要在应用中负责将时间戳转换为适当的格式和时区。...数据库升级:如果你的 MySQL版本较低,可以考虑进行数据库升级来解决,且MySQL5.7已经EOL,建议尽快升级至新版本。 往期精彩回顾 1. MySQL高可用之MHA集群部署 2.

    11K51

    实际案例:MySQL主键性能压测!!

    今天,我们就一起基于MySQL 5.7做一个实际的主键性能压测。让大家切实感受下使用UUID做MySQL的主键和int数字做MySQL的主键,性能到底有多少差异。...MyISAM压测情况 压测信息 数据库:MySQL 5.7 表类型:MyISAM 数据量:100W条 注意:此处测试所使用的表和SQL语句同上,此处只记录消耗时间。...语句1消耗时间平均为:0秒; 语句2消耗时间平均为:0.53秒; 语句3消耗时间平均为:0秒;(多方测试,条件里只要有主键ID,查询速度毫秒级都显示000。...语句1消耗时间平均为:0秒; 语句2消耗时间平均为:0.51秒; 语句3消耗时间平均为:0秒;(多方测试,条件里只要有主键ID,查询速度毫秒级都显示000。...语句1消耗时间平均为:0秒; 语句2消耗时间平均为:0.48秒; 语句3消耗时间平均为:0秒;(多方测试,条件里只要有主键ID,查询速度毫秒级都显示000。

    1.4K30

    SHOW PROFILE工具:查询性能分析的深度诊断

    MySQL内置的SHOW PROFILE工具如同数据库的"听诊器",能深入剖析查询执行的微观耗时,为性能调优提供关键数据支撑。本文将结合实战经验,解析其工作原理与应用技巧。...一、性能诊断工具的价值与局限传统方法的痛点 EXPLAIN仅展示执行计划,无法量化实际耗时慢查询日志定位粒度粗糙,难捕捉毫秒级瓶颈第三方工具依赖环境配置,增加运维复杂度SHOW PROFILE的核心优势...5.7+默认禁用,需SET profiling_history_size=100激活采样误差:高并发时可能丢失微秒级事件内存开销:持续开启会使performance_schema增长约5%内存占用实践洞见...FROM shard_01 WHERE ... -- Profile显示0.2s/* 节点2 */ SELECT ......让技术经验流动起来 ▌▍▎▏ 你的每个互动都在为技术社区蓄能 ▏▎▍▌ ✅ 点赞 → 让优质经验被更多人看见 收藏 → 构建你的专属知识库 转发 → 与技术伙伴共享避坑指南 点赞 ➕ 收藏

    52921

    MySQL内置数据库performance_schema详解(七):监视内存使用的表介绍

    图片 一、performanceschema 简介 performance_schema 是 MySQL 数据库中的一个内置的系统数据库,最早从MySQL5.5版本产生,这个数据库主要用于收集和存储与数据库性能相关的统计信息和指标...二、performanceschema 特点 performanceschema数据库是mysql5.5及后续的版本才会有,并且在MySQL5.7当中默认启用,可以在MySQL配置参数里面关闭,可以节约一部分性能的消耗...,有效值为:YES或NO TIMED:是否开启对某个类型对象的时间收集功能,有效值为:YES或NO setup_timers setup_timers主要指定使用哪种类型的timer,分为CPU时钟、微秒...计时器事件记录类型值为(idle、wait、stage、statement、transaction) TIMER_NAME:计时器类型名称,简单来说就是时间的单位(CYCLE、NANOSECOND 毫微秒...、MICROSECOND 微秒、MILLISECOND 毫秒、TICK 红石刻相当于10分之一秒 )。

    92520

    【黑马点评日记02】Redis缓存优化:商户查询性能提升百倍

    内存 (如 Redis):速度快(微秒级),容量较大。 硬盘 (如 MySQL):速度慢(毫秒级),容量巨大。...性能飙升,用户体验好 读内存:通常只需几十微秒 读硬盘:通常需要几毫秒甚至几十毫秒 差距:内存比硬盘快 100-1000倍。用户打开页面从等2秒变成瞬间打开。 2....内存 微秒级 配置决定 MySQL Buffer Pool 应用缓存 内存(进程内/进程外) 微秒-毫秒 可配置 Caffeine、Redis 网络缓存 硬盘/内存 毫秒级 很大 CDN、HTTP缓存...删除缓存(而不是更新缓存) String key = "cache:shop:types"; redisTemplate.delete(key); } } 流程图...更新缓存(而不是删除) String key = "cache:shop:types"; List newList = query().orderByAsc("sort

    48710

    MYSQL ANTIJOIN 提高20% 的性能 真的?

    从mysql 8.017开始有一个“rumor”, 就是相对于以前的版本查询的执行效率会提高20%,而原因在于antijoin的优化。...而从图中可以看到,Materialize 物化这个是之前MYSQL5.X 没有的东西,MYSQL 自动建立一个临时表tmp 使得将符合子查询的条件的记录进行物化。...这里对比 MYSQL 5.7 与 MYSQL 8, 在本次的例子里面,MYSQL 5.7 还稍微的快了那么 几个毫秒。...再次查询,MYSQL 8 使用ANTIJOIN 的方式要比MYSQL 5.7 要快3倍 MYSQL 5.7 ? MYSQL 8 ?...所以通过上面简陋的测试,可以粗略的得出,如果条件不给力,过滤的数据不精准,则MYSQL 5.7 并没有太坏的表现,而MYSQL 8 可能会更慢,而如果条件精准,通过过滤的条件能将一大部分不合格的数据挡在外部

    89620

    如何准确获取 MySQL 主从延迟时间?

    1背景 MySQL 5.7 已于 2023 年 10 月 EOL[1],但仍然有大量的生产环境依赖此版本。本文撰写时间 2025 年 3 月。...不久前,在一套采用 MySQL 5.7 作为部署版本的生产环境中,由于业务执行了大规模事务,进而引发了 MySQL 主从复制的延迟,最终暴露出数据一致性方面的严重问题。...实际上,你会发现该指标与真实延迟数值不符:数据明显差异时显示 0 或出现与复制性能无关的峰值。 这种现象的根源在于该值的计算方法和 MySQL 5.7 的复制架构设计。让我们结合源码剖析一下。...若一个线程因大事务滞后,其他线程已同步,指标仍可能显示 0,掩盖真实延迟。...4结论与建议 在 MySQL 5.7 中,Seconds_Behind_Master 因设计缺陷无法满足业务对精确延迟的需求。

    1K10

    MySQL并行复制解析

    MySQL5.7的并行复制在MariaDB的基础上做了改进,我们知道,事务进入到redo log prepare阶段的时候,由于WAL技术,说明此时事务已经经过了所冲突检测阶段了。...MySQL5.7的并行复制时将所有在主库上处于redo log prepare阶段的事务,和该阶段之后的事务,也就是处于redo log commit阶段的事务,在从库并行执行,从而减少worker线程不必要的等待...这里,有必要再说两个参数, binnlog_group_commit_sync_delay参数,表示redo log prepare阶段完成之后,延迟多少微秒后才调用fsync; binlog_group_commit_sync_no_delay_count...在MySQL 5.7的并行复制策略里,它们可以用来制造更多的“同时处于prepare阶段的事务”。这样就增加了备库复制的并行度。 它们既可以“故意”让主库提交得慢些,又可以让备库执行得快些。...在MySQL 5.7处理备库延迟的时候,可以考虑调整这两个参数值,来达到提升备库复制并发度的目的。

    3.7K20

    MySQL实战第十九讲-为什么我只查一行的语句,也执行这么慢?

    而 MySQL 5.7 版本修改了 MDL 的加锁策略,所以就不能复现这个场景了。 不过,在 MySQL 5.7 版本下复现这个场景,也很容易。如 图3 所示,我给出了简单的复现步骤。...如果你用的是 MySQL 5.7 版本,可以通过 sys.innodb_lock_waits 表查到。...而干掉这个罪魁祸首的方式,就是 KILL QUERY 4 或 KILL 4。 不过,这里不应该显示“KILL QUERY 4”。...如下 图11 所示为全表扫描 5 万行的 slow log: Rows_examined 显示扫描了 50000 行,你可能会说,不是很慢呀,11.5 毫秒就返回了,我们线上一般都配置超过 1 秒才算慢查询...select * from t where id=1; 如下 图12 所示,是这个例子的 slow log,虽然扫描行数是 1,但执行时间却长达 800 毫秒,是不是有点奇怪呢,这些时间都花在哪里了?

    1.7K30

    MySQL深入学习第十九篇-为什么我只查一行的语句,也执行这么慢?

    而 MySQL 5.7 版本修改了 MDL 的加锁策略,所以就不能复现这个场景了。 不过,在 MySQL 5.7 版本下复现这个场景,也很容易。如 图3 所示,我给出了简单的复现步骤。 ?...如果你用的是 MySQL 5.7 版本,可以通过 sys.innodb_lock_waits 表查到。...而干掉这个罪魁祸首的方式,就是 KILL QUERY 4 或 KILL 4。 不过,这里不应该显示“KILL QUERY 4”。...Rows_examined 显示扫描了 50000 行,你可能会说,不是很慢呀,11.5 毫秒就返回了,我们线上一般都配置超过 1 秒才算慢查询,但你要记住:坏查询不一定是慢查询,我们这个例子里面只有...select * from t where id=1; 如下 图12 所示,是这个例子的 slow log,虽然扫描行数是 1,但执行时间却长达 800 毫秒,是不是有点奇怪呢,这些时间都花在哪里了?

    1.7K20
    领券