如何检测服务器哪些语句慢,服务器SQL慢查询怎么排查?

检测服务器哪些语句慢,核心手段是打开数据库慢查询日志,配合实时抓取SQL和执行计划分析。 这是多数DBA和运维人员的共识,只要定位到那几条拖垮性能的语句,优化就有了明确靶点。

先把慢语句“捞”出来:慢查询日志怎么开

大多数后端服务卡顿,根子在数据库,服务器慢查询日志就是专门记录执行时间超过阈值的SQL语句的黑匣子,以最常见的MySQL为例,你不需要重启服务,在客户端直接执行以下命令就能打开:

Java面试被问:Mysql慢查询语句,如何排查与优化?Java后端/跳槽涨薪/求职面试/后端开发/后端开发/MySQL/Redis
加载中
Java面试被问:Mysql慢查询语句,如何排查与优化?Java后端/跳槽涨薪/求职面试/后端开发/后端开发/MySQL/Redis
J
Java面试合集
980--
原视频地址
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
  • 第一行打开日志记录功能。
  • 第二行设置阈值,执行时间超过1秒的语句会被记录,生产环境建议先设1秒,后续根据日志量调到0.5秒或更低。
  • 第三行指定日志存放路径,确保MySQL进程对该目录有写权限。

如果你用的是MySQL 8.0或Percona分支,还能额外开启记录未使用索引的语句:SET GLOBAL log_queries_not_using_indexes = ON;,这能帮你揪出那些全表扫描却没慢到1秒的隐形炸弹。

数据放进去之后怎么查看?别直接cat整个日志文件,太大,用mysqldumpslow命令做聚合分析:

mysqldumpslow -t 10 -s at /var/log/mysql/mysql-slow.log
  • -s at表示按平均查询时间排序。
  • -t 10只显示前10条最耗时的语句。

这条命令的输出会告诉你哪个SQL结构平均执行时间最长、累计执行多少次、总共消耗多少秒,比如输出里反复出现SELECT FROM orders WHERE status='P',那就说明这张表缺索引或数据分布失衡了。

不重启不落盘:生产环境实时抓取慢SQL

慢查询日志有个盲区只记录开启日志之后执行的语句,而且日志文件轮转不及时会占满磁盘,很多团队在排查线上问题时不想动全局配置,那就用实时抓取的办法。针对MySQL,SHOW FULL PROCESSLIST 是立竿见影的手段。 连上数据库执行这条命令,能看到当前所有正在执行的连接,其中Time列就是语句已经跑了多少秒,如果看到某个连接长时间停留在Sending data或Copying to tmp table状态,基本可以断定它就是拖垮业务的元凶。

直接看当前连接不够直观,可以每5秒采集一次快照,连续抓几次对比:

如何检测服务器哪些语句慢,服务器SQL慢查询怎么排查?

mysql -uroot -p -e "SHOW FULL PROCESSLIST" >> /tmp/slow_queries.txt

配合Linux的watch命令每5秒自动刷新:watch -n 5 "mysql -uroot -p -e 'SHOW FULL PROCESSLIST'",一旦发现某个Id反复出现且Time持续累积,立刻记录下它的Info,那就是需要优化的SQL语句,这种方式不需要改任何配置,适合临时排查、快速取证。

拿到慢语句之后:用执行计划定位瓶颈

捞到具体的慢语句不等于结束,你得知道它慢在哪一步。用EXPLAIN命令让数据库告诉你它的执行路径。 在慢语句前面加上EXPLAIN,

EXPLAIN SELECT  FROM orders WHERE customer_id = 1024 ORDER BY created_at DESC;

返回结果里重点看三列:

  • type:全表扫描是ALL,走索引是ref或range,ALL说明没吃到索引。
  • rows:预估扫描行数,从几万变成几百,优化效果立竿见影。
  • Extra:如果出现Using filesort或Using temporary,意味着排序和分组操作在磁盘上完成,这比内存操作慢一个数量级。

行业共识认为,一条SQL的性能问题八成出在索引缺失或统计信息过期上。 结合慢查询日志里的高频语句,建立联合索引通常能解决大部分问题,例如上面那条语句,可以在(customer_id, created_at)上创建联合索引,既过滤客户又覆盖排序。

还有一类隐蔽的慢语句藏在ORM生成的SQL里,应用代码用findByCustomerIdOrderByCreatedAtDesc()这种方法名时,框架会自动拼出完整的SQL,你在MySQL通用日志里看到的一长串别名、子查询,往往就是ORM的“杰作”,排查时别忽略这一层,把框架的SQL日志级别调到DEBUG,直接归类打印出来的语句。

不同数据库和场景的排查差异

MySQL之外,其他主流数据库也有对应的检测手段,它们的核心逻辑一致但命令各异。

SQL Server怎么看

SQL Server没有独立的慢查询日志文件,用动态管理视图查:

SELECT TOP 10
    text,
    execution_count,
    total_worker_time / 1000000 AS total_cpu_s,
    total_elapsed_time / 1000000 AS total_duration_s
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
ORDER BY total_worker_time DESC;

如何检测服务器哪些语句慢,服务器SQL慢查询怎么排查?

这个查询直接返回累计消耗CPU时间最多的10条语句,执行一次,把total_duration_s除以execution_count得到单次平均耗时,重点处理那些平均耗时高且执行频繁的语句。

PostgreSQL的做法

PostgreSQL开启慢查询日志要在配置文件postgresql.conf里改:

log_min_duration_statement = 1000

设置成1000表示超过1秒的语句记录日志,改完重启数据库生效,日志里会写清楚语句全文和执行时间,配合pg_stat_statements扩展模块还能统计语句的调用次数和总耗时。

Redis和MongoDB

Redis的慢查询日志用命令查看:SLOWLOG GET 5,返回最近5条慢命令,MongoDB则用db.currentOp()抓取执行超过阈值的操作,它们的原理和关系型数据库类似,都是设置超时阈值加上定期检查。

常见语句慢的几类典型场景

根据大量生产事故复盘,慢语句集中出现在以下场景:

  • 单表数据量超过千万级,索引失效导致扫描行数暴涨。
  • 多表关联时关联字段类型不一致,索引被隐式转换干掉。
  • 分页查询的OFFSET过大,比如LIMIT 100000, 20,前10万行全部扫描。
  • 查询列多于实际需要,SELECT 把不需要的大字段(如TEXT、BLOB)也读入内存。
  • 同一SQL在高峰期并发激增,行锁等待时间计入执行时长。

一条慢语句从发现到解决的完整路径

拿一个真实案例走一遍流程:某天监控告警接口响应时间超过3秒,查看数据库慢查询日志发现SELECT FROM user_login_log WHERE user_id=12345 ORDER BY login_time DESC LIMIT 10平均执行2.8秒。

  • 第二步用EXPLAIN查看执行计划,发现type=ALL,表里有500万行,每次查询全表扫描。
  • 第三步检查索引情况,user_id字段虽然有索引,但排序字段login_time没有,数据库不得不把筛选结果放到临时表排序。
  • 第四步创建联合索引:
ALTER TABLE user_login_log ADD INDEX idx_user_time (user_id, login_time);
  • 第五步再次执行原语句,耗时降到15毫秒,慢查询日志里这条语句不再出现。

整个排查过程用时不到20分钟,绝大多数场景都可以按这条路径复制。

慢查询日志怎么设置生产配置对比

如何检测服务器哪些语句慢,服务器SQL慢查询怎么排查?

不同业务体量和数据库版本对慢查询日志的配置要求不同,下表列出常见方案作为参考:

配置项 小型业务(日活<10万) 中型业务 大型业务
阈值long_query_time 2秒 1秒 5秒
日志保留周期 7天 3天 1天
分析工具 mysqldumpslow pt-query-digest 自研分析平台
是否开启未用索引日志 否 是 是

小业务量日志量小,保留时间长点没关系;大业务量日志增长快,分析工具必须自动化。 定期用工具导出Top 10耗时语句,建立每张表索引使用台账,慢语句基本逃不出监控视野。

检测服务器哪些语句慢:用户常见问题

怎么查看mysql慢查询日志是否已开启

执行SHOW VARIABLES LIKE 'slow_query_log';,结果Value为OFF即未开启,为ON则已开启,同时用SHOW VARIABLES LIKE 'long_query_time';查看阈值设置,MySQL默认10秒,生产环境建议调低到1秒或以下。

线上数据库无法重启,慢查询日志能立即生效吗

能,MySQL的SET GLOBAL命令修改慢查询相关参数不需要重启服务,慢查询日志开关和阈值都会即时生效。 但注意全局参数重启数据库后会恢复为配置文件中的值,若需永久生效得同步更新my.cnf,SQL Server不需要重启,杀到对应会话或等待批次结束即可。

慢日志里语句已经优化到毫秒级,但服务器还是慢怎么办

这种局面说明瓶颈已不在单条语句,转向服务器资源层面,在数据库所在服务器执行top看CPU和负载,用iostat看磁盘IO等待,用vmstat观察上下文切换。内网响应快慢还牵扯网络延迟和应用服务器线程池满没满,这类问题要多链路排查,单查SQL就找不到答案了。

数据库慢语句检测始终是个动态过程,业务增长、数据规模膨胀、索引失效都会让原本快速的语句慢慢变质,周期性用慢查询日志扫描、执行计划复核、索引重建这个循环,服务器性能才能持续跑在安全线上。最终判断标准就一条:语句执行时间是否符合业务对响应速度的预期。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/%e5%a6%82%e4%bd%95%e6%a3%80%e6%b5%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%93%aa%e4%ba%9b%e8%af%ad%e5%8f%a5%e6%85%a2%ef%bc%8c%e6%9c%8d%e5%8a%a1%e5%99%a8sql%e6%85%a2%e6%9f%a5%e8%af%a2%e6%80%8e%e4%b9%88/

赞 (0)
如何修改虚拟机磁盘空间大小而不丢失数据?虚拟机扩容注意事项有哪些
上一篇 2026年10月17日 19:53
租服务器每年要花多少钱,服务器租赁费用明细有哪些
下一篇 2026年10月17日 19:54

相关推荐

  • 域名解析怎么操作?,具体步骤和注意事项有哪些?

    域名当然可以解析,而且必须完成解析,你的网站才能真正上线,域名才能被全球用户访问,解析的本质,就是把“www.example.com”这类好记的域名,翻译成服务器听得懂的IP地址,整个过程不复杂,但步骤和细节决定成败,域名解析到底在做什么你可以把域名解析理解成互联网世界的电话簿,没有它,你在浏览器输入域名时,系……

    2026年9月6日
    400
  • html图片怎么设置形状?html图片形状代码

    通过CSS的clip-path属性或SVG路径定义,你可以轻松将HTML图片裁剪为任意几何或不规则形状,这是目前前端开发中性能最优且兼容性最好的方案,在网页设计的视觉呈现中,传统的矩形图片往往显得呆板且缺乏个性,随着2026年网页设计趋势向沉浸式体验转变,打破常规边框限制已成为提升用户留存率的关键手段,许多开发……

    服务器宽带 2026年6月9日
    4100
  • 专线宽带多少一年?附详细价格表,企业专线宽带资费标准是多少

    企业专线宽带的年度费用跨度极大,通常在3000元至50万元不等,具体价格取决于带宽大小、线路类型(独享/共享)、接入方式以及运营商层级,对于绝大多数中小企业而言,10M-100M的独享光纤专线,年费主要集中在5000元至30000元这个区间,这是性价比最高的选择,与家庭宽带不同,专线宽带提供固定IP、上下行对等……

    2026年3月4日
    43400
  • Shopify数据检测工具怎么选?Shopify店铺数据分析工具推荐

    Shopify数据检测工具的核心价值在于通过多维度的流量、竞品及SEO数据分析,帮助卖家在2026年复杂的电商环境中精准定位高潜力市场并优化运营策略,其中Store Leads、Jungle Scout及SimilarWeb是业内公认的主流选择,在跨境电商进入存量博弈的2026年,单纯依靠直觉选品已难以为继,卖……

    2026年6月24日
    2200
  • html隐藏一段文字怎么实现?html隐藏文字代码

    这是隐藏的文字,用户和爬虫均不会感知其存在,“`使用ARIA属性用于无障碍隐藏如果隐藏的文字是为了辅助屏幕阅读器(如视障人士使用),则不能使用display: none,因为这会彻底屏蔽屏幕阅读器,此时应使用aria-hidden=”true”配合CSS clip或opacity技巧,但需注意,百度爬虫对ar……

    2026年6月5日
    3210
  • 云服务用的服务器有哪些类型,哪家性价比高?

    云服务用的服务器主要分为裸金属服务器、云服务器(虚拟机)、容器实例和无服务器计算四大类,选型时需结合计算、内存、存储和网络需求倒推, 其中云服务器(ECS/CVM)是多数业务的首选,裸金属适合核心数据库,容器和无服务器则面向轻量级、事件驱动场景,云服务用的服务器有哪些?按形态分四类云服务背后并非只有一种服务器……

    2026年10月12日
    100
  • h代表几g网络?h和3g网速哪个快

    “H”代表的是3G网络(第三代移动通信技术),它并非5G或4G,而是介于2G与4G之间的过渡技术,目前在全球范围内已基本完成退网或仅保留极小范围的边缘覆盖,当你看到手机状态栏显示“H”或“H+”时,这意味着你的设备正在连接3G网络,对于很多用户来说,这个符号往往意味着网速较慢、加载图片需要等待,甚至视频通话会卡……

    2026年6月4日
    4100
  • 函数收敛的定义是什么?,如何创建告警收敛规则

    函数收敛的定义是描述变量趋近于极限的过程,而创建告警收敛规则则是将这一数学思想应用于运维监控,通过合并重复告警实现降噪,从而提升故障响应效率,函数收敛的定义:从极限思想到运维实践什么是函数收敛函数收敛的核心是“趋近”,当一个函数在自变量趋近某一点或无穷大时,函数值无限接近一个确定数值,我们就说这个函数收敛,比如……

    2026年7月31日
    400
  • fc-san存储性能到底怎么样,多少钱?

    FC SAN存储是企业级存储的首选方案,尤其适合对数据一致性和低延迟有严格要求的核心业务场景,FC SAN,全称光纤通道存储区域网络,通过专用光纤网络实现服务器与存储设备的高速互联,它独立于传统以太网,因此数据传输不受局域网流量影响,延迟极低,FC SAN存储的核心架构与工作方式FC SAN是什么?它和普通存储……

    2026年8月2日
    600
  • 宝塔Linux面板怎么创建FTP连接服务器?宝塔面板创建FTP连接失败怎么办

    宝塔Linux面板创建FTP连接服务器的核心步骤是:在面板中开启FTP服务并设置用户权限,随后使用FileZilla等客户端配合IP、端口及账号密码进行连接, 很多站长在搭建网站后,习惯性地依赖宝塔自带的“文件”管理功能上传代码,但当面对大型媒体库、批量图片处理或需要本地IDE实时同步时,传统FTP/SFTP协……

    2026年6月20日
    2100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注