SLOWLOG

SLOWLOG是什么?

slowlog是执行时间超过给定时长的命令请求的记录。
比如说Redis 的慢查询日志功能用于记录slowlog, 用户可以通过这个功能产生的日志来监视和优化查询速度。

SLOWLOG是怎么记录的?

关系型数据库

MySQL

  • 记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。
  • 通过使用–slow_query_log[={0|1}]选项来启用慢查询日志。缺省情况下hostname-slow.log为慢查询日志文件安名,存放到数据目录。
  • 保存的字段:Query_time、Lock_time、Rows_sent、Rows_examined、Thread_id、Errno、Killed、Bytes_received、Bytes_sent、Read_first、Read_last、Read_key、Read_next、Read_prev、Read_rnd、Read_rnd_next、Sort_merge_passes、Sort_range_count、Sort_rows、Sort_scan_count、Created_tmp_disk_tables、Created_tmp_tables、Start、End(参数的详细解释见参考链接1)
  • 参考链接:1. MySQL :: MySQL 8.0 Reference Manual :: 5.4.5 The Slow Query Log 2. MySQL 之 slow log(包含实际查询样例)

Oracle

没有直接的记录slowlog的配置。
获得slowlog的方法:

  • 记录slowlog,手写SQL语句。
v_start_time := dbms_utility.get_time();
-- Your query here
-- ...
v_end_time := dbms_utility.get_time();
if v_end_time - v_start_time > v_max_time then
   insert into log_table ...;
end if;
  • 查找slowlog。
select
    sql_id,
    sql_exec_id,
    sql_exec_start,
    max(tm) tm,
    (sysdate-sql_exec_start) * 3600*24 ela_tm 
from
    (select
       sql_id,
       sql_exec_id,
       sql_exec_start,
       ( ( Cast(sample_time AS DATE) ) -
             ( Cast(sql_exec_start AS DATE) ) ) * ( 3600 * 24 ) tm
     from
         v$active_session_history
     where
see code depot for full script       
order by
     sql_exec_start;

MariaDB

  • 启用慢日志查询功能SET GLOBAL slow_query_log=1;。文件名默认为${hostname}-slow.log写入datadir目录。
  • 可以通过设置long_query_time系统变量来配置定义慢查询的时间SET GLOBAL long_query_time = 5.0;。此外还可以配置是否记录不使用索引的查询、检查最小行限制的查询、管理查询、特定条件的查询等,还可以限制慢查询的数目以及配置慢查询日志的详细程度。(具体配置可以查看参考链接)
  • 保存的字段:Time、User@Host、Thread_id、Schema、QC_hit、Query_time、Lock_time、Rows_sent、Rows_examined、explain(id、select_type、table、type、possible_keys、key、key_len、ref 、rows、 Extra)
  • Slow Query Log - MariaDB Knowledge Base

SQL Server

没有直接记录slowlog的工具。
可以获取slowlog的办法

Access

没有直接记录slowlog的工具。

DB2

没有直接记录slowlog的工具。

  • 可以使用DB2监控工具db2top,对于执行时间进行排序。

PostgreSQL

  • 启用慢日志功能SET log_min_duration_statement = 5000;,PostgreSQL会将查询(需要5秒以上)视为慢查询并将其发送到日志文件。
  • 保存的字段:Time、duration、statement
  • 参考链接:1. 3 WAYS TO DETECT SLOW QUERIES IN POSTGRESQL

Informix

没有直接记录slowlog的工具。

  • 手写SQL语句,查找slowlog:SELECT * FROM sysmaster:syssqltrace WHERE sql_runtime > threshold ORDER BY sql_runtime DESC;

非关系型数据库

Redis

  • Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
  • Redis 的慢查询日志功能用于记录执行时间超过给定时长的命令请求, 用户可以通过这个功能产生的日志来监视和优化查询速度。
    服务器配置有两个和慢查询日志相关的选项:1. slowlog-log-slower-than 选项指定执行时间超过多少微秒(1 秒等于 1,000,000 微秒)的命令请求会被记录到日志上。2. slowlog-max-len 选项指定服务器最多保存多少条慢查询日志。
    只记录自己被cpu服务的时间,不包含排队等待、IO等待(如AOF SYNC)这类时间。
  • 保存的字段:日志的唯一标识符(uid)、命令执行时的 UNIX 时间戳、命令执行的时长(以微秒计算)、命令以及命令参数
  • 参考链接:1. 慢查询日志— Redis 设计与实现 2. SLOWLOG – Redis

总结

主流的关系型数据库中,MySQL、MariaDB、PostgreSQL有直接的记录slowlog的配置,其他的数据库一般需要通过手写SQL语句查询或者记录,或者借助监控工具。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值