欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 宝鼎售后问题提交 | 后台管理


新闻资讯

MENU

软件开发知识
原文出处: MSSQL123

general log&slow query log

对付MySQL的一般查询日志和慢查询日志,开启较量简朴,个中公用的一个参数是log_output,log_output节制着慢查询和一般查询日志的输出偏向可以是表(mysql.general_log,mysql.slow_log)可能文件(有参数general_log_file和slow_query_log_file设置抉择)可能同时输出到表和文件(想不大白,什么时候需要同时输出到表和文件)。

可是两者受log_output参数影响,输出的方针老是一致的,也就是要么都写入表,可能要么都写入文件,不会一个输出到表,一个输出到文件。

--slow log 相关参数
select * 
from performance_schema.global_variables 
where variable_name in
('slow_query_log','log_output','slow_query_log_file','long_query_time')

--general log 相关参数
select * 
from performance_schema.global_variables 
where variable_name in
('general_log','log_output','general_log_file')

对付上述两种日志,系统默认不会清理,因此在开启了相关日志之后,需要工钱清理。

如何清理汗青general log&slow query log

1,当输出方针为表的时候

无法直接删除,假如直接删除的话,会呈现“ERROR 1556 (HY000): You can’t use locks with log tables.”的错误提示

 虽然也不是说就发起始终  <a href=苏州软件公司 这种暴力的方法清理日志文件" class="aligncenter size-full wp-image-29171" title="380271-20180703170954843-258344323" src="/uploads/allimg/c180723/15322Y632a220-11047.png" />

以general log为例,需要先封锁general_log,然后重定名general_log这个表,

 虽然也不是说就发起始终  <a href=苏州软件公司 这种暴力的方法清理日志文件" class="aligncenter size-full wp-image-29172" title="380271-20180703171224546-1103969365" src="/uploads/allimg/c180723/15322Y63301Q0-2PX.png" />

在对重定名之后的表执行删除,最后在重定名返来,最后开启general_log(假如有须要的话)

SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
DELETE FROM general_log_temp WHERE event_time < DATE(NOW());
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';


--slow log 同理
SET GLOBAL slow_query_log = 'OFF';
RENAME TABLE slow_log TO slow_log_temp;
DELETE FROM slow_log_temp WHERE start_time < DATE(NOW());
RENAME TABLE slow_log_temp TO slow_log;
SET GLOBAL slow_query_log = 'ON';

假如对重定名之后的表(general_log可能是slow_log)没有再次重定名返来,会产生什么?

介入如下截图,假如没有找到对应的表(general_log可能是slow_log),在输出方针为表的环境下,会提示无法找到对应的表,将无法开启对应的日志

 虽然也不是说就发起始终  <a href=苏州软件公司 这种暴力的方法清理日志文件" class="aligncenter size-full wp-image-29173" title="380271-20180703172009088-1917813679" src="/uploads/allimg/c180723/15322Y63305410-32E8.png" />

2,当输出方针为文件的时候

当输出方针为文件的时候,在linux下,昆山软件开发,直接利用rm定名删除即可,假如在开启了一般查询日志可能是慢查询日志,删除对应的日志文件,并不影响数据库的正常利用。网上有说需要遏制MySQL处事然后重定名文件然后在建设新的文件啥的,在Linux下并不是必需的,不知道在windows下是什么环境,没乐趣试。

虽然也不是说就发起始终这种暴力的方法清理日志文件,在Linux下,删除了默认的日志文件(可能重定名了原日志文件),要想再次生成日志文件

  • 可以利用mysqladmin flush-logs
  • 是SQL呼吁flush slow logs;flush general logs;
  • 重启MySQL处事
  • 均可从头生成对应的日志文件。

     虽然也不是说就发起始终  <a href=苏州软件公司 这种暴力的方法清理日志文件" class="aligncenter size-full wp-image-29174" title="380271-20180703173450437-1585443509" src="/uploads/allimg/c180723/15322Y6330Z60-4Z56.png" />

    留意:当对应的文件是存在的时候,上述定名执行之后是没有影响的(也不会清理对应的日志文件)

    以下偏离主题

    当输出方针为表的时候的理会

    不管是general_log可能是slow_log,对应的SQL语句都是二进制名目标,需要利用convert(sql_text using UTF8)做一个转换,昆山软件开发,才变得具有可读性。

     虽然也不是说就发起始终  <a href=苏州软件公司 这种暴力的方法清理日志文件" class="aligncenter size-full wp-image-29176" title="380271-20180703180444452-1479531633" src="/uploads/allimg/c180723/15322Y63311410-5Q14.png" />

    当输出方针为表的时候对机能的影响

    据小我私家测试,在请求量不大的数据库上,开启general_log可能是slow_log,对机能影响并没有很是明明。理论家们一方面强调说MySQL的处理惩罚并发上多强悍,昆山软件公司,一方面又说开启general_log对机能影响很大,会不会自相抵牾呢?关于general_log,在zabbix监控下,测试情况TPS不外百的环境下(每秒写入general log不高出100条数据),开启general_log之后并CPU负载险些没有变革,CPU高点是在做其他压力测试。尤其是slow_log这种写入不是太频繁的日志,直接写入到表中,对机能的影响有限,比后头再去花时间理会文件……