用于日志记录的 MyISAM 与 InnoDB

MyISAM vs InnoDB for Logging

我正在优化一个数据库,而我的学士论文几乎一无所知。我绝不想让你为我完成工作,但我有一些问题到目前为止还没有人能回答。

Table结构:

data_inc, CREATE TABLE 'data_inc' ( 'id' bigint(20) NOT NULL AUTO_INCREMENT, 'id_para' int(10) unsigned NOT NULL DEFAULT '0', 't_s' int(11) unsigned NOT NULL DEFAULT '0', 't_ms' smallint(6) unsigned NOT NULL DEFAULT '0', 't_ns' bigint(20) unsigned NOT NULL DEFAULT '0', 'id_inst' smallint(6) NOT NULL DEFAULT '1', 'value' varchar(255) NOT NULL DEFAULT '', 'isanchor' tinyint(4) unsigned NOT NULL DEFAULT '0', PRIMARY KEY ('id','t_ns'), KEY 't_s' ('t_s'), KEY 't_ns' ('t_ns') ) ENGINE=MyISAM AUTO_INCREMENT=2128295174 DEFAULT CHARSET=latin1 /* !50100 PARTITION BY RANGE (t_ns) (PARTITION 19_02_2015_23_59 VALUES LESS THAN (1424386799000000000) ENGINE = MyISAM, PARTITION 20_02_2015_23_59 VALUES LESS THAN (1424473199000000000) ENGINE = MyISAM, PARTITION 21_02_2015_23_59 VALUES LESS THAN (1424559599000000000) ENGINE = MyISAM, PARTITION 22_02_2015_23_59 VALUES LESS THAN (1424645999000000000) ENGINE = MyISAM, PARTITION 23_02_2015_23_59 VALUES LESS THAN (1424732399000000000) ENGINE = MyISAM, PARTITION 24_02_2015_23_59 VALUES LESS THAN (1424818799000000000) ENGINE = MyISAM, PARTITION 25_02_2015_23_59 VALUES LESS THAN (1424905199000000000) ENGINE = MyISAM, PARTITION 05_03_2015_23_59 VALUES LESS THAN (1425596399000000000) ENGINE = MyISAM, PARTITION 13_03_2015_23_59 VALUES LESS THAN (1426287599000000000) ENGINE = MyISAM, PARTITION 14_03_2015_23_59 VALUES LESS THAN (1426373999000000000) ENGINE = MyISAM, PARTITION 15_03_2015_23_59 VALUES LESS THAN (1426460399000000000) ENGINE = MyISAM, PARTITION 16_03_2015_23_59 VALUES LESS THAN (1426546799000000000) ENGINE = MyISAM, PARTITION 17_03_2015_23_59 VALUES LESS THAN (1426633199000000000) ENGINE = MyISAM, PARTITION 18_03_2015_23_59 VALUES LESS THAN (1426719599000000000) ENGINE = MyISAM) */

系统目前每秒将多达 4000 个参数记录到数据库中(不同的表,哪个在存储过程中决定)。每 5 分钟、1 小时和每天调用不同的脚本来分析日志数据,在此期间数据被写入表中。这会导致一些沉重的负担。从 MyISAM 切换到 InnoDB(或其他)是否有可能提高性能?

感谢您的帮助!

用于快速记录然后进行分析...

  1. 将数据收集到没有索引的 MyISAM table 中。 5 分钟后(120 万行!):
  2. 解析到InnoDB中"Summary Table(s)".
  3. 删除 TABLE 或截断 TABLE。

分析将放入其他 table(s)。这些将包含摘要信息,并且 比 120 万行小很多

要获取每小时数据,请汇总摘要 table(s)。但是不要创建 "hourly" tables;只需根据需要获取并重新计算。

这里有一些相关的讨论:High speed ingestion and Summary Tables