我看到MySQL支持将slow_log存储为一个表(在内部使用mysql/slow_log.CSV文件),这看起来很方便,但它是否是我应该在生产中使用的特性?我发现了关于在旋转文件日志时暂时禁用缓慢查询日志的重要性的在线文章,但是管理slow_log.CSV的最佳实践是什么呢?例如:复制和截断表或旋转slow_log.CSV,就像db-sl.log一样?
发布于 2018-03-26 17:28:04
首先,我不鼓励您在生产中使用带有TABLE输出的缓慢日志。原因是写操作是锁定的,这限制了工作负载的并发性。
此外,CSV存储引擎不支持索引。任何非平凡的查询都将非常缓慢,因此我不认为这样做有什么好处。当然,您可以使用MyISAM并添加索引,但是写操作将变得更加昂贵。
也就是说,“旋转”表的正确方法是复制它,而不是截断它。您可能每次都会丢失一些查询:这些查询在复制之后运行,但在TRUNCATE TABLE语句之前运行。
发布于 2018-03-29 15:17:09
可以为CSV和MyISAM处理慢速查询日志
对于那些使用MySQL RDS并启用缓慢日志的用户,亚马逊将只使用CSV。RDS环境每天晚上都能在特定时间自动旋转.如果您使用MySQL RDS并希望使用慢速日志,请让RDS执行它的操作。
如果您希望管理您自己的缓慢日志轮转(CSV或MyISAM)
每天晚上11:59运行其中一个
SET GLOBAL slow_query_log = 'OFF';
SET sql_log_bin = 0;
USE mysql
DROP TABLE IF EXISTS slow_log_new;
DROP TABLE IF EXISTS slow_log_old;
CREATE TABLE slow_log_old LIKE slow_log;
ALTER TABLE slow_log RENAME slow_log_old;
ALTER TABLE slow_log_new RENAME slow_log;
SET GLOBAL slow_query_log = 'ON';
SET sql_log_bin = 1;中随日期旋转
SET GLOBAL slow_query_log = 'OFF';
SET sql_log_bin = 0;
USE mysql
SET @ymd = DATE_FORMAT(NOW(),'%Y%m%d');
DROP TABLE IF EXISTS slow_log_old;
ALTER TABLE slow_log RENAME slow_log_old;
CREATE TABLE slow_log LIKE slow_log_old;
SET @sql = CONCAT('ALTER TABLE slow_log_old RENAME slow_log_',@ymd);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET GLOBAL slow_query_log = 'ON';
SET sql_log_bin = 1;查看我以前发布的基于MyISAM的慢速日志。
Mar 30, 2012:MySQL慢日志配置Jan 08, 2012:如何启用MySQL通用日志?在高读、低写入环境中,对任何其他引擎进行写入MyISAM的CSV文件都会更快。亚马逊毫不犹豫地使用了它。至于对CSV执行查询,每次都是一个完整的表扫描
https://dba.stackexchange.com/questions/202312
复制相似问题